Pythonまたは演算子の使用方法

Pythonまたは演算子の使用方法

Pythonには、andor、およびnotの3つのブール演算子があります。 それらを使用して、条件をテストし、プログラムが実行する実行パスを決定できます。 このチュートリアルでは、Pythonのor演算子とその使用方法について学習します。

このチュートリアルを終えると、次のことがわかります。

  • Pythonor演算子のしくみ

  • ブールおよび非ブールコンテキストでPythonor演算子を使用する方法

  • Pythonでorを使用して解決できるプログラミングの問題の種類

  • 他の人がPythonor演算子の特別な機能のいくつかを使用するときに、他の人のコードを読んでよりよく理解する方法

いくつかの実用的な例を作成して、Pythonのor演算子の使用方法を学習します。 Pythonor演算子が提供するすべての可能性を実際に使用していなくても、それを習得すると、より優れたコードを記述できるようになります。

Free Bonus:Click here to get access to a chapter from Python Tricks: The Bookは、Pythonのベストプラクティスと、より美しい+ Pythonicコードをすぐに適用できる簡単な例を示しています。

ブール論理

George Boole(1815–1864)は、現在Boolean algebraと呼ばれるものを開発しました。これは、コンピューターハードウェアとプログラミング言語の背後にあるデジタルロジックの基盤です。

ブール代数は、式とオブジェクトのtruth valuetrueまたはfalse)を中心に構築され、ブール演算ANDOR、に基づいています。およびNOT。 これらの操作は、論理演算子またはブール演算子を使用して実装されます。これにより、Boolean expressionsを作成できます。これは、trueまたはfalseと評価される式です。

ブール論理の助けを借りて、条件を評価し、それらの条件の真理値に応じて、プログラムが実行する操作を決定できます。 これはプログラミングの重要な基礎であり、プログラムの実行フローを決定するツールを提供します。

Pythonのブールロジックに関連するいくつかの基本概念を見てみましょう。

  • Booleanは、TrueまたはFalseのいずれかの値のタイプです。 Pythonでは、ブール型はboolであり、これはintのサブタイプです。

  • Boolean valuesは、Pythonの値TrueまたはFalse(大文字のTおよびF)です。

  • Boolean variableは、TrueまたはFalseのいずれかである変数です。 ブール変数は通常、特定の条件が存在するかどうかを示すためにflagsとして使用されます。

  • Boolean expressionは、TrueまたはFalseのいずれかを返す式です。

  • Boolean contextは、if条件およびwhileループにすることができます。ここで、Pythonは、式がブール値に評価されることを期待します。 ブールコンテキストで事実上任意の式またはオブジェクトを使用でき、Pythonはその真理値を決定しようとします。

  • Operandsは、式(ブール式かどうか)に含まれ、演算子によって接続された部分式またはオブジェクトです。

  • Boolean or logical operatorsは、AND(論理ANDまたは接続詞)、OR(論理ORまたは論理和)、およびNOT(論理NOT)です。 sまたは否定)。 キーワードandor、およびnotは、これらの操作のPython演算子です。

ブール論理に関するより良いコンテキストが得られたので、Python固有のトピックをさらに進めましょう。

Pythonブール演算子

Pythonには、単純な英語の単語として入力される3つのブール演算子があります。

  1. and

  2. or

  3. not

これらの演算子は、ブール式(およびオブジェクト)を接続して、複合ブール式を作成します。

Pythonブール演算子は、常に2つのブール式または2つのオブジェクト、あるいはそれらの組み合わせをとるため、binary operatorsと見なされます。

このチュートリアルでは、Pythonで論理OR演算を実装する演算子であるPythonor演算子について説明します。 仕組みと使用方法を学習します。

Pythonor演算子のしくみ

ブールOR演算子を使用すると、2つのブール式を1つの複合式に接続できます。 複合式が真であると見なされるためには、少なくとも1つの部分式が真である必要があり、それは重要ではありません。 両方の部分式が偽の場合、式は偽です。

