Pythonの真実と偽の値:詳細な紹介

ようこそ

この記事では、次のことを学びます。

  • 真実と偽の価値は何ですか。
  • 価値を真実または偽にするもの。
  • bool()関数を使用して、値が真であるか偽であるかを判別する方法。
  • 特別なメソッドを使用して、ユーザー定義クラスのオブジェクトを真偽にする方法__bool __

さぁ、始めよう!✨

🔹真理値と真実および偽の値

これらの概念TrueFalse、私たちが通常使用している値と比較することによって紹介します。

オペランドと演算子を含む式はTrueorのいずれかに評価Falseされ、iforwhile条件で使用して、コードブロックを実行する必要があるかどうかを判断できます。

ここに例があります:

# Expression 5 >> if 5 < 3: print("True") else: print("False") # Output False

この例では、2つのオペランドと1つの演算子を持つ式を使用したため、すべてが期待どおりに機能しています5 < 3

しかし、このコードを実行しようとするとどうなると思いますか?

>>> a = 5 >>> if a: print(a)

ifキーワードの横に典型的な式がなく、変数のみがあることに注意してください。

驚いたことに、出力は次のとおりです。

5

次のように、の値aをゼロに変更すると、次のようになります。

>>> a = 0 >>> if a: print(a)

出力はありません。

私はあなたが今これを尋ねているに違いないと確信しています:何がコードをうまく実行させたのですか?

変数aは典型的な式ではありません。演算子とオペランドがないのに、なぜその値に評価されTrueたりFalse、値に依存したりしたのでしょうか。

答えは、真理値自体ではないが、Trueまたはのいずれかに評価される真理値と偽の値の概念にありますFalse

🔸真実と偽りの価値

Pythonでは、個々のはまたはのいずれTrueかに評価できますFalse。Python言語のルールによって決定されたものがすでにあるため、真理値に評価するために必ずしも大きな式の一部である必要はありません。

基本的なルールは次のとおりです。

  • 評価される値Falseは考慮されますFalsy
  • 評価される値Trueは考慮されますTruthy

Pythonドキュメントによると:

任意のオブジェクトは、真理値、iforwhile条件での使用、または以下のブール演算のオペランドとしてテストできます(and、or、not)。

🔹ブールコンテキスト

より大きな式の一部として、ifまたはorwhile条件として値を使用する場合、ブールコンテキストで使用しています

ブールコンテキストは、値がどちらかであるTrueFalse、意味をなす必要があるコードの特定の「部分」と考えることができます。

例えば、(下記参照)後の状態ifキーワードまたは後のwhileキーワードのいずれかに評価する必要がありますTrueFalse

💡ヒント:値は変数に格納できます。値自体の代わりに、iforwhileキーワードの後に変数の名前を書き込むことができます。これは同じ機能を提供します。

真偽の値とは何か、ブール値のコンテキストでそれらがどのように機能するかがわかったところで、真偽の値の実際の例をいくつか見てみましょう。

🔸偽の値

シーケンスとコレクション:

  • 空のリスト []
  • 空のタプル ()
  • 空の辞書 {}
  • 空のセット set()
  • 空の文字列 ""
  • 空の範囲 range(0)

数字

  • 任意の数値型のゼロ。
  • 整数: 0
  • 浮く: 0.0
  • 繁雑: 0j

定数

  • None
  • False

の値がaゼロのときに最初の例で出力がなかった理由は、偽の値でした。

値は0ので、falsyあるif条件がなるFalseと、条件は、この例では実行されません。

>>> a = 0 >>> if a: print(a) # No Output 

🔹真実の価値

Pythonドキュメントによると:

デフォルトでは、オブジェクトはtrueと見なされます

真実の値は次のとおりです。

  • 空でないシーケンスまたはコレクション(リスト、タプル、文字列、辞書、セット)。
  • ゼロではない数値。
  • True

これがa、最初の例での値が5(真の値)であるために出力された理由です。

>>> a = 5 >>> if a: print(a) # Output 5

🔸組み込みのbool()関数

組み込みbool()関数を使用して、値が真であるか偽であるかを確認できます。

Pythonのドキュメントによると、この関数は次のとおりです。

