python面試習(xí)題及答案_第1頁
python面試習(xí)題及答案_第2頁
python面試習(xí)題及答案_第3頁
python面試習(xí)題及答案_第4頁
python面試習(xí)題及答案_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1. Python是如何進(jìn)行內(nèi)存管理的?答:從三個(gè)方面來說,一對(duì)象的引用計(jì)數(shù)機(jī)制,二垃圾回收機(jī)制,三內(nèi)存池機(jī)制一、對(duì)象的引用計(jì)數(shù)機(jī)制python內(nèi)部使用引用計(jì)數(shù),來保持追蹤內(nèi)存中的對(duì)象,所有對(duì)象都有引用計(jì)數(shù)。引用計(jì)數(shù)增加的情況:1,一個(gè)對(duì)象分配一個(gè)新名稱2,將其放入一個(gè)容器中(如列表、元組或字典)引用計(jì)數(shù)減少的情況:1,使用del語句對(duì)對(duì)象別名顯示的銷毀2,引用超出作用域或被重新賦值sys.getrefcount( )函數(shù)可以獲得對(duì)象的當(dāng)前引用計(jì)數(shù)多數(shù)情況下,引用計(jì)數(shù)比你猜測(cè)得要大得多。對(duì)于不可變數(shù)據(jù)(如數(shù)字和字符串),解釋器會(huì)在程序的不同部分共享內(nèi)存,以便節(jié)約內(nèi)存。二、垃圾回收1,當(dāng)一個(gè)對(duì)象

2、的引用計(jì)數(shù)歸零時(shí),它將被垃圾收集機(jī)制處理掉。2,當(dāng)兩個(gè)對(duì)象a和b相互引用時(shí),del語句可以減少a和b的引用計(jì)數(shù),并銷毀用于引用底層對(duì)象的名稱。然而由于每個(gè)對(duì)象都包含一個(gè)對(duì)其他對(duì)象的應(yīng)用,因此引用計(jì)數(shù)不會(huì)歸零,對(duì)象也不會(huì)銷毀。(從而導(dǎo)致內(nèi)存泄露)。為解決這一問題,解釋器會(huì)定期執(zhí)行一個(gè)循環(huán)檢測(cè)器,搜索不可訪問對(duì)象的循環(huán)并刪除它們。三、內(nèi)存池機(jī)制Python提供了對(duì)內(nèi)存的垃圾收集機(jī)制,但是它將不用的內(nèi)存放到內(nèi)存池而不是返回給操作系統(tǒng)。1,Pymalloc機(jī)制。為了加速Python的執(zhí)行效率,Python引入了一個(gè)內(nèi)存池機(jī)制,用于管理對(duì)小塊內(nèi)存的申請(qǐng)和釋放。2,Python中所有小于256個(gè)字節(jié)的對(duì)象

