我在python(3.3.4)中制作生成器时遇到问题。这是我的代码:
def gene(a):
for b in range(a):
if b==0 or b==1:
continue
if a%b==0:
yield ("This is Composite number "+str(a))
yield ("Out!")
gio = gene(12)
当我使用next(gio)时,它表示"这是复合数字12"但据我所知,当我再次使用下一个功能时,该功能应该从它停止的地方恢复。所以下一个(gio)应打印出#34; out"。但事实并非如此。帮助我理解为什么会这样发生。
答案 0 :(得分:2)
您需要for-loop
结束才能到达"Out!"
。如果您希望在找到a
复合后执行此操作,则需要使用break
:
def gene(a):
for b in range(a):
if b==0 or b==1:
continue
if a%b==0:
yield ("This is Composite number "+str(a))
break
yield ("Out!")
答案 1 :(得分:2)
您正在使用a
生成一个字符串,该函数的原始参数。另一方面,b
仍然需要在for
循环完成之前逐步完成2,3,4和6,并且Python到达yield ("Out!")
语句。
因此,在 4 步骤之后,您将进入Out
:
>>> gio = gene(12)
>>> next(gio)
'This is Composite number 12'
>>> next(gio)
'This is Composite number 12'
>>> next(gio)
'This is Composite number 12'
>>> next(gio)
'This is Composite number 12'
>>> next(gio)
'Out!'
如果你在字符串中使用b
,这可能会更明显,或许:
>>> def gene(a):
... for b in range(a):
... if b==0 or b==1:
... continue
... if a%b==0:
... yield ("This is Composite number "+str(b))
... yield ("Out!")
...
>>> gio = gene(12)
>>> next(gio)
'This is Composite number 2'
>>> next(gio)
'This is Composite number 3'
>>> next(gio)
'This is Composite number 4'
>>> next(gio)
'This is Composite number 6'
>>> next(gio)
'Out!'