サーチ…


前書き

if、elif、elseなどのキーワードを含む条件式は、ブール条件に応じて異なるアクションを実行する機能をPythonプログラムに提供します(TrueまたはFalse)。このセクションでは、Pythonの条件文、ブール論理、および三項文の使用について説明します。

構文

  • <式> if <条件付き> else <式>#三項演算子

if、elif、else

Pythonでは、あなたは使用して条件文のシリーズを定義することができるif最初の1、のためelifアップまでの残りのため、最終的に(オプション) else 、他の条件文で捕捉されないもののために。

number = 5

if number > 2:
    print("Number is bigger than 2.")
elif number < 2:  # Optional clause (you can have multiple elifs)
    print("Number is smaller than 2.")
else:  # Optional clause (you can only have one else)
    print("Number is 2.")

出力Number is bigger than 2

elif代わりにelse ifを使用すると構文エラーが発生し、許可されません。

条件式(または「三項演算子」)

三項演算子は、インライン条件式に使用されます。簡単に読み取れるシンプルで簡潔な操作に最適です。

  • 引数の順序は、他の多くの言語(C、Ruby、Javaなど)とは異なり、Pythonの「驚くべき」動作に慣れていない人がそれを使用する(順序が逆になることがある)場合にバグにつながる可能性があります。
  • それは思考の通常の流れ(条件を最初に考え、次に効果を考える)に反するので、「扱いにくい」と感じる人もいます。
n = 5

"Greater than 2" if n > 2 else "Smaller than or equal to 2"
# Out: 'Greater than 2'

この式の結果は、英語で読み込まれた結果になります。条件式がTrueの場合は、左側の式に、それ以外の場合は右側に評価されます。

テナント操作は、次のようにネストすることもできます。

n = 5
"Hello" if n > 10 else "Goodbye" if n > 5 else "Good day"

また、 ラムダ関数に条件を含める方法も提供します

if文

if condition:
    body

ifステートメントは条件をチェックします。 Trueと評価されると、 if文の本体が実行されTrueFalseと評価された場合は、本文をスキップします。

if True:
    print "It is true!"
>> It is true!

if False:
    print "This won't get printed.."

条件には任意の有効な式を使用できます。

if 2 + 2 == 4:
    print "I know math!"
>> I know math!

Elseステートメント

if condition:
    body
else:
    body

前の条件文がすべてFalseに評価された場合に限り、else文はその本体を実行します。

if True:
    print "It is true!"
else:
    print "This won't get printed.."

# Output: It is true!

if False:
    print "This won't get printed.."
else:
    print "It is false!"

# Output: It is false!

ブール論理式

ブール論理式は、に評価することに加えて、 TrueまたはFalse 、と解釈されたを返すTrueまたはFalse 。 if-elseテストが必要なロジックを表現するのはPythonの方法です。


そしてオペレータ

and演算子はすべての式を評価し、すべての式がTrue評価された場合は最後の式を返します。それ以外の場合は、 Falseと評価される最初の値を返します。

>>> 1 and 2
2

>>> 1 and 0
0

>>> 1 and "Hello World"
"Hello World"

>>> "" and "Pancakes"
""

または演算子

orオペレータは、左から右に式を評価し、評価に最初の値を返しますTrue (何もしない場合、または最後の値True )。

>>> 1 or 2
1

>>> None or 1
1

>>> 0 or []
[]

レイジー評価

このアプローチを使用する場合は、評価が怠惰であることに注意してください。結果を決定するために評価する必要のない式は評価されません。例えば:

>>> def print_me():
        print('I am here!')
>>> 0 and print_me()
0

上記の例では、 print_meは決して実行されません。なぜなら、Pythonは0False )に遭遇すると式全体がFalse判断できるからです。プログラムロジックを提供するためにprint_meを実行する必要がある場合は、このことを覚えておいてください。


複数の条件のテスト

複数の条件をチェックする際のよくある間違いは、ロジックを誤って適用することです。

この例では、2つの変数がそれぞれ2より大きいかどうかをチェックしようとしています。この文は、-if if (a) and (b > 2)として評価されます。 bool(a)は、 aが0でない場合にTrue評価されるため、予期しない結果になります。

>>> a = 1
>>> b = 6
>>> if a and b > 2:
...     print('yes')
... else:
...     print('no')
    
yes

各変数は別々に比較する必要があります。

>>> if a > 2 and b > 2:
...     print('yes')
... else:
...     print('no')
        
no