これは、OR演算子の背後にある一般的なロジックです。 ただし、次のセクションで説明するように、Pythonのor演算子はこれ以上のことをすべて実行します。

ブール式でのorの使用

Pythonor演算子をコネクタとして使用してブール式を作成するには、2つの部分式が必要です。 orを使用したブール式の基本的な構文は次のとおりです。

# Syntax for Boolean expression with or in Python
exp1 or exp2

部分式(exp1またはexp2)の少なくとも1つがTrueと評価された場合、その式はTrueと見なされます。 両方の部分式がFalseと評価された場合、式はFalseです。 この定義は、両方の可能性とどちらかを許可するため、inclusive orと呼ばれます。

Pythonorの演算子の動作の概要は次のとおりです。

exp1の結果 exp2の結果 exp1 or exp2の結果

True

True

True

True

False

True

False

True

True

False

False

False

表1。 論理Pythonor演算子:真理値表

この表は、部分式の真理値に応じて、exp1 or exp2などのブール式の結果の真理値をまとめたものです。

いくつかの実用的な例をコーディングして、Table 1で示される結果の真理値を説明しましょう。

>>>

>>> exp1 = 1 == 2
>>> exp1
False
>>> exp2 = 7 > 3
>>> exp2
True
>>> exp1 or exp2  # Return True, because exp2 is True
True
>>> exp2 or exp1  # Also returns True
True
>>> exp3 = 3 < 1
>>> exp1 or exp3  # Return False, because both are False
False

前の例では、部分式がTrueと評価されると、グローバル結果はTrueになります。 一方、両方の部分式がFalseと評価された場合、グローバル結果もFalseになります。

共通オブジェクトでのorの使用

一般に、OR演算を含む式のオペランドは、Table 1に示すようにブール値を持ち、結果として真理値を返す必要があります。 オブジェクトに関しては、Pythonはそれについてあまり厳密ではなく、オブジェクトがtrueまたはfalseと見なされるかどうかを決定する一連のルールを内部的に実装します。

デフォルトでは、オブジェクトは、そのクラスがFalseまたはhttps://docs.python.org/3/reference/datamodel.html#object。%(を返すhttps://docs.python.org/3/reference/datamodel.html#objectbool [__bool__()]メソッドを定義しない限り、trueと見なされます。オブジェクトで呼び出されたときにゼロを返すt5)s [__len__()]メソッド。 これは、偽と見なされるほとんどの組み込みオブジェクトです。

  • falseと定義された定数:NoneおよびFalse

  • 任意の数値型のゼロ:00.00jDecimal(0)Fraction(0, 1)

  • 空のシーケンスとコレクション:''()[]{}set()range(0)

Source

or演算に関係するオペランドがブール式ではなくオブジェクトである場合、Pythonor演算子は、値TrueまたはFalseではなく、trueまたはfalseオブジェクトを返します。あなたは期待することができます。 このオブジェクトの真理値は、以前に見たルールに従って決定されます。

これは、Pythonがor操作の結果をboolオブジェクトに強制変換しないことを意味します。 Pythonでorを使用して2つのオブジェクトをテストしている場合、演算子は、真理値に関係なく、trueと評価される最初のオブジェクトまたは式の最後のオブジェクトを返します。

>>>

>>> 2 or 3
2
>>> 5 or 0.0
5
>>> [] or 3
3
>>> 0 or {}
{}

最初の2つの例では、最初のオペランド(25)が真(ゼロ以外)であるため、Pythonのor演算子は常に最初のオペランドを返します。

最後の2つの例では、左のオペランドはfalse(空のオブジェクト)です。 Pythonのor演算子は、両方のオペランドを評価し、右側のオブジェクトを返します。オブジェクトは、trueまたはfalseのいずれかに評価されます。

