- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我很想有以下行为:
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
和 yield
在同一个函数中,在 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/
在我生活的世界中,构建一个将所有飞镖都扔到墙上的解决方案,并希望其中一些能命中靶心是一种非常糟糕的解决方案方法。 那么,我的问题出现了,什么时候在约定可接受的生产系统中使用 INSERT IGNORE
在数据处理时,经常会因为index报错而发愁。不要紧,本次来和大家聊聊pandas中处理索引的几种常用方法。 1.读取时指定索引列 很多情况下,我们的数据源是 CSV 文件。假设
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 6 年前。 Improve
我是一名优秀的程序员,十分优秀!