<p>有这样的代码:</p>
<pre><code>def f():
return 3
return (i for i in range(10))
x = f()
print(type(x)) # int
def g():
return 3
for i in range(10):
yield i
y = g()
print(type(y)) # generator
</code></pre>
<p>当有返回生成器语句时,为什么<code>f</code>返回{<cd2>}?我想<code>yield</code>和generator expression都返回generator(至少在删除<code>return 3</code>语句时),但是当有一次生成器表达式返回,第二次有<code>yield</code>关键字时,函数编译还有其他规则吗?在</p>
<p>这在python3.3中进行了测试</p>
<pre><code>def f():
return 3
return (i for i in range(10))
</code></pre>
<p>与</p>
^{pr2}$
<p>第二个return语句永远不会被执行,只是在<code>f</code><strong>中有一个生成器表达式并不能使它成为生成器。在</p>