我有一个函数来检查列表中的“负”,“正”和“零”值。下面是我的功能:
def posnegzero(nulist):
for x in nulist:
if x > 0:
return "positive"
elif x < 0:
return "negative"
else:
return "zero"
但是,当我运行此函数时,它将在检查列表中第一个数字的值后停止。例如:
>>> posnegzero([-20, 1, 2, -3, -5, 0, 100, -123])
"negative"
我希望它继续用于整个列表。在上面的函数中,如果我将的每个实例都更改return
为print
,则它会执行应做的事情,但是现在我不希望它说None
函数何时完成。关于我哪里出了错的任何想法?
return
停止函数的控制流并返回该流。您可以yield
在此处使用它将函数转换为生成器的功能。例如:
def posnegzero(nulist):
for x in nulist:
if x > 0:
yield "positive"
elif x < 0:
yield "negative"
else:
yield "zero"
每次next()
在返回的对象上调用时,它将产生下一个结果:
>>> result = posnegzero([-20, 1, 2, -3, -5, 0, 100, -123])
>>> next(result)
'negative'
>>> next(result)
'positive'
>>> next(result)
'positive'
或者,您可以一次获得所有结果:
>>> result = posnegzero([-20, 1, 2, -3, -5, 0, 100, -123])
>>> list(result)
['negative', 'positive', 'positive', 'negative', 'negative', 'zero', 'positive', 'negative']
您也可以使用for
循环对其进行迭代。for
循环重复调用该next()
方法,直到收到StopIteration
异常。例如:
for result in posnegzero([-20, 1, 2, -3, -5, 0, 100, -123]):
print(result)
# which will print
negative
positive
positive
negative
negative
zero
positive
negative
有关的更多信息yield
,请参阅:“ yield”关键字的作用是什么?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句