python产量是否意味着继续?

时间:2010-07-18 17:34:01

标签: python generator yield

我有一个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

6 个答案:

答案 0 :(得分:17)

我建议使用continueelif声明,而不是使用else声明:

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

       elif condition2(ii):
           yield something4

       else: #default
           yield something5

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

答案 1 :(得分:15)

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

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

list(f())

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

答案 2 :(得分:12)

Python中的

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

def function():
    yield 1
    yield 2

会依次返回1然后2。换句话说,continue是必需的。但是,在这种情况下,描述为flashk的elifelse绝对是正确的工具。

答案 3 :(得分:3)

continue跳过剩余的代码块,但在生成器上再次调用yield时执行next()之后的代码块。 yield就像在某个时刻暂停执行一样。

答案 4 :(得分:2)

这样更清晰,希望对您有所帮助,也感谢Anurag Uniyal。

style-loader!css-loader!sass-loader?modules&localIdentName=[name]---[local]---[hash:base64:5]

-----------运行后------------

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

list(f())

答案 5 :(得分: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