Note:オブジェクトを含むブール式から値TrueまたはFalseのいずれかを本当に取得する必要がある場合は、組み込み関数であるbool(obj)を使用できます。これは、objの真理値に応じてTrueまたはFalseを返します。

前のコードで示された動作を次のように要約できます。

左オブジェクト 右のオブジェクト x or yの結果

x

y

x、trueと評価された場合、それ以外の場合はy

表2 ブール式の代わりにオブジェクトをテストするときのPythonor演算子の動作

つまり、Pythonのor演算子は、真理値に関係なく、trueと評価される最初のオブジェクトまたは式の最後のオブジェクトを返します。

次のように、単一の式で複数の操作を連鎖させることにより、この動作を一般化できます。

a or b or c or d

この例では、Pythonのor演算子は、最初に見つかった真のオペランド、または最後のオペランドを返します。 これは、Pythonでorがどのように機能するかを覚えておくための経験則です。

ブール式とオブジェクトの混合

or操作でブール式と一般的なPythonオブジェクトを組み合わせることもできます。 この場合、Pythonのor演算子は引き続き最初の真のオペランドまたは最後のオペランドを返しますが、戻り値はTrueまたはFalse、あるいはテストしているオブジェクトである可能性があります。

表現の結果 オブジェクトの結果 exp or objの結果

True

True

True

True

False

True

False

False

obj

False

True

obj

表3 オブジェクトとブール式をテストするときのPythonor演算子の動作

いくつかの例でこれがどのように機能するかを見てみましょう。

>>>

>>> 2 < 4 or 2  # Case 1
True
>>> 2 < 4 or []  # Case 2
True
>>> 5 > 10 or []  # Case 3
[]
>>> 5 > 10 or 4  # Case 4
4

Case 1およびCase 2では、部分式2 < 4Trueと評価され、戻り値はTrueでした。 一方、Case 3Case 4では、部分式5 > 10Falseに評価されたため、最後のオペランドが返され、空のリスト([])およびTrueまたはFalseの代わりに整数(4)。

演習として、3番目の列の式の順序を逆にすることでTable 3を拡張しようとすることができます。つまり、obj or expを使用して、結果を予測しようとします。

短絡評価

Pythonは、関連するすべての部分式とオブジェクトを評価する前に、ブール式の真理値を判断できる場合があります。 たとえば、Pythonのor演算子は、真と見なされるものが見つかるとすぐにオペランドの評価を停止します。 たとえば、次の式は常にTrueです。

>>>

>>> True or 4 < 3
True

or式の最初のオペランドが2番目のオペランドの値に関係なくtrueと評価された場合(4 < 3False)、式はtrueと見なされ、2番目のオペランドはtrueと見なされます。オペランドは評価されません。 これはshort-circuit (lazy) evaluationと呼ばれます。

別の例を考えてみましょう。

>>>

>>> def true_func():
...     print('Running true_func()')
...     return True
...
>>> def false_func():
...     print('Running false_func()')
...     return False
...
>>> true_func() or false_func()  # Case 1
Running true_func()
True
>>> false_func() or true_func()  # Case 2
Running false_func()
Running true_func()
True
>>> false_func() or false_func()  # Case 3
Running false_func()
Running false_func()
False
>>> true_func() or true_func()  # Case 4
Running true_func()
True

Case 1では、Pythonはtrue_func()を評価しました。 Trueを返すため、次のオペランド(false_func())は評価されません。 フレーズRunning false_func()が出力されないことに注意してください。 最後に、式全体がTrueと見なされます。

最初のオペランド(false_func())はFalseであるため、Case 2は両方の関数を評価します。 次に、演算子は2番目の結果、つまりtrue_func()によって返される値(True)を返します。

両方ともFalseを返すため、Case 3は両方の関数を評価します。 この演算は最後の関数の戻り値、つまりFalseを返し、式はFalseと見なされます。

Case 4では、Pythonは最初の関数であるTrueのみを評価し、式はTrueです。

