在Python 3.5中,这将返回一个生成器,但没有产量:
def square(n):
return (x**2 for x in range(n))
print(square)
# <function square at 0x7f1ad0990f28>
print(square(10))
# <generator object square.<locals>.<genexpr> at 0x7f1ad08e0af0>
Run Code Online (Sandbox Code Playgroud)
除了更明显的生成器功能之外,是否有理由选择屈服版本,例如
def square(n):
for x in range(n): yield x**2
print(square)
# <function square at 0x7f1ac413ed90>
print(square(10))
# <generator object square at 0x7f1ad08e0d58>
Run Code Online (Sandbox Code Playgroud)
对我来说,他们似乎工作相同.
你的函数确实不是生成器,但这个表达式是:
(x**2 for x in range(n))
Run Code Online (Sandbox Code Playgroud)
它是一个生成器表达式,请参阅参考文档.
生成器表达式和包含yield生成器对象的结果的函数体.由于两者都是一个对象,你可以传递它并从函数返回一个.
生成器函数和等效生成器表达在功能上完全相同.它们产生相同的字节码.选择您认为对您的用例更具可读性的那个.
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |