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