short-circuit (lazy) evaluationでは、式の値が第1オペランドのみから決定できる場合、ブール式の第2オペランドは評価されません。 Pythonは(他の言語と同様に)パフォーマンスを優先してこの2番目の評価をバイパスします。これは、2番目のオペランドを評価するとCPU時間を無駄に消費するためです。

最後に、Pythonor演算子を使用しているときのパフォーマンスに関しては、次のことを考慮してください。

  • Pythonor演算子の右側の式は、実質的または重要な作業を実行する関数を呼び出す場合や、短絡ルールが有効になっても発生しない副作用がある場合があります。

  • 本当である可能性が高い条件は、左端の条件である可能性があります。 この方法は、Pythonが第1オペランドを評価するだけで条件が真かどうかを判断できるため、プログラムの実行時間を短縮できます。

セクションの要約

Pythonor演算子がどのように機能するかを学び、その主な機能と動作のいくつかを見てきました。 これで、実世界の問題を解決する際に演算子を使用する方法を学習することで、レベルアップを続けるのに十分なことがわかりました。

その前に、Pythonのorに関するいくつかの重要なポイントを要約しましょう。

  • これは、ブールOR演算子が従う必要のある一般的な規則を満たしています。 一方または両方のブール部分式が真の場合、結果は真になります。 それ以外の場合、両方の部分式が偽であれば、結果は偽になります。

  • Pythonオブジェクトをテストするときに、TrueまたはFalseの値の代わりにオブジェクトを返します。 つまり、式x or yは、trueと評価された場合はxを返し、それ以外の場合は(真理値に関係なく)yを返します。

  • 事前定義されたPython内部ルールのセットに従って、オブジェクトの真理値を決定します。

  • 真であると考えられるものを見つけるとすぐに、オペランドの評価を停止します。 これは、短絡評価または遅延評価と呼ばれます。

ここで、いくつかの例を使用して、この演算子をどこでどのように使用できるかを学習します。

ブールコンテキスト

このセクションでは、Pythonor演算子を使用する方法のいくつかの実用的な例を示し、そのやや変わった動作を利用してより良いPythonコードを作成する方法を学びます。

Pythonのブールコンテキストで作業していると言える主な状況は2つあります。

  1. if statements:の条件付き実行

  2. while loops:の条件付き繰り返し

ifステートメントを使用すると、いくつかの条件の真理値に応じて、プログラムの実行パスを決定できます。

一方、whileループを使用すると、特定の条件が真である限り、コードの一部を繰り返すことができます。

これらの2つの構造は、control flow statementsと呼ばれるものの一部です。 プログラムの実行パスを決定するのに役立ちます。

次の2つのセクションで説明するように、Pythonのor演算子を使用して、ifステートメントとwhileループの両方での使用に適したブール式を作成できます。

ifステートメント

特定の実行パスを選択する前に、2つの条件のいずれか(または両方)が真であることを確認したいとしましょう。 この場合、Pythonのor演算子を使用して、1つの式で条件を接続し、その式をifステートメントで使用できます。

ユーザーの回答に応じていくつかのアクションを実行するには、ユーザーから確認を取得する必要があるとします。

>>>

>>> def answer():
...     ans = input('Do you...? (yes/no): ')
...     if ans.lower() == 'yes' or ans.lower() == 'y':
...         print(f'Positive answer: {ans}')
...     elif ans.lower() == 'no' or ans.lower() == 'n':
...         print(f'Negative answer: {ans}')
...
>>> answer()
Do you...? (yes/no): y
Positive answer: y
>>> answer()
Do you...? (yes/no): n
Negative answer: n

ここでは、ユーザーの入力を取得して、それをansに割り当てます。 次に、ifステートメントは左から右に条件のチェックを開始します。 それらの少なくとも1つがtrueと評価された場合、ifコードブロックを実行します。 elifステートメントも同じことをします。

