我很想有以下行为:
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 value
and yield
在同一个函数中,在 Python 2 中它将导致:
SyntaxError: 'return' with argument inside generator
在Python 3中return value
生成器内部实际上是一个语法糖raise StopIteration(value)
,这也得到了支持yield from
clause:
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']
因此,这个构造并没有达到您的预期。此外,根据参数值改变函数的返回类型(或者更确切地说,接口)似乎不是一个很好的(“pythonic”)想法。不过,这可能是一个品味问题,这是吉多·范罗苏姆在书中的采访中所说的编程大师 http://shop.oreilly.com/product/9780596515171.do:
我有一些个人的烦恼:首先,这是动态语言特有的,不要使方法的返回类型依赖于参数之一的值;否则,如果您不知道其中的关系,则可能很难理解返回的内容 - 也许类型确定参数是从一个变量传入的,而您在阅读代码时无法轻易猜到该变量的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)