2010-07-18 35 views
10

我有一個檢查一系列條件的for循環。在每次迭代時,它應該只爲其中一個條件產生輸出。最終收益率是默認值,以防萬一條件都不成立。在每塊產量之後,我是否必須繼續蟒蛇產量是否意味着繼續?

def function(): 
    for ii in aa: 
     if condition1(ii): 
      yield something1 
      yield something2 
      yield something3 
      continue 

     if condition2(ii): 
      yield something4 
      continue 

     #default 
     yield something5 
     continue 

回答

14

而不是使用continue聲明我會建議使用elifelse statments的:

def function(): 
    for ii in aa: 
     if condition1(ii): 
      yield something1 
      yield something2 
      yield something3 

     elif condition2(ii): 
      yield something4 

     else: #default 
      yield something5 

這似乎更可讀我

13

NO,產量並不意味着繼續,它下一次就在下一行開始。一個簡單的實施例表明,

def f(): 
    for i in range(3): 
     yield i 
     print i, 

list(f()) 

這將打印0,1,2但如果產率的繼續,它不會

1

continue跳過其餘代碼塊,但是當next()是執行yield後的碼塊再次調用發電機。 yield就像在某個時候暫停執行一樣。

8

yield在Python中停止執行並返回值。當迭代器被再次調用時,它會在yield語句之後直接繼續執行。例如,發生器定義爲:

def function(): 
    yield 1 
    yield 2 

將返回1然後2順序。換句話說,continue是必需的。但是,在這種情況下,所描述的flashk的elifelse絕對是正確的工具。

0

如果事情是簡單的價值和條件是平等的檢查,我更願意做這種「箱式結構」詞典查詢:

ii_dict={'a':('somethinga1','somethinga2','somethinga3'),'b':('somethingb1',)} 
ii_default = ('somethingdefault',) 
aa='abeabbacd' 

def function(): 
    return (value 
      for ii in aa 
      for value in (ii_dict[ii] if ii in ii_dict else ii_default)) 

for something in function(): print something