answer()の最初の呼び出しでは、ユーザーの入力は最初の条件を満たすyであり、ifコードブロックが実行されました。 2番目の呼び出しでは、ユーザーの入力(n)が2番目の条件を満たすため、elifコードブロックが実行されました。 ユーザー入力が条件を満たさない場合、コードブロックは実行されません。

別の例として、数値が範囲外であるかどうかを判断する場合があります。 この場合、Pythonのor演算子を使用することもできます。 次のコードは、x20から40の範囲外にあるかどうかをテストします。

>>>

>>> def my_range(x):
...     if x < 20 or x > 40:
...         print('Outside')
...     else:
...         print('Inside')
...
>>> my_range(25)
Inside
>>> my_range(18)
Outside

x=25my_range()を呼び出すと、ifステートメントは25 < 20、つまりFalseをテストします。 次に、Falseでもあるx > 40をテストします。 最終結果はFalseであるため、elseブロックが実行されました。

一方、18 < 20Trueに評価されます。 次に、Pythonのor演算子が短絡評価を行い、条件はTrueと見なされます。 メインブロックが実行され、値が範囲外です。

whileループ

whileループは、Pythonのor演算子を使用できるブールコンテキストのもう1つの例です。 ループのヘッダーでorを使用することにより、いくつかの条件をテストし、すべての条件がfalseと評価されるまで本体を実行できます。

一部の産業用機器の動作温度を100ºF〜140ºFの範囲になるまで測定する必要があるとします。 これを行うには、whileループを使用できます。

from time import sleep

temp = measure_temp()  # Initial temperature measurement

while temp < 100 or temp > 140:
    print('Temperature outside the recommended range')
    print('New Temperature measure in 30 seconds')
    sleep(30)
    print('Measuring Temperature...')
    temp = measure_temp()
    print(f'The new Temperature is {temp} ºF')

これはほとんど疑似コードのおもちゃの例ですが、アイデアを示しています。 ここで、whileループは、tempが100ºFから140ºFの間になるまで実行されます。 温度値が範囲外である場合、ループの本体が実行され、温度を再度測定します。 measure_temp()が100ºFから140ºFの間の値を返すと、ループは終了します。 温度測定は、30秒ごとにusing sleep(30)で行われます。

Note:前のコード例では、文字列のフォーマットにPythonのf-stringを使用しました。f-stringをさらに深く掘り下げたい場合は、Python 3’s f-Strings: An Improved String Formatting Syntax (Guide)を確認できます。

非ブールコンテキスト

ブールコンテキストからPythonor演算子の特別な機能を利用できます。 経験則では、ブール式の結果は最初の真のオペランドまたは行の最後になります。

論理演算子(orを含む)は代入演算子(=)の前に評価されるため、一般的な式の場合と同じ方法でブール式の結果を変数に割り当てることができます。 :

>>>

>>> a = 1
>>> b = 2
>>> var1 = a or b
>>> var1
1
>>> a = None
>>> b = 2
>>> var2 = a or b
>>> var2
2
>>> a = []
>>> b = {}
>>> var3 = a or b
>>> var3
{}

ここで、or演算子は期待どおりに機能し、最初のtrueオペランド、または両方がfalseと評価された場合は最後のオペランドを返します。

Pythonでのorのこのやや特殊な動作を利用して、非常に一般的なプログラミングの問題に対するPythonのソリューションを実装できます。 いくつかの実世界の例を見てみましょう。

変数のデフォルト値

Pythonor演算子を使用する一般的な方法の1つは、真理値に従ってオブジェクトのセットからオブジェクトを選択することです。 これを行うには、割り当てステートメントを使用します。

>>>

>>> x = a or b or None

ここでは、式の最初の真のオブジェクトをxに割り当てました。 すべてのオブジェクト(この場合はab)がfalseオブジェクトの場合、Pythonのor演算子は最後のオペランドであるNoneを返します。 これが機能するのは、or演算子が、真理値に応じてオペランドの1つを返すためです。

