擅长:python、mysql、java
<p>你有:</p>
<pre><code>def file_gen(f_name):
f = open(f_name)
line = f.readline()
yield line
</code></pre>
<p>注意<code>line = f.readline()</code>这只从文件中读取1行。在</p>
<p>比较:</p>
^{pr2}$
<p>有了这个:</p>
<pre><code>def g(x):
li=range(x)
while li:
yield li.pop()
print list(g(10))
# [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
</code></pre>
<p><code>yield</code>只能用特定对象或表达式调用一次。一旦它被接收器使用,它必须被重新生成。所以你需要一个循环来读取文件的每一行。在</p>
<p>您可以通过以下方式使用第二个(可读性较差)表单:</p>
<pre><code>def file_gen(f_name):
f = open(f_name)
while True:
line = f.readline()
if not line:
break
yield line
</code></pre>
<p>您需要一个循环来创建要生成的项。在第一个例子中,<code>for line in f: yield line</code>是一个循环。在</p>
<p>我可以这样重写你的函数:</p>
<pre><code>def file_gen(f_name):
with open(f_name) as f:
for line in f:
yield line
</code></pre>