python产量是否意味着继续?

345*_*345 13 python yield generator

我有一个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
Run Code Online (Sandbox Code Playgroud)

fla*_*shk 16

而不是使用continue声明我建议使用elifelse声明:

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

       elif condition2(ii):
           yield something4

       else: #default
           yield something5
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎更具可读性


Anu*_*yal 16

不,产量并不意味着继续,它只是从下一行开始,下一次.一个简单的例子证明了

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

list(f())
Run Code Online (Sandbox Code Playgroud)

这打印0,1,2,但如果产量继续,则不会


小智 12

yield在Python中停止执行并返回值.再次调用迭代器时,它会在yield语句后直接继续执行.例如,一个生成器定义为:

def function():
    yield 1
    yield 2
Run Code Online (Sandbox Code Playgroud)

1然后2顺序返回.换句话说,这continue是必需的.但是,在这种情况下,elif并且else正如所描述的flashk绝对是正确的工具.