3、都使用pymalloc實(shí)現(xiàn)的分配器,而大的對(duì)象則使用系統(tǒng)的malloc。3,對(duì)于Python對(duì)象,如整數(shù),浮點(diǎn)數(shù)和List,都有其獨(dú)立的私有內(nèi)存池,對(duì)象間不共享他們的內(nèi)存池。也就是說如果你分配又釋放了大量的整數(shù),用于緩存這些整數(shù)的內(nèi)存就不能再分配給浮點(diǎn)數(shù)。 2. 什么是lambda函數(shù)?它有什么好處答:lambda 表達(dá)式,通常是在需要一個(gè)函數(shù),但是又不想費(fèi)神去命名一個(gè)函數(shù)的場(chǎng)合下使用,也就是指匿名函數(shù)lambda函數(shù):首要用途是指點(diǎn)短小的回調(diào)函數(shù)lambda arguments:expression>>> a=lambdax,y:x+y>>> a(3,11

4、)3. Python里面如何實(shí)現(xiàn)tuple和list的轉(zhuǎn)換?答:直接使用tuple和list函數(shù)就行了,type()可以判斷對(duì)象的類型 4. 請(qǐng)寫出一段Python代碼實(shí)現(xiàn)刪除一個(gè)list里面的重復(fù)元素答:1,使用set函數(shù),set(list)2,使用字典函數(shù),>>>a=1,2,4,2,4,5,6,5,7,8,9,0>>> b=>>>b=b.fromkeys(a)>>>c=list(b.keys()>>> c5. 編程用sort進(jìn)行排序,然后從最后一個(gè)元素開始判斷a=1,2,4,2,4,5,7,10,5,

5、5,7,8,9,0,3a.sort()last=a-1for i inrange(len(a)-2,-1,-1):if last=ai:del aielse:last=aiprint(a) 6. Python里面如何拷貝一個(gè)對(duì)象(賦值,淺拷貝,深拷貝的區(qū)別)答:賦值(=),就是創(chuàng)建了對(duì)象的一個(gè)新的引用,修改其中任意一個(gè)變量都會(huì)影響到另一個(gè)。淺拷貝:創(chuàng)建一個(gè)新的對(duì)象,但它包含的是對(duì)原始對(duì)象中包含項(xiàng)的引用(如果用引用的方式修改其中一個(gè)對(duì)象,另外一個(gè)也會(huì)修改改變)1,完全切片方法;2,工廠函數(shù),如list();3,copy模塊的copy()函數(shù)深拷貝:創(chuàng)建一個(gè)新的對(duì)象,并且遞歸的復(fù)制它所包含的對(duì)象(

6、修改其中一個(gè),另外一個(gè)不會(huì)改變)copy模塊的deep.deepcopy()函數(shù) 7. 介紹一下except的用法和作用?答:tryexceptexceptelsefinally執(zhí)行try下的語句,如果引發(fā)異常,則執(zhí)行過程會(huì)跳到except語句。對(duì)每個(gè)except分支順序嘗試執(zhí)行,如果引發(fā)的異常與except中的異常組匹配,執(zhí)行相應(yīng)的語句。如果所有的except都不匹配,則異常會(huì)傳遞到下一個(gè)調(diào)用本代碼的最高層try代碼中。try下的語句正常執(zhí)行,則執(zhí)行else塊代碼。如果發(fā)生異常,就不會(huì)執(zhí)行如果存在finally語句,最后總是會(huì)執(zhí)行。8. Python中pass語句的作用是什么?答:pass語

7、句不會(huì)執(zhí)行任何操作,一般作為占位符或者創(chuàng)建占位程序,whileFalse:pass9. 介紹一下Python下range()函數(shù)的用法?答:列出一組數(shù)據(jù),經(jīng)常用在for in range()循環(huán)中10. 如何用Python來進(jìn)行查詢和替換一個(gè)文本字符串?答:可以使用re模塊中的sub()函數(shù)或者subn()函數(shù)來進(jìn)行查詢和替換,格式:sub(replacement, string,count=0)(replacement是被替換成的文本,string是需要被替換的文本,count是一個(gè)可選參數(shù),指最大被替換的數(shù)量)>>> import re>>>p=pile

8、(blue|white|red)>>>print(p.sub(colour,'blue socks and red shoes)colour socks and colourshoes>>>print(p.sub(colour,'blue socks and red shoes,count=1)colour socks and redshoessubn()方法執(zhí)行的效果跟sub()一樣,不過它會(huì)返回一個(gè)二維數(shù)組,包括替換后的新的字符串和總共替換的數(shù)量 11. Python里面match()和search()的區(qū)別?答:re模塊中match(p

9、attern,string,flags),檢查string的開頭是否與pattern匹配。re模塊中research(pattern,string,flags),在string搜索pattern的第一個(gè)匹配值。>>>print(re.match(super, superstition).span()(0, 5)>>>print(re.match(super, insuperable)None>>>print(re.search(super, superstition).span()(0, 5)>>>print(re.sea

10、rch(super, insuperable).span()(2, 7)12. 用Python匹配HTML tag的時(shí)候,<.*>和<.*>有什么區(qū)別?答:術(shù)語叫貪婪匹配( <.*> )和非貪婪匹配(<.*> )例如:<div><span>test</span></div><.*> :<div><span>test</span></div><.*> :<div>13. Python里面如何生成隨機(jī)數(shù)?答:random

11、模塊隨機(jī)整數(shù):random.randint(a,b):返回隨機(jī)整數(shù)x,a<=x<=brandom.randrange(start,stop,step):返回一個(gè)范圍在(start,stop,step)之間的隨機(jī)整數(shù),不包括結(jié)束值。隨機(jī)實(shí)數(shù):random.random( ):返回0到1之間的浮點(diǎn)數(shù)random.uniform(a,b):返回指定范圍內(nèi)的浮點(diǎn)數(shù)。14. 有沒有一個(gè)工具可以幫助查找python的bug和進(jìn)行靜態(tài)的代碼分析?答:PyChecker是一個(gè)python代碼的靜態(tài)分析工具,它可以幫助查找python代碼的bug, 會(huì)對(duì)代碼的復(fù)雜度和格式提出警告Pylint是另外一

12、個(gè)工具可以進(jìn)行codingstandard檢查15. 如何在一個(gè)function里面設(shè)置一個(gè)全局的變量?答:解決方法是在function的開始插入一個(gè)global聲明:def f()global x16. 單引號(hào),雙引號(hào),三引號(hào)的區(qū)別答:單引號(hào)和雙引號(hào)是等效的,如果要換行,需要符號(hào)(),三引號(hào)則可以直接換行,并且可以包含注釋如果要表示Lets go 這個(gè)字符串單引號(hào):s4 = Lets go雙引號(hào):s5 = “Lets go”s6 = I realy like“python”!這就是單引號(hào)和雙引號(hào)都可以表示字符串的原因了17. 如何用Python來發(fā)送郵件? 可以使用smtplib標(biāo)準(zhǔn)庫。以下

13、代碼可以在支持SMTP監(jiān)聽器的服務(wù)器上執(zhí)行。import sys, smtplibfromaddr =raw_input(“From: “)toaddrs = raw_input(“To: “).split(,)print “Enter message, end with D:”msg = ”while 1:line = sys.stdin.readline()if not line:breakmsg = msg + line# 發(fā)送郵件部分server = smtplib.SMTP(localhost)server.sendmail(fromaddr, toaddrs, msg)server

14、.quit()18. Python如何實(shí)現(xiàn)單例模式其他23種設(shè)計(jì)模式python如何實(shí)現(xiàn) Python有兩種方式可以實(shí)現(xiàn)單例模式,下面兩個(gè)例子使用了不同的方式實(shí)現(xiàn)單例模式:1.class Singleton(type):def _init_(cls, name, bases, dict):super(Singleton, cls)._init_(name, bases, dict)cls.instance = Nonedef _call_(cls, *args,*kw):if cls.instance is None:cls.instance = super(Singleton, cls)._

15、call_(*args, *kw)return cls.instanceclass MyClass(object):_metaclass_ = Singletonprint MyClass()print MyClass()2. 使用decorator來實(shí)現(xiàn)單例模式def singleton(cls):instances = def getinstance():if cls not in instances:instancescls = cls()return instancesclsreturn getinstancesingletonclass MyClass:19. 華為一道編程有兩個(gè)序列

16、a,b,大小都為n,序列元素的值任意整形數(shù),無序;要求:通過交換a,b中的元素,使序列a元素的和與序列b元素的和之間的差最小。1. 將兩序列合并為一個(gè)序列,并排序,為序列Source2. 拿出最大元素Big,次大的元素Small3. 在余下的序列S:-2進(jìn)行平分,得到序列max,min4. 將Small加到max序列,將Big加大min序列,重新計(jì)算新序列和,和大的為max,小的為min。Python代碼def mean( sorted_list ):if not sorted_list:return (,)big = sorted_list-1small = sorted_list-2big

17、_list, small_list =mean(sorted_list:-2)big_list.append(small)small_list.append(big)big_list_sum =sum(big_list)small_list_sum =sum(small_list)if big_list_sum >small_list_sum:return ( (big_list,small_list)else:return ( small_list,big_list)tests = 1,2,3,4,5,6,700,800,10001,10000,100,90,50,1,range(1,

18、 11),12312, 12311, 232, 210,30, 29, 3, 2, 1, 1for l in tests:l.sort()printprint “Source List:t”,ll1,l2 = mean(l)print “Result List:t”,l1, l2print “Distance:t”,abs(sum(l1)-sum(l2)print -*40輸出結(jié)果Python代碼Source List: 1, 2, 3, 4, 5, 6, 700, 800Result List: 1, 4, 5, 800 2, 3, 6, 700Distance: 99-*-*-*-*-*-

19、*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*Source List: 1, 50, 90, 100, 10000, 10001Result List: 50, 90, 10000 1, 100, 10001Distance: 38-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*Source List: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10Result List: 2,

20、3, 6, 7, 10 1, 4, 5, 8, 9Distance: 1-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*Source List: 1, 1, 2, 3, 29, 30, 210, 232, 12311, 12312Result List: 1, 3, 29, 232, 12311 1, 2, 30, 210, 12312Distance: 21 20. python程序中文輸出問題怎么解決?方法一:用encode和decode如:import os.pathimpor

21、t xlrd,sysFilename=/home/tom/Desktop/1234.xlsif not os.path.isfile(Filename):raise NameError,”%s is not a valid filename”%Filenamebk=xlrd.open_workbook(Filename)shxrange=range(bk.nsheets)print shxrangefor x in shxrange:p=bk.sheets().encode(utf-8)print p.decode(utf-8)方法二:在文件開頭加上reload(sys)sys.s

22、etdefaultencoding(utf8)這2行,再試著運(yùn)行一下字符串在Python內(nèi)部的表示是unicode編碼,因此,在做編碼轉(zhuǎn)換時(shí),通常需要以u(píng)nicode作為中間編碼,即先將其他編碼的字符串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。 decode的作用是將其他編碼的字符串轉(zhuǎn)換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字符串str1轉(zhuǎn)換成unicode編碼。 encode的作用是將unicode編碼轉(zhuǎn)換成其他編碼的字符串,如str2.encode('gb2312&

23、#39;),表示將unicode編碼的字符串str2轉(zhuǎn)換成gb2312編碼。 因此,轉(zhuǎn)碼的時(shí)候一定要先搞明白,字符串str是什么編碼,然后decode成unicode,然后再encode成其他編碼代碼中字符串的默認(rèn)編碼與代碼文件本身的編碼一致。 如:s='中文'如果是在utf8的文件中,該字符串就是utf8編碼,如果是在gb2312的文件中,則其編碼為gb2312。這種情況下,要進(jìn)行編碼轉(zhuǎn)換,都需要先用decode方法將其轉(zhuǎn)換成unicode編碼,再使用encode方法將其轉(zhuǎn)換成其他編碼。通常,在沒有指定特定的編碼方式時(shí),都是使用的系統(tǒng)默認(rèn)編碼創(chuàng)建的代碼文件。 如果字符串是這樣

24、定義:s=u'中文'則該字符串的編碼就被指定為unicode了,即python的內(nèi)部編碼,而與代碼文件本身的編碼無關(guān)。因此,對(duì)于這種情況做編碼轉(zhuǎn)換,只需要直接使用encode方法將其轉(zhuǎn)換成指定編碼即可。如果一個(gè)字符串已經(jīng)是unicode了,再進(jìn)行解碼則將出錯(cuò),因此通常要對(duì)其編碼方式是否為unicode進(jìn)行判斷:isinstance(s,unicode) #用來判斷是否為unicode 用非unicode編碼形式的str來encode會(huì)報(bào)錯(cuò) 如何獲得系統(tǒng)的默認(rèn)編碼 #!/usr/bin/env python#coding=utf-8import sysprint sys.getd

25、efaultencoding() 該段程序在英文WindowsXP上輸出為:ascii 21. python代碼得到列表list的交集與差集交集b1=1,2,3b2=2,3,4b3 = val for val in b1if val in b2print b3差集b1=1,2,3b2=2,3,4b3 = val for val in b1 if val not in b2print b3差集實(shí)例-#/bin/env python# -*- coding:utf-8 -*-f =open(C:diff_dealerexcel.txt)excel = f.readlines()f.close()f

26、= open(C:diff_dealerdb.txt)db = f.readlines()diff = val for val in db if val not in excelf.close()f =open(C:diff_dealerdiff.txt, w)f.writelines(diff)f.close()print diff 22. 寫一個(gè)簡單的python socket編程python 編寫server的步驟:1第一步是創(chuàng)建socket對(duì)象。調(diào)用socket構(gòu)造函數(shù)。如:socket = socket.socket(family, type )family參數(shù)代表地址家族,可為AF

27、_INET或AF_UNIX。AF_INET家族包括Internet地址,AF_UNIX家族用于同一臺(tái)機(jī)器上的進(jìn)程間通信。type參數(shù)代表套接字類型,可為SOCK_STREAM(流套接字)和SOCK_DGRAM(數(shù)據(jù)報(bào)套接字)。2.第二步是將socket綁定到指定地址。這是通過socket對(duì)象的bind方法來實(shí)現(xiàn)的:socket.bind( address )由AF_INET所創(chuàng)建的套接字,address地址必須是一個(gè)雙元素元組,格式是(host,port)。host代表主機(jī),port代表端口號(hào)。如果端口號(hào)正在使用、主機(jī)名不正確或端口已被保留,bind方法將引發(fā)socket.error異常。3.

28、第三步是使用socket套接字的listen方法接收連接請(qǐng)求。socket.listen( backlog )backlog指定最多允許多少個(gè)客戶連接到服務(wù)器。它的值至少為1。收到連接請(qǐng)求后,這些請(qǐng)求需要排隊(duì),如果隊(duì)列滿,就拒絕請(qǐng)求。4.第四步是服務(wù)器套接字通過socket的accept方法等待客戶請(qǐng)求一個(gè)連接。connection, address =socket.accept()調(diào)用accept方法時(shí),socket會(huì)時(shí)入“waiting”狀態(tài)??蛻粽?qǐng)求連接時(shí),方法建立連接并返回服務(wù)器。accept方法返回一個(gè)含有兩個(gè)元素的元組(connection,address)。第一個(gè)元素connec

29、tion是新的socket對(duì)象,服務(wù)器必須通過它與客戶通信;第二個(gè)元素address是客戶的Internet地址。5. 第五步是處理階段,服務(wù)器和客戶端通過send和recv方法通信(傳輸數(shù)據(jù))。服務(wù)器調(diào)用send,并采用字符串形式向客戶發(fā)送信息。send方法返回已發(fā)送的字符個(gè)數(shù)。服務(wù)器使用recv方法從客戶接收信息。調(diào)用recv 時(shí),服務(wù)器必須指定一個(gè)整數(shù),它對(duì)應(yīng)于可通過本次方法調(diào)用來接收的最大數(shù)據(jù)量。recv方法在接收數(shù)據(jù)時(shí)會(huì)進(jìn)入“blocked”狀態(tài),最后返回一個(gè)字符串,用它表示收到的數(shù)據(jù)。如果發(fā)送的數(shù)據(jù)量超過了recv所允許的,數(shù)據(jù)會(huì)被截短。多余的數(shù)據(jù)將緩沖于接收端。以后調(diào)用recv時(shí)

30、,多余的數(shù)據(jù)會(huì)從緩沖區(qū)刪除(以及自上次調(diào)用recv以來,客戶可能發(fā)送的其它任何數(shù)據(jù))。6. 傳輸結(jié)束,服務(wù)器調(diào)用socket的close方法關(guān)閉連接。python編寫client的步驟:1. 創(chuàng)建一個(gè)socket以連接服務(wù)器:socket= socket.socket( family, type )2.使用socket的connect方法連接服務(wù)器。對(duì)于AF_INET家族,連接格式如下:socket.connect(host,port) )host代表服務(wù)器主機(jī)名或IP,port代表服務(wù)器進(jìn)程所綁定的端口號(hào)。如連接成功,客戶就可通過套接字與服務(wù)器通信,如果連接失敗,會(huì)引發(fā)socket.erro

31、r異常。3. 處理階段,客戶和服務(wù)器將通過send方法和recv方法通信。4. 傳輸結(jié)束,客戶通過調(diào)用socket的close方法關(guān)閉連接。下面給個(gè)簡單的例子: server.py if _name_ ='_main_':import socketsock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)sock.bind('localhost',8001)sock.listen(5)while True:connection,address =sock.accept()try:connection.setti

32、meout(5)buf =connection.recv(1024)if buf = '1':connection.send('welcometo server!')else:connection.send('pleasego out!')except socket.timeout:print 'time out'connection.close() client.pypython 代碼if _name_ ='_main_':import socketsock =socket.socket(socket.AF_IN

33、ET, socket.SOCK_STREAM)sock.connect('localhost',8001)import timetime.sleep(2)sock.send('1')print sock.recv(1024)sock.close() 在終端運(yùn)行server.py,然后運(yùn)行clien.py,會(huì)在終端打印“welcometo server!"。如果更改client.py的sock.23. Python文件操作的面試題1. 如何用Python刪除一個(gè)文件?使用os.remove(filename)或者os.unlink(filename);2

34、. Python如何copy一個(gè)文件?shutil模塊有一個(gè)copyfile函數(shù)可以實(shí)現(xiàn)文件拷貝1:Python如何實(shí)現(xiàn)單例模式 Python有兩種方式可以實(shí)現(xiàn)單例模式,下面兩個(gè)例子使用了不同的方式實(shí)現(xiàn)單例模式:1.class Singleton(type):def _init_(cls, name, bases, dict):super(Singleton, cls)._init_(name, bases, dict)cls.instance = Nonedef _call_(cls, *args, *kw):if cls.instance is None:cls.instance = su

35、per(Singleton, cls)._call_(*args, *kw)return cls.instanceclass MyClass(object):_metaclass_ = Singletonprint MyClass()print MyClass()2. 使用decorator來實(shí)現(xiàn)單例模式def singleton(cls):instances = def getinstance():if cls not in instances:instancescls = cls()return instancesclsreturn getinstancesingletonclass My

36、Class:2:什么是lambda函數(shù)?Python允許你定義一種單行的小函數(shù)。定義lambda函數(shù)的形式如下:labmda參數(shù):表達(dá)式lambda函數(shù)默認(rèn)返回表達(dá)式的值。你也可以將其賦值給一個(gè)變量。lambda函數(shù)可以接受任意個(gè)參數(shù),包括可選參數(shù),但是表達(dá)式只有一個(gè):>>> g = lambda x, y: x*y>>> g(3,4)12>>> g = lambda x, y=0, z=0: x+y+z>>> g(1)1>>> g(3, 4, 7)14也能夠直接使用lambda函數(shù),不把它賦值給變量:&

37、gt;>> (lambda x,y=0,z=0:x+y+z)(3,5,6)14如果你的函數(shù)非常簡單,只有一個(gè)表達(dá)式,不包含命令,可以考慮lambda函數(shù)。否則,你還是定義函數(shù)才對(duì),畢竟函數(shù)沒有這么多限制。3:Python是如何進(jìn)行類型轉(zhuǎn)換的?Python提供了將變量或值從一種類型轉(zhuǎn)換成另一種類型的內(nèi)置函數(shù)。int函數(shù)能夠?qū)⒎蠑?shù)學(xué)格式數(shù)字型字符串轉(zhuǎn)換成整數(shù)。否則,返回錯(cuò)誤信息。>>> int(”34)34>>> int(”1234ab”) #不能轉(zhuǎn)換成整數(shù)ValueError: invalid literal for int(): 1234ab函

38、數(shù)int也能夠把浮點(diǎn)數(shù)轉(zhuǎn)換成整數(shù),但浮點(diǎn)數(shù)的小數(shù)部分被截去。>>> int(34.1234)34>>> int(-2.46)-2函數(shù)°oat將整數(shù)和字符串轉(zhuǎn)換成浮點(diǎn)數(shù):>>> float(”12)12.0>>> float(”1.111111)1.111111函數(shù)str將數(shù)字轉(zhuǎn)換成字符:>>> str(98)98>>> str(”76.765)76.765整數(shù)1和浮點(diǎn)數(shù)1.0在python中是不同的。雖然它們的值相等的,但卻屬于不同的類型。這兩個(gè)數(shù)在計(jì)算機(jī)的存儲(chǔ)形式也是不一樣。

39、4:Python如何定義一個(gè)函數(shù)函數(shù)的定義形式如下:def <name>(arg1, arg2, argN):<statements>函數(shù)的名字也必須以字母開頭,可以包括下劃線“ ”,但不能把Python的關(guān)鍵字定義成函數(shù)的名字。函數(shù)內(nèi)的語句數(shù)量是任意的,每個(gè)語句至少有一個(gè)空格的縮進(jìn),以表示此語句屬于這個(gè)函數(shù)的??s進(jìn)結(jié)束的地方,函數(shù)自然結(jié)束。下面定義了一個(gè)兩個(gè)數(shù)相加的函數(shù):>>> def add(p1, p2):print p1, “+”, p2, “=”, p1+p2>>> add(1, 2)1 + 2 = 3函數(shù)的目的是把一些復(fù)雜

40、的操作隱藏,來簡化程序的結(jié)構(gòu),使其容易閱讀。函數(shù)在調(diào)用前,必須先定義。也可以在一個(gè)函數(shù)內(nèi)部定義函數(shù),內(nèi)部函數(shù)只有在外部函數(shù)調(diào)用時(shí)才能夠被執(zhí)行。程序調(diào)用函數(shù)時(shí),轉(zhuǎn)到函數(shù)內(nèi)部執(zhí)行函數(shù)內(nèi)部的語句,函數(shù)執(zhí)行完畢后,返回到它離開程序的地方,執(zhí)行程序的下一條語句。5:Python是如何進(jìn)行內(nèi)存管理的?Python的內(nèi)存管理是由Python得解釋器負(fù)責(zé)的,開發(fā)人員可以從內(nèi)存管理事務(wù)中解放出來,致力于應(yīng)用程序的開發(fā),這樣就使得開發(fā)的程序錯(cuò)誤更少,程序更健壯,開發(fā)周期更短 6:如何反序的迭代一個(gè)序列?howdo I iterate over a sequence in reverse order如果是一個(gè)lis

41、t, 最快的解決方案是:list.reverse()try:for x in list:“do something with x”finally:list.reverse()如果不是list, 最通用但是稍慢的解決方案是:for i in range(len(sequence)-1, -1, -1):x = sequencei<do something with x>7:Python里面如何實(shí)現(xiàn)tuple和list的轉(zhuǎn)換?函數(shù)tuple(seq)可以把所有可迭代的(iterable)序列轉(zhuǎn)換成一個(gè)tuple, 元素不變,排序也不變。例如,tuple(1,2,3)返回(1,2,3),

42、tuple(abc)返回(a.b',c').如果參數(shù)已經(jīng)是一個(gè)tuple的話,函數(shù)不做任何拷貝而直接返回原來的對(duì)象,所以在不確定對(duì)象是不是tuple的時(shí)候來調(diào)用tuple()函數(shù)也不是很耗費(fèi)的。函數(shù)list(seq)可以把所有的序列和可迭代的對(duì)象轉(zhuǎn)換成一個(gè)list,元素不變,排序也不變。例如 list(1,2,3)返回(1,2,3),list(abc)返回'a', 'b', 'c'。如果參數(shù)是一個(gè)list,她會(huì)像set:一樣做一個(gè)拷貝8:Python面試題:請(qǐng)寫出一段Python代碼實(shí)現(xiàn)刪除一個(gè)list里面的重復(fù)元素可以先把lis

43、t重新排序,然后從list的最后開始掃描,代碼如下:if List:List.sort()last = List-1for i in range(len(List)-2, -1, -1):if last=Listi: del Listielse: last=Listi9:Python文件操作的面試題1. 如何用Python刪除一個(gè)文件?使用os.remove(filename)或者os.unlink(filename);2. Python如何copy一個(gè)文件?shutil模塊有一個(gè)copyfile函數(shù)可以實(shí)現(xiàn)文件拷貝10:Python里面如何生成隨機(jī)數(shù)?標(biāo)準(zhǔn)庫random實(shí)現(xiàn)了一個(gè)隨機(jī)數(shù)生成器

44、,實(shí)例代碼如下:import randomrandom.random()它會(huì)返回一個(gè)隨機(jī)的0和1之間的浮點(diǎn)數(shù)11:如何用Python來發(fā)送郵件?可以使用smtplib標(biāo)準(zhǔn)庫。以下代碼可以在支持SMTP監(jiān)聽器的服務(wù)器上執(zhí)行。import sys, smtplibfromaddr = raw_input(”From: “)toaddrs = raw_input(”To: “).split(,')print “Enter message, end with D:”msg = ”while 1:line = sys.stdin.readline()if not line:breakmsg =

45、msg + line# 發(fā)送郵件部分server = smtplib.SMTP(localhost)server.sendmail(fromaddr, toaddrs, msg)server.quit()12:Python里面如何拷貝一個(gè)對(duì)象?一般來說可以使用copy.copy()方法或者copy.deepcopy()方法,幾乎所有的對(duì)象都可以被拷貝一些對(duì)象可以更容易的拷貝,Dictionaries有一個(gè)copy方法:newdict = olddict.copy()13:有沒有一個(gè)工具可以幫助查找python的bug和進(jìn)行靜態(tài)的代碼分析?有,PyChecker是一個(gè)python代碼的靜態(tài)分析工

46、具,它可以幫助查找python代碼的bug, 會(huì)對(duì)代碼的復(fù)雜度和格式提出警告Pylint是另外一個(gè)工具可以進(jìn)行coding standard檢查。14:如何在一個(gè)function里面設(shè)置一個(gè)全局的變量?解決方法是在function的開始插入一個(gè)global聲明:def f()global x14:有兩個(gè)序列a,b,大小都為n,序列元素的值任意整形數(shù),無序;要求:通過交換a,b中的元素,使序列a元素的和與序列b元素的和之間的差最小。1. 將兩序列合并為一個(gè)序列,并排序,為序列Source2. 拿出最大元素Big,次大的元素Small3. 在余下的序列S:-2進(jìn)行平分,得到序列max,min4.

47、將Small加到max序列,將Big加大min序列,重新計(jì)算新序列和,和大的為max,小的為min。Python代碼def mean( sorted_list ):if not sorted_list:return (,)big = sorted_list-1small = sorted_list-2big_list, small_list = mean(sorted_list:-2)big_list.append(small)small_list.append(big)big_list_sum = sum(big_list)small_list_sum = sum(small_list)if

48、 big_list_sum > small_list_sum:return ( (big_list, small_list)else:return ( small_list, big_list)tests = 1,2,3,4,5,6,700,800,10001,10000,100,90,50,1,range(1, 11),12312, 12311, 232, 210, 30, 29, 3, 2, 1, 1for l in tests:l.sort()printprint “Source List:t”, ll1,l2 = mean(l)print “Result List:t”, l1,

49、 l2print “Distance:t”, abs(sum(l1)-sum(l2)print -*40輸出結(jié)果Python代碼Source List: 1, 2, 3, 4, 5, 6, 700, 800Result List: 1, 4, 5, 800 2, 3, 6, 700Distance: 99-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*Source List: 1, 50, 90, 100, 10000, 10001Result List: 50, 90, 10000

50、 1, 100, 10001Distance: 38-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*Source List: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10Result List: 2, 3, 6, 7, 10 1, 4, 5, 8, 9Distance: 1-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*Source List: 1, 1, 2

51、, 3, 29, 30, 210, 232, 12311, 12312Result List: 1, 3, 29, 232, 12311 1, 2, 30, 210, 12312Distance: 21-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*15:用Python匹配HTML tag的時(shí)候,<.*>和<.*>有什么區(qū)別?當(dāng)重復(fù)匹配一個(gè)正則表達(dá)式時(shí)候, 例如<.*>, 當(dāng)程序執(zhí)行匹配的時(shí)候,會(huì)返回最大的匹配值例如:import res = &l

52、t;html><head><title>Title</title>print(re.match(<.*>, s).group()會(huì)返回一個(gè)匹配<html><head><title>Title</title>而不是<html>而import res = <html><head><title>Title</title>print(re.match(<.*>, s).group()則會(huì)返回<html><.*>這種匹配稱作貪心匹配 <.*>稱作非貪心匹配16:Python里面search()和match()的區(qū)別?match()函數(shù)只檢測(cè)RE是不是在string的開始位置匹配, search()會(huì)掃描整個(gè)string查找匹配, 也就是說match()只有在0位置匹配成功的話才有返回,如果不是開始位置匹配成功的話,match()就返回none例如:print(re.match(super, superstition).span()會(huì)返回(0,5)而p

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論