14

私はPythonの初心者です。in--と--は完全に不要elseであることがわかりました。なぜなら、そして最終的にはに実行され、代わりに通常の行を使用できるからです。forelsewhileelseforwhileelse

例えば:

for i in range(1, 5):
    print i
else:
    print 'over'

for i in range(1, 5):
    print i
print 'over'

同じだ。

では、なぜPythonにelsefor-elsewhile-が含まれているのelseでしょうか。

4

2 に答える 2

27

for/elseのセマンティクスについて間違っています。else句は、ループが完了した場合にのみ実行されます。たとえば、breakステートメントが検出されなかった場合などです。

典型的なfor/elseループは次のようになります。

for x in seq:
    if cond(x):
        break
else:
    print "Didn't find an x I liked!"

「else」は、ループ本体のすべての「if」とペアになると考えてください。サンプルは同じですが、「break」ステートメントが混在しているため、そうではありません。

同じアイデアのより長い説明:http://nedbatchelder.com/blog/201110/forelse.html

于 2012-07-20T02:50:57.163 に答える
1

このfor ... elseステートメントは、検索ループを実装するために使用されます。

特に、検索ループで何も見つからない場合に対応します。

for z in xrange(10):
    if z == 5:
        # We found what we are looking for
        print "we found 5"
        break # The else statement will not execute because of the break
else:

    # We failed to find what we were looking for
    print "we failed to find 5"
    z = None

print 'z = ', z

出力:

we found 5
z =  5

その検索はと同じです

z = None
for z in xrange(10):
    if 5 == z:
        # We found what we are looking for
        break

if z == None:
    print "we failed to find 5"
else:
    print "we found 5"

print 'z = ', z

for検索リストが空の場合(つまり)、zは初期化されないことに注意してください[]。そのため、検索後にzを使用する場合は、zが定義されていることを確認する必要があります。z以下は、印刷しようとすると定義されていないため、例外が発生します。

for z in []:
    if 5 == z:
        break

print "z = ",z

出力

    print "z = ",z
NameError: name 'z' is not defined

要約すると、このelse句は、forループが自然に終了するたびに実行されます。forループでブレークまたは例外が発生した場合、elseステートメントは実行されません。

于 2017-06-13T13:54:03.277 に答える