web-dev-qa-db-ja.com

ループ中に文字列を変更する

ここでは、ループ中に文字列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)
6
Basj

これは再帰的な方法ではありません。まったく問題ありません。文字列f('hello')を渡すため、1回だけ実行されます。ループには「hello」を繰り返す必要があります。一度だけ実行されます

0
user13301358