python面試題及答案_第1頁
python面試題及答案_第2頁
python面試題及答案_第3頁
python面試題及答案_第4頁
python面試題及答案_第5頁
已閱讀5頁,還剩21頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

4、1)3. Python里面如何實現tuple和list的轉換?答:直接使用tuple和list函數就行了,type()可以判斷對象的類型 4. 請寫出一段Python代碼實現刪除一個list里面的重復元素答:1,使用set函數,set(list)2,使用字典函數,>>>a=1,2,4,2,4,5,6,5,7,8,9,0>>> b=>>>b=b.fromkeys(a)>>>c=list(b.keys()>>> c5. 編程用sort進行排序,然后從最后一個元素開始判斷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里面如何拷貝一個對象?(賦值,淺拷貝,深拷貝的區別)答:賦值(=),就是創建了對象的一個新的引用,修改其中任意一個變量都會影響到另一個。淺拷貝:創建一個新的對象,但它包含的是對原始對象中包含項的引用(如果用引用的方式修改其中一個對象,另外一個也會修改改變)1,完全切片方法;2,工廠函數,如list();3,copy模塊的copy()函數深拷貝:創建一個新的對象,并且遞歸的復制它所包含的對

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

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

8、le(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()方法執行的效果跟sub()一樣,不過它會返回一個二維數組,包括替換后的新的字符串和總共替換的數量 11. Python里面match()和search()的區別?答:re模塊中match

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

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

11、andom模塊隨機整數:random.randint(a,b):返回隨機整數x,a<=x<=brandom.randrange(start,stop,step):返回一個范圍在(start,stop,step)之間的隨機整數,不包括結束值。隨機實數:random.random( ):返回0到1之間的浮點數random.uniform(a,b):返回指定范圍內的浮點數。14. 有沒有一個工具可以幫助查找python的bug和進行靜態的代碼分析?答:PyChecker是一個python代碼的靜態分析工具,它可以幫助查找python代碼的bug, 會對代碼的復雜度和格式提出警告Pylin

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

13、準庫。以下代碼可以在支持SMTP監聽器的服務器上執行。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# 發送郵件部分server = smtplib.SMTP(localhost)server.sendmail(fromaddr, toaddrs, msg)s

14、erver.quit()18. Python如何實現單例模式?其他23種設計模式python如何實現? Python有兩種方式可以實現單例模式,下面兩個例子使用了不同的方式實現單例模式: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,

15、 cls)._call_(*args, *kw)return cls.instanceclass MyClass(object):_metaclass_ = Singletonprint MyClass()print MyClass()2. 使用decorator來實現單例模式def singleton(cls):instances = def getinstance():if cls not in instances:instancescls = cls()return instancesclsreturn getinstancesingletonclass MyClass:19. 華為一道

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

17、st-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 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,r

18、ange(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, l2print “Distance:t”,abs(sum(l1)-sum(l2)print -*40輸出結果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 Li

20、st: 2, 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.pa

21、thimport 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(sy

22、s)sys.setdefaultencoding(utf8)這2行,再試著運行一下字符串在Python內部的表示是unicode編碼,因此,在做編碼轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字符串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。 decode的作用是將其他編碼的字符串轉換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字符串str1轉換成unicode編碼。 encode的作用是將unicode編碼轉換成其他編碼的字符串,如str2.encode('

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

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

25、sys.getdefaultencoding() 該段程序在英文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差集實例-#/bin/env python# -*- coding:utf-8 -*-f =open(C:diff_dealerexcel.txt)excel = f.readlines()f.

26、close()f= 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. 寫一個簡單的python socket編程python 編寫server的步驟:1第一步是創建socket對象。調用socket構造函數。如:socket = socket.socket(family, type )family參數代表地

27、址家族,可為AF_INET或AF_UNIX。AF_INET家族包括Internet地址,AF_UNIX家族用于同一臺機器上的進程間通信。type參數代表套接字類型,可為SOCK_STREAM(流套接字)和SOCK_DGRAM(數據報套接字)。2.第二步是將socket綁定到指定地址。這是通過socket對象的bind方法來實現的:socket.bind( address )由AF_INET所創建的套接字,address地址必須是一個雙元素元組,格式是(host,port)。host代表主機,port代表端口號。如果端口號正在使用、主機名不正確或端口已被保留,bind方法將引發socket.er

28、ror異常。3.第三步是使用socket套接字的listen方法接收連接請求。socket.listen( backlog )backlog指定最多允許多少個客戶連接到服務器。它的值至少為1。收到連接請求后,這些請求需要排隊,如果隊列滿,就拒絕請求。4.第四步是服務器套接字通過socket的accept方法等待客戶請求一個連接。connection, address =socket.accept()調用accept方法時,socket會時入“waiting”狀態。客戶請求連接時,方法建立連接并返回服務器。accept方法返回一個含有兩個元素的元組(connection,address)。第一個

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

30、后調用recv時,多余的數據會從緩沖區刪除(以及自上次調用recv以來,客戶可能發送的其它任何數據)。6. 傳輸結束,服務器調用socket的close方法關閉連接。python編寫client的步驟:1. 創建一個socket以連接服務器:socket= socket.socket( family, type )2.使用socket的connect方法連接服務器。對于AF_INET家族,連接格式如下:socket.connect(host,port) )host代表服務器主機名或IP,port代表服務器進程所綁定的端口號。如連接成功,客戶就可通過套接字與服務器通信,如果連接失敗,會引發soc

31、ket.error異常。3. 處理階段,客戶和服務器將通過send方法和recv方法通信。4. 傳輸結束,客戶通過調用socket的close方法關閉連接。下面給個簡單的例子: 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:connecti

32、on.settimeout(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(sock

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

34、ename);2. Python如何copy一個文件?shutil模塊有一個copyfile函數可以實現文件拷貝1:Python如何實現單例模式? Python有兩種方式可以實現單例模式,下面兩個例子使用了不同的方式實現單例模式: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.inst

35、ance = super(Singleton, cls)._call_(*args, *kw)return cls.instanceclass MyClass(object):_metaclass_ = Singletonprint MyClass()print MyClass()2. 使用decorator來實現單例模式def singleton(cls):instances = def getinstance():if cls not in instances:instancescls = cls()return instancesclsreturn getinstancesingleto

36、nclass MyClass:2:什么是lambda函數?Python允許你定義一種單行的小函數。定義lambda函數的形式如下:labmda參數:表達式lambda函數默認返回表達式的值。你也可以將其賦值給一個變量。lambda函數可以接受任意個參數,包括可選參數,但是表達式只有一個:>>> 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函數,不

37、把它賦值給變量:>>> (lambda x,y=0,z=0:x+y+z)(3,5,6)14如果你的函數非常簡單,只有一個表達式,不包含命令,可以考慮lambda函數。否則,你還是定義函數才對,畢竟函數沒有這么多限制。3:Python是如何進行類型轉換的?Python提供了將變量或值從一種類型轉換成另一種類型的內置函數。int函數能夠將符合數學格式數字型字符串轉換成整數。否則,返回錯誤信息。>>> int(”34)34>>> int(”1234ab”) #不能轉換成整數ValueError: invalid literal for int()

38、: 1234ab函數int也能夠把浮點數轉換成整數,但浮點數的小數部分被截去。>>> int(34.1234)34>>> int(-2.46)-2函數°oat將整數和字符串轉換成浮點數:>>> float(”12)12.0>>> float(”1.111111)1.111111函數str將數字轉換成字符:>>> str(98)98>>> str(”76.765)76.765整數1和浮點數1.0在python中是不同的。雖然它們的值相等的,但卻屬于不同的類型。這兩個數在計算機的存

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

40、的目的是把一些復雜的操作隱藏,來簡化程序的結構,使其容易閱讀。函數在調用前,必須先定義。也可以在一個函數內部定義函數,內部函數只有在外部函數調用時才能夠被執行。程序調用函數時,轉到函數內部執行函數內部的語句,函數執行完畢后,返回到它離開程序的地方,執行程序的下一條語句。5:Python是如何進行內存管理的?Python的內存管理是由Python得解釋器負責的,開發人員可以從內存管理事務中解放出來,致力于應用程序的開發,這樣就使得開發的程序錯誤更少,程序更健壯,開發周期更短 6:如何反序的迭代一個序列?howdo I iterate over a sequence in reverse orde

41、r如果是一個list, 最快的解決方案是: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里面如何實現tuple和list的轉換?函數tuple(seq)可以把所有可迭代的(iterable)序列轉換成一個tuple, 元素不變,排序也不變。例如,tuple(1,2,3)返

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

43、元素可以先把list重新排序,然后從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刪除一個文件?使用os.remove(filename)或者os.unlink(filename);2. Python如何copy一個文件?shutil模塊有一個copyfile函數可以實現文件拷貝10:Python里面如何生成隨機數?標準庫random實現

44、了一個隨機數生成器,實例代碼如下:import randomrandom.random()它會返回一個隨機的0和1之間的浮點數11:如何用Python來發送郵件?可以使用smtplib標準庫。以下代碼可以在支持SMTP監聽器的服務器上執行。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:br

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

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

47、ax,min4. 將Small加到max序列,將Big加大min序列,重新計算新序列和,和大的為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(smal

48、l_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, 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 Lis

49、t:t”, l1, l2print “Distance:t”, abs(sum(l1)-sum(l2)print -*40輸出結果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,

50、90, 10000 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

51、: 1, 1, 2, 3, 29, 30, 210, 232, 12311, 12312Result List: 1, 3, 29, 232, 12311 1, 2, 30, 210, 12312Distance: 21-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*15:用Python匹配HTML tag的時候,<.*>和<.*?>有什么區別?當重復匹配一個正則表達式時候, 例如<.*>, 當程序執行匹配的時候,會返回最大的匹配值例如:impor

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

溫馨提示

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

評論

0/150

提交評論