2015-08-18 136 views
0

我知道yield返回一個生成器。但我不明白爲什麼碼1只返回一個字符,但是代碼2不會:這些示例中的收益率和收益之間的差異

代碼1

def foo(arg:str)-> str: 
    for char in arg: 
     return char 

代碼2

def bar(arg:str)-> str: 
    for char in arg: 
     yield char 

yieldreturn,都返回一個對象。但爲什麼以下結果有差異?

>>> for i in foo('stackoverflow.com'): print(i) 

s 

>>> for i in bar('stackoverflow.com'): print(i) 

s 
t 
a 
c 
k 
o 
v 
e 
r 
f 
l 
o 
w 
. 
c 
o 
m 
+0

你說你理解發電機,所以我將假設一個函數是什麼。當您返回一個函數時,會發生堆棧展開,並且該函數將結束。這就是爲什麼當你返回時,你只能得到第一個字符。 – thefourtheye

回答

1

你的代碼1是不是一臺發電機。這只是一個函數,返回它的參數的第一個字符,在這裏's'。如果你循環這個字符串(在你的代碼的主體中),你可以得到's'