Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python会继续吗?_Python_Generator_Yield - Fatal编程技术网

python会继续吗?

python会继续吗?,python,generator,yield,Python,Generator,Yield,我有一个for循环,它检查一系列条件。在每次迭代中,它应该只产生一个条件的输出。如果所有条件均不成立,则最终收益率为默认值。我是否必须在每一块收益率后都设置一个continue def function(): for ii in aa: if condition1(ii): yield something1 yield something2 yield something3 contin

我有一个for循环,它检查一系列条件。在每次迭代中,它应该只产生一个条件的输出。如果所有条件均不成立,则最终收益率为默认值。我是否必须在每一块收益率后都设置一个continue

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

我建议使用
elif
else
语句,而不是使用
continue
语句:

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

       elif condition2(ii):
           yield something4

       else: #default
           yield something5

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

不,收益率并不意味着继续,它只是从下一行开始,下一次。一个简单的例子说明了这一点

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

list(f())

这将打印0,1,2,但是如果yield继续,它将不会跳过剩余的代码块,但是在生成器上再次调用
next()
时,将执行
yield
之后的代码块
yield
的作用类似于在某个点暂停执行。

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

def function():
    yield 1
    yield 2

将依次返回
1
,然后返回
2
。换句话说,需要
继续
。但是,在本例中,flashk所描述的
elif
else
无疑是正确的工具。

如果简单值和条件是检查是否相等,我更愿意进行此“大小写结构”字典查找:

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

这条路更清晰,希望对你有所帮助,也感谢Anurag Uniyal

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

list(f())
-----------赛后------------


很好,但是我认为列表输出还需要一个打印:print(list(f())
10
11
12
[0, 1, 2]