gpt4 book ai didi

python - 在 python 中混合 yield 和 return 语句是一种好习惯吗?

转载 作者:太空狗 更新时间:2023-10-29 22:15:45 26 4
gpt4 key购买 nike

我很想有以下行为:

def foo(bar=None):
if bar:
return other_function(other_thing[bar])
else:
for i in other_thing:
yield other_function(i)

想法是该函数可以用作生成器来构建所有实例,或者它可以用于返回特定实例。这是在 Python 中执行此操作的好方法吗?如果没有,有没有更好的方法。

最佳答案

只有在 Python 3 中语法上才有可能有 return valueyield在同一个函数中,在 Python 2 中它将导致:

SyntaxError: 'return' with argument inside generator

在 Python 3 中 return value生成器内部实际上是 raise StopIteration(value) 的语法糖,yield from 也支持子句:

def f():
yield from iter('123')
return 'ok'

def g():
message = yield from f()
print('Message:', message)

In [1]: list(g)
Message: ok
Out[1]: ['1', '2', '3']

所以,这个结构并没有达到您的预期。此外,根据参数值改变函数的返回类型(或者更确切地说,接口(interface))似乎不是一个很好的(“pythonic”)想法。不过,这可能是一个品味问题,这是 Guido van Rossum 在书中的采访中所说的 Masterminds of Programming :

I have a few personal pet peeves: first of all, and this is specific to dynamic languages, don’t make the return type of a method depend on the value of one of the arguments; otherwise it may be hard to understand what’s returned if you don’t know the relationship—maybe the type-determining argument is passed in from a variable whose content you can’t easily guess while reading the code.

关于python - 在 python 中混合 yield 和 return 语句是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28806583/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com