【发布时间】:2013-08-15 11:12:11
【问题描述】:
我希望您考虑以下代码:
def func(alist):
if len(alist) == 1:
return arg * 2
for item in alist:
yield item * 2
当我运行它时,我得到这个错误:
SyntaxError: 'return' with argument inside generator
现在,我意识到我无法做到这一点。但是,我想知道为什么。导致 Python 抛出 SyntaxError 的幕后究竟发生了什么?
【问题讨论】:
-
我很好奇为什么你有时会想要让步,有时又想要返回。您将如何正确使用这样的功能?你不需要事先检查你传递的列表的长度,以确保你调用它的方式正确吗?
-
总是
yield结果几乎肯定比您尝试的更好。 -
因为我最初并没有真正看到只为 1 个项目创建生成器的理由。但是,我有点得出结论,那就是我应该做的。就像我之前说的,我的问题的重点是“为什么我不能?”不是“我应该吗?”。我很好奇 Python 在内部是如何工作的,以及为什么它不会让它工作。
-
从 Python 3.3 开始可以。见python.org/dev/peps/pep-0380
标签: python function return python-2.x yield