この機能を使用して、変数にデフォルト値を割り当てることもできます。 次の例では、aがtrueの場合はxaに設定し、それ以外の場合はdefaultに設定します。

>>>

>>> x = a or default

前のコードでは、aがtrueと評価された場合にのみ、axに割り当てます。 それ以外の場合、xにはdefaultが割り当てられます。

デフォルトのreturn

一部の組み込み関数のreturn値は、呼び出し時に操作できます。 引数として反復可能を取り、単一の値を返すmax()min()のような関数は、この種のハッキングの完璧な候補になる可能性があります。

空のイテラブルをmax()またはmin()に指定すると、ValueErrorが取得されます。 ただし、Pythonのor演算子を使用して、この動作を変更できます。 次のコードを見てみましょう。

>>>

>>> lst = []  # Empty list to test max() and min()
>>> max(lst)
Traceback (most recent call last):
  File "", line 1, in 
    max(lst)
ValueError: max() arg is an empty sequence
>>> min(lst)
Traceback (most recent call last):
  File "", line 1, in 
    min(lst)
ValueError: min() arg is an empty sequence
>>> # Use Python or operator to modify this behavior
>>> max(lst or [0])  # Return 0
0
>>> min(lst or [0])  # Return 0
0

max()min()のデフォルトの動作は、空のイテラブルでそれらを呼び出すと、ValueErrorを上げることです。 ただし、Pythonのor演算子を使用すると、これらの関数にデフォルトのreturn値を指定し、それらのデフォルトの動作をオーバーライドします。

Note:前のコード例では、いくつかの問題が発生したときにPythonがどのように例外を発生させるかを見ました。 Pythonの例外について詳しく知りたい場合は、Introduction to Python Exceptionsを参照してください。

可変デフォルト引数

Pythonプログラマーが直面する一般的な問題は、関数のデフォルト引数として可変オブジェクトを使用しようとすることです。

デフォルト引数の可変値は、呼び出し間で状態を保持できます。 これはしばしば予期しないことです。 これは、デフォルトの引数値が一度だけ評価および保存されるため、つまり、結果の関数が呼び出されるたびではなく、defステートメントが実行されるときに発生します。 そのため、関数内の可変デフォルトを変更する際には注意が必要です。

次の例を見てください。

>>>

>>> def mutable_default(lst=[]):  # Try to use a mutable value as default
...     lst.append(1)  # Change same object each time
...     print(lst)
...
>>> mutable_default(lst=[3, 2])  # Default not used
[3, 2, 1]
>>> mutable_default()  # Default used
[1]
>>> mutable_default()  # Default grows on each call
[1, 1]
>>> mutable_default()
[1, 1, 1]

ここで、lstは同じオブジェクト(デフォルトの[])への参照を保持しているため、mutable_default()を呼び出すたびに1lstの末尾に追加されます。 期待どおりに関数が呼び出されるたびに新しいlistが取得されるわけではありません。

それが望みの動作ではない場合、従来の(そして最も安全な)解決策は、デフォルトを関数の本体に移動することです:

>>>

>>> def mutable_default(lst=None):  # Use None as formal default
...     if lst is None:
...         lst = []  # Default used? Then lst gets a new empty list.
...     lst.append(1)
...     print(lst)
...
>>> mutable_default(lst=[3, 2])  # Default not used
[3, 2, 1]
>>> mutable_default()  # Default used
[1]
>>> mutable_default()
[1]

この実装では、lstのデフォルト値に依存して、引数なしでmutable_default()を呼び出すたびに、lstが空のlistに設定されるようにします。

この例のifステートメントは、ほとんど割り当てlst = lst or []に置き換えることができます。 このように、関数に引数が渡されない場合、lstはデフォルトでNoneになり、Pythonのor演算子は右側に空のリストを返します。

>>>

