1. 程式人生 > >python 面試題總結

python 面試題總結

生成器函式

生成器有兩種,分別是生成器函式和生成器表示式

生成器函式 - yield

  1. 定義 :含有yield語句的函式為生成器,該函式被呼叫會返回一個生成器物件。
  2. 表示式 : yield 表示式
  3. 用法 :
  • yield表示式用於def函式中,目的是將此函式作為生成器使用。
def myinteger(n):
  i = 0
  while i < n:
      yield i
      i += 1
      return i

for x in myinteger(3):
  print(x) #結果為012
  • 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()方法獲取匹配到的內容