ブール値、つまりTrueまたはのいずれかを返しますFalsex(引数)は、標準の真理テスト手順を使用して変換されます。

次のように、引数として値を渡すだけで済みます。

>>> bool(5) True >>> bool(0) False >>> bool([]) False >>> bool({5, 5}) True >>> bool(-5) True >>> bool(0.0) False >>> bool(None) False >>> bool(1) True >>> bool(range(0)) False >>> bool(set()) False >>> bool({5, 6, 2, 5}) True

💡ヒント:変数を引数として渡して、その値が真であるか偽であるかをテストすることもできます。

🔹実際の例

One of the advantages of using truthy and falsy values is that they can help you make your code more concise and readable. Here we have two real examples.

Example:

We have this function print_even() that takes as an argument a list or tuple that contains numbers and only prints the values that are even. If the argument is empty, it prints a descriptive message:

def print_even(data): if len(data) > 0: for value in data: if value % 2 == 0: print(value) else: print("The argument cannot be empty")

Notice this line:

if len(data) > 0:

We can make the condition much more concise with truthy and falsy values:

if data:

If the list is empty, data will evaluate to False. If it's not empty, it will evaluate to True. We get the same functionality with more concise code.

This would be our final function:

def print_even(data): if data: for value in data: if value % 2 == 0: print(value) else: print("The argument cannot be empty")

Example:

We could also use truthy and falsy values to raise an exception (error) when the argument passed to a function is not valid.

>>> def print_even(data): if not data: raise ValueError("The argument data cannot be empty") for value in data: if value % 2 == 0: print(value)

In this case, by using not data as the condition of the if statement, we are getting the opposite truth value of data for the if condition.

Let's analyze not data in more detail:

If data is empty:

  • It will be a falsy value, so data will evaluate to False.
  • not data will be equivalent to not False, which is True.
  • The condition will be True.
  • The exception will be raised.

If data is not empty:

  • It will be a truthy value, so it will evaluate to True.
  • not data will be equivalent to not True, which is False .
  • The condition will be False.
  • The exception will not be raised.

🔸 Making Custom Objects Truthy and Falsy Values

クラスとオブジェクト指向プログラミングに精通している場合は、クラスに特別なメソッドを追加して、オブジェクトを真偽の値のように動作させることができます。

__bool __()

特別なメソッド__bool__()を使用すると、クラスのオブジェクトがいつTrueまたはに評価されるかを決定する「カスタマイズされた」条件を設定できますFalse

Pythonドキュメントによると:

デフォルトでは、オブジェクトは、いずれかのクラスの定義がない限り、真の考えられる__bool__()方法戻ることFalse、または__len__()オブジェクトで呼び出されたときに戻り、ゼロこと方法。

たとえば、この非常に単純なクラスがある場合:

>>> class Account: def __init__(self, balance): self.balance = balance

特別なメソッドが定義されていないことがわかるので、このクラスから作成するすべてのオブジェクトは常に次のように評価されTrueます。

>>> account1 = Account(500) >>> bool(account1) True >>> account2 = Account(0) >>> bool(account2) True

We can customize this behavior by adding the special method __bool__():

>>> class Account: def __init__(self, balance): self.balance = balance def __bool__(self): return self.balance > 0

Now, if the account balance is greater than zero, the object will evaluate to True. Otherwise, if the account balance is zero, the object will evaluate to False.

>>> account1 = Account(500) >>> bool(account1) True >>> account2 = Account(0) >>> bool(account2) False

💡 Tip: If __bool__() is not defined in the class but the __len__() method is, the value returned by this method will determine if the object is truthy or falsy.

🔹 In Summary

  • Truthy values are values that evaluate to True in a boolean context.
  • Falsy values are values that evaluate to False in a boolean context.
  • Falsy values include empty sequences (lists, tuples, strings, dictionaries, sets), zero in every numeric type, None, and False.
  • Truthy values include non-empty sequences, numbers (except 0 in every numeric type), and basically every value that is not falsy.
  • They can be used to make your code more concise.

I really hope you liked my article and found it helpful. Now you can work with truthy and falsy values in your Python projects. Check out my online courses. Follow me on Twitter. ⭐️