我有一个函数用于检查列表中的“负数”、“正数”和“零”值。以下是我的函数:
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
print
None
return停止函数的控制流并返回该流。您可以yield在此处使用它将您的函数转换为生成器。例如:
yield
def posnegzero(nulist): for x in nulist: if x > 0: yield "positive" elif x < 0: yield "negative" else: yield "zero"
next()每次调用返回的对象时都会产生下一个结果:
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']
您还可以使用 loop 进行迭代for。forloop 重复调用该next()方法,直到收到StopIteration异常。例如:
for
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