python 面試題總結
阿新 • • 發佈:2018-11-05
生成器函式
生成器有兩種,分別是生成器函式和生成器表示式
生成器函式 - yield
- 定義 :含有yield語句的函式為生成器,該函式被呼叫會返回一個生成器物件。
- 表示式 : yield 表示式
- 用法 :
- yield表示式用於def函式中,目的是將此函式作為生成器使用。
def myinteger(n):
i = 0
while i < n:
yield i
i += 1
return i
for x in myinteger(3):
print(x) #結果為0,1,2
- yield用於生成資料,供迭代器的next()函式使用。
與return的區別
- yield與return相似,後邊跟返回值。但是不同的是:會保留執行狀態,下次呼叫next()方法繼續執行,從yield的下一條語句開始執行。如下程式碼所示:
#程式碼1
# 此示例示意用生成器函式生成一定範圍內的自然數
def myinteger(n):
i = 0
while i < n:
yield i
i += 1
f = myinteger(3)
print(next(f)) #0
print(next(f)) #1
print(next(f)) #2
print(next(f)) #StopIteration
- return 返回一個值之後,會直接終止程式的執行,終止當前生成器,如果執行next()會報錯(若return之後無引數則不能與yield同時出現在一個函式中,否則為非法程式設計)。如下程式碼所示:
def myinteger(n):
i = 0
while i < n:
yield i #此時生成器生成自然數0
i += 1
return i #終止生成器生成自然數,終止程式
f = myinteger(3)
print (next(f)) #0 (因生成器中生成自然數0,故可呼叫)
print(next(f)) #StopIteration 1 (生成器已被Return終止,故會報錯)
生成器表示式
語法
(表示式 for 變數 in 可迭代物件 [if 真值表達式 ])
其中if表示式可以省略
作用
用推導式的形式生成一個新的生成器
L = [1,2,3,4]
gen = (i**2 for i in L) #生成新的生成器
L2 = iter(gen) #生成可迭代物件
print(next(L2)) #1
print(next(L2)) #4
正則表示式之match與search區別
match匹配從第一個字串開始匹配到的內容
import re
obj = re.match(r'foo','foo,food on the table')
print(obj)#<_sre.SRE_Match object; span=(0, 3), match='foo'>
print(obj.group())#foo
search匹配第一個滿足表示式的字串
obj = re.search(r'foo','fo,food on the table')
print(obj)#<_sre.SRE_Match object; span=(3, 6), match='foo'>
print(obj.group())#foo
注意:兩者返回的都是match物件,需要通過goup()方法獲取匹配到的內容