変数が複数の値のいずれかであるかどうかをチェックする際にも、同様の間違いがあります。この例のステートメントは、 - if (a == 3) or (4) or (6)として評価されます。これは、 bool(4)bool(6)それぞれTrue評価されるため、予期しない結果になりTrue

>>> a = 1
>>> if a == 3 or 4 or 6:
...     print('yes')
... else:
...     print('no')
       
yes

再度、各比較は別々に行わなければならない

>>> if a == 3 or a == 4 or a == 6:
...     print('yes')
... else:
...     print('no')
        
no

in演算子を使用するのが標準的な方法です。

>>> if a in (3, 4, 6):
...     print('yes')
... else:
...     print('no')
    
no

真実の価値

次の値は、ブール演算子に適用されたときにFalseと評価されるため、 Falseとみなされます。

  • 無し
  • 0 、または、例えばゼロに相当する任意の数値、 0L0.00j
  • 空のシーケンス: ''""()[]
  • 空のマッピング: {}
  • __bool__または__len__メソッドが0またはFalse返すユーザー定義型

Pythonの他のすべての値はTrue評価されTrue


注:よくある間違いは、違いが重要な場合に異なる虚偽の値を返す操作の偽を単にチェックすることです。たとえば、 if foo()がより明示的ではif foo() is None

cmp関数を使用して2つのオブジェクトの比較結果を取得する

Python 2にはcmp関数が含まれています。この関数を使用すると、あるオブジェクトが別のオブジェクトよりも小さいか等しいか大きいかを判断できます。この関数は、これらの3つのオプションのいずれかに基づいてリストから選択肢を選択するために使用できます。

x > y 'greater than'場合は'greater than' 'less than'x < y 'less than'場合は'less than' 'equal'x == y 'equal'場合は'equal'を印刷する必要があるとします。

['equal', 'greater than', 'less than', ][cmp(x,y)]

# x,y = 1,1 output: 'equal'
# x,y = 1,2 output: 'less than'
# x,y = 2,1 output: 'greater than'

cmp(x,y)は以下の値を返します

比較結果
x <y -1
x == y 0
x> y 1

この機能は、あなたが使用できるのPython 3で除去されcmp_to_key(func)に位置してヘルパー関数functoolsキー機能を旧比較関数を変換するためのPython 3でを。

リスト内包表記による条件式評価

Pythonでは、リスト内包表記をハックして条件式を評価することができます。

例えば、

[value_false, value_true][<conditional-test>]

例:

>> n = 16
>> print [10, 20][n <= 15]
10

ここでn<=15False返します(これはPythonでは0になります)。だからPythonが評価しているものは次のとおりです。

[10, 20][n <= 15]
==> [10, 20][False] 
==> [10, 20][0]     #False==0, True==1 (Check Boolean Equivalencies in Python)
==> 10
Python 2.x 2.7

組み込みの__cmp__メソッドは3つの可能な値を返しました:0,1、-1、cmp(x、y)が返された0:両方のオブジェクトが同じ場合1:x> y -1:x <y

これは、リスト内包表記とともに、リストの最初の(つまり、インデックス0)、2番目の(つまりインデックス1)、最後の(つまりインデックス-1)の要素を返すために使用できます。私たちにこのタイプの条件を与えます:

[value_equals, value_greater, value_less][<conditional-test>]

最後に、上記のすべての例で、Pythonは両方のブランチを評価する前に両方のブランチを評価します。選択したブランチだけを評価するには:

[lambda: value_false, lambda: value_true][<test>]()

最後に()を追加すると、最後にラムダ関数が呼び出され/評価されることが保証されます。したがって、選択した分岐のみを評価します。

例:

count = [lambda:0, lambda:N+1][count==N]()

オブジェクトがNoneであるかどうかをテストし、それを割り当てる

オブジェクトが割り当てられていないことを示すNone場合、そのオブジェクトに何かを割り当てることがよくあります。私たちはaDateを使用しaDate

これを行う最も簡単な方法is Noneテストを使用することis None

if aDate is None:
    aDate=datetime.date.today()

(Pythonicという言葉is None== Noneではなくis Noneあることに注意してください)。

しかし、これは、 not Noneがブール式でTrueと評価されnot Noneという概念を利用することによってわずかに最適化できます。以下のコードは同等です:

if not aDate:
    aDate=datetime.date.today()

しかしもっとPythonの方法があります。次のコードも同じです:

aDate=aDate or datetime.date.today()

これは短絡評価を行います。 aDateが初期化されてnot Nonenot None場合、ネット効果not Noneでそれ自体に割り当てられます。 is None場合、 datetime.date.today()aDateに割り当てられaDate



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow