コード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は正しい答えを得られないのですか? :print f を for ループに追加するfor f in walk_dir(path)
とprint f
実行されないのに、なぜ pass を代用できないのですか?
関数の問題を考慮し、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 は正しく答えられません。
何か混乱しているように感じますが、はっきりさせてもらえますか?