编码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
当代码1和代码2来看,得到的结果相同,我想知道为什么吗? 为什么yield f
和print f
可以得到相同的效果?
as Vanesa Milagros Fernandez say:print f#----->你打印f但是不要管它。
让我们来进一步讨论。
CODE3
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不能得到正确的答案?如果你添加:print f in for循环for f in walk_dir(path)
和print f
将不会运行,为什么我不能通过检索?
考虑功能问题,修改代码2成码4,
码4
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目录”),我得到正确的输出。
让我们修改码4到代码4
代码4
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
代码4不能得到正确的amswer。
我觉得有什么困惑我,你能让我清楚吗?