[Python 3]制御フロー

9747 ワード

while


while文は、式が正しい条件下で繰り返し実行するために使用されます.
テスト式を繰り返し、真の場合は最初の文グループを実行します.式が偽(最初のテストかもしれない)の場合、else句が実行され、ループが終了します.
最初の文グループで実行されたbreak文は、else句を実行しない文グループでループを終了します.最初の文グループで実行されたcontinue文は、文グループ内の残りの文をスキップし、テスト式の継続を返します.
n=0
while n<5:
    print(n)
else
    print('err')

if


if文は条件判断に用いられる.
if x >= 90:
    print(' ')
elif x >= 80:
    print(' ')
elif x >= 70:
    print(' ')
elif x >= 60:
    print(' ')
else:
    print(' ')

ゼロまたは複数のelifセクションがあり、elseセクションもオプションです.if... elif ... elif ... シーケンスは、他の言語のswitch文またはcase文の代わりに使用されます.

for


Pythonのfor文は、シーケンスに表示される順序に従って、任意のシーケンス(リストまたは文字列)にループアクセスできます.
words = ['cat', 'window', 'defenestrate']
for w in words:
    print(w, len(w))

# output like this:
# cat 3
# window 6
# defenestrate 12

反復中のシーケンス(選択したアイテムのコピーなど)をループ内で変更する場合は、まずコピーを作成することをお勧めします.反復シーケンスは暗黙的にコピーを作成しません.スライスを使用してコピーを作成できます.
words = ['cat', 'window', 'defenestrate']
for w in words[:]:  # Loop over a slice copy of the entire list.
    if len(w) > 6:
      words.insert(0, w)

# words
# ['defenestrate', 'cat', 'window', 'defenestrate']

一般に、range()関数を使用して、遍歴のために等差の数値シーケンスが生成される.たとえば、インデックスに基づいてシーケンスを反復します.
a = ['Mary', 'had', 'a', 'little', 'lamb']
for i in range(len(a)):
    print(i, a[i])

# output:
# 0 Mary
# 1 had
# 2 a
# 3 little
# 4 lamb

実はこの場合、enumerate()関数を使うともっと便利です.enumerate(iterable, start=0):列挙オブジェクトを返します.iterableは、シーケンス、反復器、または反復をサポートする他のオブジェクトでなければなりません.enumerate()から返された反復器の_next__()メソッドは、カウンタ(startからstartのデフォルト値が0)とiterableの反復に対して取得された値を含むメタグループを返します.
>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

次のようになります.
def enumerate(sequence, start=0):
    n = start
    for elem in sequence:
        yield n, elem
        n += 1

rangeを印刷すると、結果は私たちが考えているリストではありません.
>>> print(range(10))
range(0, 10)

range()が返すオブジェクトの動作は多くの点でリストに似ていますが、実際にはリストではありません.反復すると、所望のシーケンスの要素が順次返されますが、リストは実際に生成されません.そのため、スペースを節約できます.このようなオブジェクトを反復可能オブジェクト(iterable)と呼ぶ.これらは、いくつかの関数およびコンストラクタで使用するのに適しており、これらの関数およびコンストラクタは、新しい要素がなくなるまで反復可能なオブジェクトから連続的な要素を取得することを望んでいる.for文はこのような反復器(iterator)である.もう1つは、反復可能なオブジェクトからリストを作成するlist()関数です.
>>> list(range(5))
[0, 1, 2, 3, 4]

break、continue、およびループのelse句


break文は、最近のforまたはwhileループからジャンプするために使用されます.
breakは構文的にforまたはwhileループにのみ表示されますが、これらのループ内の関数およびクラス定義にネストすることはできません.
最も近いループを終了し、else句がある場合はスキップします.
breakがforループを終了した場合、制御ループのターゲットは現在の値を維持します.
breakがfinally句を含むtry文の送信を制御すると、ループを離れる前にfinally句が実行されます.
ループ文にはelse句があります.ループがbreak文ではなく反復完全リスト(for文)またはループ条件が成立しない(while文)によって終了するため、else句が実行されます.
for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(n, 'equals', x, '*', n//x)
            break
    else:
        # loop fell through without finding a factor
        print(n, 'is a prime number')

# output:
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3

よく見ると、上のコードのelse句はforループに属し、if文には属しません.
ループとともに使用されるelse句は、if文のelse句ではなくtry文のelse句に似ています.try文のelse句は、異常がない場合に実行され、ループのelse句はbreakがない場合に実行されます.
continue文は、次の反復を続行することを示します.
for num in range(2, 10):
    if num % 2 == 0:
        print("Found an even number", num)
        continue
    print("Found a number", num)

# output
# Found an even number 2
# Found a number 3
# Found an even number 4
# Found a number 5
# Found an even number 6
# Found a number 7
# Found an even number 8
# Found a number 9

continueは構文的にforまたはwhileループにのみ表示されますが、これらのループ内の関数定義、クラス定義、finally句にネストすることはできません.最内層サイクルの次のラウンドを続けます.
continueがfinally句を含むtry文の送信を制御すると、finally句は本当に次のループを開始する前に実行されます.

pass


pass文は何もしません.文法的に文が必要ですが、プログラムが何もする必要がない場合に使用されます.通常、新しいコードを作成するときに関数体または制御体のプレースホルダとして使用されます.
最小クラスを作成するためにも一般的に使用されます.
class MyEmptyClass:
    pass

参考資料:
Python3 Documentation - Tutorial