[从迭代中进行[[yield i
]和return (i for i in range(10))
。之间的适当区别是什么?def generator1():
for i in range(10):
yield i
def generator2():
return (i for i in range(10))
例如,请参见这些函数generator1()
和generator2()
的编写方式不同,但是都返回一个生成器。
IDLE的输出:-
>>> generator1()
>>> <generator object generator1 at 0x107870468>
>>> generator2()
>>> <generator object generator2.<locals>.<genexpr> at 0x107870db0>
>>> import sys
>>> sys.getsizeof(generator1())
>>> 88
>>> sys.getsizeof(generator2())
>>> 88
我们可以说generator2()
的LOC(代码行)比generator2
少,而且对象的大小是相同的,我有些疑问。
<genexpr>
在打印generator2()
时意味着什么?yield
语句。生成器功能始终返回生成器。调用generator1时定义了生成器。generator2是一个常规函数,该函数使用生成器表达式构造生成器,然后将其返回。当执行行(i for i in range(10))
时定义了生成器。但是,如果添加更多逻辑,那么generator2可以返回其他任何内容,例如None。例如: