代码1
import os
def walk_dir(dirname):
for d in os.listdir(dirname):
path = os.path.join(dirname, d)
if os.path.isdir(path):
for f in walk_dir(path):
print f
else:
yield path
for file in walk_dir("/tmp"):
print file
代码2
import os
def walk_dir(dirname):
for d in os.listdir(dirname):
path = os.path.join(dirname, d)
if os.path.isdir(path):
for f in walk_dir(path):
yield f
else:
yield path
for file in walk_dir("/tmp"):
print file
当 code1 和 code2 运行时,它得到相同的输出,我想知道为什么?为什么yield f
和print f
能得到同样的效果?
正如 Vanesa Milagros Fernandez 所说:print f # -----> 你打印 f 但不运行它。
让我们进行更多讨论。
代码3
import os
def walk_dir(dirname):
for d in os.listdir(dirname):
path = os.path.join(dirname, d)
if os.path.isdir(path):
for f in walk_dir(path):
pass
else:
yield path
for file in walk_dir("/tmp"):
print file
为什么code3不能得到正确答案?如果在 for 循环中添加 :print ffor f in walk_dir(path)
并且print f
不会运行,为什么我不能代入通过?
考虑函数问题,将code2修改为code4,
code4
import os
def walk_dir(dirname):
for d in os.listdir(dirname):
path = os.path.join(dirname, d)
if os.path.isdir(path):
walk_dir(path)
else:
print path
我把它改成一个简单的函数,当运行 walk_dir("/tmp") 时,我得到了正确的输出。
让我们将code4修改为code5
code5
import os
def walk_dir(dirname):
for d in os.listdir(dirname):
path = os.path.join(dirname, d)
if os.path.isdir(path):
walk_dir(path)
else:
yield path
for file in walk_dir("/tmp"):
print file
code5 无法正确回答。
我觉得有什么让我困惑,你能说清楚吗?