コンテンツにスキップ

Pythonとは?

[

Pythonの「or」演算子の使用方法

このチュートリアルでは、Pythonの「or」演算子とその使用方法について学びます。「or」演算子を使用することで、条件をテストし、プログラムの実行パスを決定することができます。

このチュートリアルの終わりまでに以下のことを学ぶことができます:

  • Pythonの「or」演算子の働き
  • ブール値と非ブール値のコンテキストでPythonの「or」演算子を使用する方法
  • Pythonの「or」を使用して解決できるプログラミングの問題の種類
  • Pythonの「or」演算子の特殊な機能を使用して他の人のコードを読み解く方法

実際の例を使ってPythonの「or」演算子の使い方を学びます。Pythonの「or」演算子のすべての可能性を実際に使わなくても、それをマスターすることでより良いコードを書くことができるようになります。

ブール論理

ジョージ・ブール(1815-1864)は、現在のコンピュータハードウェアやプログラミング言語の背後にあるデジタルロジックの基礎となるブール代数を開発しました。

ブール論理のおかげで、条件を評価し、プログラムの実行操作を決定することができます。これはプログラミングにおける重要な基礎であり、プログラムの実行フローを決定するためのツールを提供します。

Pythonのブール論理に関連するいくつかの基本的な概念を見てみましょう:

  • ブールは、「True」または「False」のいずれかである値の種類です。Pythonでは、ブール型はboolであり、intのサブタイプです。
  • ブール値は、Pythonの場合は「True」または「False」(大文字の「T」と「F」)という値です。
  • ブール変数は、TrueまたはFalseのいずれかになる変数です。ブール変数は、特定の条件が存在するかどうかを示すフラグとして使用されます。
  • ブール式は、真または偽を返す式です。
  • ブールコンテキストは、「if」文や「while」ループなどで、Pythonが真偽値を評価する式が期待される場所です。ほとんどの式やオブジェクトをブールコンテキストで使用でき、Pythonはその真偽値を判断しようとします。

「or」演算子の使い方

Pythonの「or」演算子は、2つのオペランドを受け取り、最初のオペランドが真である場合はその値を返し、そうでない場合は2番目のオペランドの値を返します。

ブール式を使った「or」の使用

まずは、ブール式を使った「or」演算子の使用方法を見てみましょう。

a = True
b = False
result = a or b
print(result) # True

この例では、変数aには「True」が、変数bには「False」が代入されています。そして、a or bという式で、「True or False」の結果は「True」となります。

一般的なオブジェクトを使った「or」の使用

「or」演算子は、ブール式だけでなく、多くの一般的なオブジェクトでも使用することができます。以下に例を示します。

a = 0
b = 10
result = a or b
print(result) # 10

この例では、変数aには「0」が、変数bには「10」が代入されています。そして、a or bという式で、「0 or 10」の結果は「10」となります。

このように、「or」演算子は、ブール式や一般的なオブジェクトに対しても使用することができます。

ショートサーキット評価

「or」演算子は、「or」演算子の最初のオペランドが真である場合には2番目のオペランドを評価せずに結果を返すという特徴があります。このような評価方法をショートサーキット評価と呼びます。

a = 0
b = 10
result = a or b
print(result) # 10

この例では、変数aには「0」が、変数bには「10」が代入されています。しかし、「0」はブール値として「False」と評価されるため、aFalseであることがわかると、Pythonは2番目のオペランドである変数bの評価をスキップし、「10」を結果として返します。

ブールコンテキスト

「or」演算子は、if文やwhileループなどのブールコンテキストでも使用することができます。以下に例を示します。

a = 5
if a > 10 or a == 5:
print("Condition is True")
# Output: Condition is True

この例では、変数aに「5」が代入されています。if文の条件式では、変数aが「10」より大きいかまたはaが「5」と等しいかのいずれかを評価し、真である場合には「Condition is True」というメッセージが表示されます。

ブール論理から非ブール論理へ

Pythonの「or」演算子は、ブールコンテキストだけでなく、非ブールコンテキストでも使用することができます。

変数のデフォルト値

「or」演算子を使用して、変数のデフォルト値を設定することができます。以下に例を示します。

name = input("Enter your name: ")
greeting = name or "Hello, Guest"
print(greeting)

この例では、ユーザーに名前を入力するプロンプトが表示されます。ユーザーが名前を入力した場合は、変数nameにその値が代入されます。しかし、ユーザーが名前を入力しなかった場合は変数nameが空文字列になります。

次に、nameor演算子の左オペランドとして使用し、デフォルト値として「Hello, Guest」を指定します。この場合、nameが空文字列であれば「Hello, Guest」が、そうでなければnameの値が取得されます。最後に、結果が表示されます。

デフォルトの返り値

「or」演算子は、関数のデフォルトの返り値を設定するためにも使用することができます。以下に例を示します。

def divide(a, b):
result = a / b or "Division by zero is not allowed"
return result
print(divide(10, 0)) # Division by zero is not allowed

この例では、divideという関数を定義しています。この関数は、引数abの割り算を行います。割り算の結果はresultに代入されます。

resultor演算子の左オペランドとして使用し、デフォルトの返り値として「Division by zero is not allowed」を指定しました。これは、ゼロで割ることは許されない場合のデフォルトのエラーメッセージです。割り算の結果がゼロの場合にこのメッセージが返されます。

ミュータブルなデフォルト引数

「or」演算子は、デフォルト引数として使用する際にも役立ちます。以下に例を示します。

def add_item(item, shopping_list=[]):
shopping_list.append(item)
return shopping_list
print(add_item("apple")) # ['apple']
print(add_item("banana")) # ['apple', 'banana']

この例では、add_itemという関数を定義しています。この関数は、引数itemを取り、shopping_listitemを追加します。shopping_listは、デフォルト引数として指定されており、呼び出し時に引数が指定されなかった場合には空のリストとして初期化されます。

しかし、このコードは思わぬ結果をもたらします。add_itemを連続して呼び出すと、shopping_listitemが追加されるだけでなく、shopping_listが共有されるため、前の呼び出しの結果も影響を受けてしまいます。

この問題を解決するためには、「or」演算子を使用してデフォルト引数をNoneに設定し、関数内で新しいリストを作成することができます。以下に修正したコードを示します。

def add_item(item, shopping_list=None):
if shopping_list is None:
shopping_list = []
shopping_list.append(item)
return shopping_list
print(add_item("apple")) # ['apple']
print(add_item("banana")) # ['banana']

この修正により、毎回新しいリストが作成され、問題が解決されます。

ゼロ除算

「or」演算子は、ゼロ除算の例外を回避するためにも使用することができます。以下に例を示します。

a = 10
b = 0
result = b and a / b
print(result) # 0

この例では、変数aには「10」が、変数bには「0」が代入されています。変数bが「0」であることがわかると、b and a / bの結果は「0」になります。このようにして、ゼロ除算の例外を回避することができます。

ラムダ式での複数の式

「or」演算子は、ラムダ式の中で複数の式を組み合わせるためにも使用することができます。以下に例を示します。

result = (lambda x: x**2 or x*2)(5)
print(result) # 25

この例では、ラムダ式を使って関数を定義し、その結果を変数resultに代入しています。ラムダ式では、引数xを受け取り、x**2 or x*2という式を評価しています。「x**2」は「25」であり、真であるため、これが結果として返されます。

結論

これでPythonの「or」演算子の使用方法について学びました。ブール論理の基礎から始めて、ブールコンテキストや非ブールコンテキストでの使用方法までを学びました。

「or」演算子は、条件をテストし、プログラムの実行パスを決定するための重要なツールです。実際のコードでは、さまざまな方法で「or」演算子を活用することができます。

リアル・パイソンのウェブサイトで提供されているPythonチュートリアルを読むことで、さらに詳しく学ぶことができます。