>>> def mutable_default(lst=None):  # Use None as formal default
...     lst = lst or []  # Default used? Then lst gets an empty list.
...     lst.append(1)
...     print(lst)
...
>>> mutable_default(lst=[3, 2])  # Default not used
[3, 2, 1]
>>> mutable_default()  # Default used
[1]
>>> mutable_default()
[1]

ただし、これはまったく同じではありません。 たとえば、空のlistが渡された場合、or操作により、関数は、最初に渡されたlistを変更して印刷するのではなく、新しく作成されたlistを変更して印刷します。 ifバージョンのようなlistで十分です。

空でないlistオブジェクトのみを使用することが確実な場合は、このアプローチを使用できます。 それ以外の場合は、ifバージョンを使用してください。

ゼロ部門

数値計算を扱う場合、ゼロ除算は一般的な問題です。 この問題を回避するには、ifステートメントを使用して、分母が0に等しいかどうかを確認することになります。

例を見てみましょう。

>>>

>>> def divide(a, b):
...     if not b == 0:
...         return a / b
...
>>> divide(15, 3)
5.0
>>> divide(0, 3)
0.0
>>> divide(15, 0)

ここでは、分母(b)が0と等しくないかどうかをテストしてから、除算の結果を返しました。 b == 0Trueに評価される場合、divide()は暗黙的にNoneを返します。 同様の結果を得る方法を見てみましょう。ただし、今回はPythonのor演算子を使用します。

>>>

>>> def divide(a, b):
...     return b == 0 or a / b
...
>>> divide(15, 3)
5.0
>>> divide(0, 3)
0.0
>>> divide(15, 0)
True

この場合、Pythonのor演算子は、最初の部分式(b == 0)を評価します。 この部分式がFalseの場合のみ、2番目の部分式(a / b)が評価され、最終結果はabの除算になります。

前の例との違いは、b == 0Trueに評価された場合、divide()は暗黙のNoneではなくTrueを返すことです。

lambdaの複数の式

Pythonはlambda expressionsを提供します。これにより、単純な無名関数を作成できます。 式lambda parameters: expressionは、関数オブジェクトを生成します。 この種の関数は、単純なコールバック関数とキー関数を定義する場合に役立ちます。

lambda関数を作成するための最も一般的なパターンは、単一のexpressionを戻り値として使用することです。 ただし、これを変更して、Pythonのor演算子を使用して、lambdaにいくつかの式を実行させることができます。

>>>

>>> lambda_func = lambda hello, world: print(hello, end=' ') or print(world)
>>> lambda_func('Hello', 'World!')
Hello World!

この例では、lambdaに2つの式(print(hello, end=' ')print(world))を実行するように強制しました。 しかし、このコードはどのように機能しますか? ここで、lambdaは、2つの関数が実行されるブール式を実行します。

orが最初の関数を評価すると、Noneを受け取ります。これは、print()の暗黙の戻り値です。 Noneはfalseと見なされるため、orは引き続き2番目のオペランドを評価し、最終的にブール式の結果として返します。

この場合、ブール式によって返される値は、lambdaによって返される値でもあります。

>>>

>>> result = lambda_func('Hello', 'World!')
Hello World!
>>> print(result)
None

ここで、resultは、lambdaによって返される値への参照を保持します。これは、ブール式によって返される値と同じです。

結論

これで、Pythonor演算子がどのように機能するか、およびPythonで一般的なプログラミングの問題を解決するためにそれを使用する方法がわかりました。

Pythonのor演算子の基本を理解したので、次のことができるようになります。

  • ブールおよび非ブールコンテキストでPythonor演算子を使用する

  • Pythonor演算子を効果的に使用して、いくつかの種類のプログラミング問題を解決します

  • Pythonのorのやや特別な機能を利用して、より優れたPythonicコードを記述します。

  • 他の人がPythonor演算子を使用するときに、そのコードを読んで理解を深める

さらに、ブール論理とPythonの主要な概念についても少し学びました。