小能豆

防止函数在 `for` 循环中第一次 `return` 时不停止

py

我有一个函数用于检查列表中的“负数”、“正数”和“零”值。以下是我的函数:

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"

我希望它继续执行整个列表。在上面的函数中,如果我将 的每个实例更改returnprint,那么它会执行应有的操作,但现在我不想让它显示None函数何时完成。有什么想法我哪里出错了?


阅读 5

收藏
2024-12-21

共1个答案

小能豆

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']

您还可以使用 loop 进行迭代forforloop 重复调用该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
2024-12-21