ここでは、ループ中に文字列s
を変更します。
s = 'hello'
for c in s:
s += c
print(s)
それは無限ループを生成しません(それはcould:各反復で新しい文字を追加します!)。
私は何年も前からこれを知っていますが、その理由を本当に説明することはできません。これは文字列の不変性と関係がありますか、それとも関連していませんか?
for c in s:
、ループを開始する前に元のs
がメモリにコピーされていますか?
私が無限ループを生成する可能性があると考えた別のケースですが、それはしません:
s = 'hello'
def f(x):
i = 0
while True:
try:
yield x[i]
except IndexError:
break
i += 1
for c in f(s):
s += c
print(s)
これは再帰的な方法ではありません。まったく問題ありません。文字列f('hello')
を渡すため、1回だけ実行されます。ループには「hello」を繰り返す必要があります。一度だけ実行されます