真偽値の変換と truthy / falsy

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

真偽値の変換と truthy / falsy とは

bool 関数と truthy / falsy 判定の使い方を学びます。本レッスンでは、真偽値の変換と truthy / falsy の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

真偽値とは

Python真偽値 (boolean) は TrueFalse の 2 値だけを取る bool 型の値です。if 文や while 文の条件で使われる、プログラムの分岐を決める根本的な型です。== != < > in などの比較演算子は、評価すると必ず bool を返します。

Python

1 < 2 # True 'a' == 'b' # False 3 in [1, 2, 3] # True

Python では True1False0 と同じ整数として扱える、というのも覚えておくと便利です。boolint のサブクラスです。

bool 関数による変換

組み込み関数bool は、任意の値を True または False に変換します。

Python

bool(1) # True bool(0) # False bool('hello') # True bool('') # False bool([1, 2]) # True bool([]) # False bool(None) # False

つまり Python では、値そのものが真偽の意味を持っている わけです。空でないリストや空でない文字列、ゼロでない数値は True 扱い、空のリスト・空文字列・ゼロ・NoneFalse 扱いになります。この性質を truthy (真として扱われる) / falsy (偽として扱われる) と呼びます。

falsy になる代表的な値

falsy として扱われる値は意外と少なく、覚えてしまえば楽です。次の通りです。

  • False
  • None
  • 数値の 0 (0, 0.0, 0j)
  • 空のシーケンス ('', [], ())
  • 空のマッピング ({})

これら以外はほぼすべて truthy です。'False' (文字列) や [0] (要素 1 個のリスト) は truthy なので注意。

動きを追ってみる

if 文の条件式は bool に評価されます。if value: と書くと、Python は内部で bool(value) を呼んで判定しています。

Python

def has_value(x): if x: return True return False

これは次のように書き直せます。

Python

def has_value(x): return bool(x)
diagram (will load when visible)

短く書けてバグも減るので、if x: return True / return False というパターンは return bool(x) に置き換えるのが定石です。

よくある間違い

真偽値変換でつまずきやすいポイントを 3 つ紹介します。

  1. 'False'False と思い込む 文字列 'False'空ではない文字列 なので bool('False')True です。文字列の真偽判定では value == 'False' のように内容を見ます。
  2. if x == True: と書く 冗長で、if x: でほぼ同じ意味になります。if x is True: まで書くと、1True を区別したいときに役立ちます。
  3. 0None を混同する 数値 0None はどちらも falsy ですが、意味は違います。「値がない」のか「値はあるけどゼロ」なのかを判定したいなら、x is None を使い分けます。

関数の引数に default=None を取って if value: で分岐すると、0None も同じ扱いになってしまうので、if value is None: のほうが安全な場面が多いです。

and と or の戻り値

Pythonandor は、実は True False を返すとは限らない という面白い性質があります。a and ba が falsy なら a をそのまま返し、truthy なら b を返します。a or b は逆で、a が truthy なら a、falsy なら b を返します。

Python

0 or 'default' # 'default' 'value' or 'fb' # 'value' [] and 'never' # [] 1 and 'last' # 'last'

name = user_name or 'ゲスト' のように書くと、user_name が空文字や None のときに 'ゲスト' が代入されるので、デフォルト値を設定するイディオム としてよく使われます。

やってみよう

引数 value を受け取り、その値が truthy なら Truefalsy なら False を返す関数 is_truthy を実装してください。bool 関数を使うのが最短ルートです。if value: return True else: return False のような冗長な書き方ではなく、return bool(value) の 1 行で書きましょう。テストでは数値・文字列・リスト・None などさまざまな値が渡されます。

よくある質問

Q. このトピックは Python 以外の言語でも同じ書き方ですか?

A. 考え方は他言語と共通ですが、構文や標準ライブラリは異なります。Python はインデントでブロックを表し、コロン + 改行で構造を作るのが特徴です。他言語に移行する際は基本概念を維持しつつ、構文の差分を意識して書き換えると混乱が少ないです。

Q. 実行してエラーが出た場合の対処は?

A. エラーメッセージの最後の行(TypeError や NameError などの型)から原因と該当行を確認します。Python はトレースバックが下から上に読むと「呼び出し元 → 内部」の順で辿れます。print や IDE のデバッガで途中の変数を確認すると原因が見えてきます。

Q. 次のステップで何を学ぶべきですか?

A. 本レッスンの内容を理解できたら、本文の「やってみよう」を実装し、章末クイズに進むのがおすすめです。さらに自分のミニアプリ(電卓・todo・スコア集計など)に応用するとスキルが定着します。詰まったら本文の H2 セクションに戻って読み返してください。

次のレッスン

次は None の判定 で、bool 関数と truthy / falsy 判定の使い方を学びます を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. bool 変換 の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. bool 変換 とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

要件

  1. bool 関数を使って値の真偽を判定する
  2. if 文を使わずに 1 行で書く
  3. return で True か False を返す

入出力例

test-cases.txt

is_truthy(1)true is_truthy(0)false is_truthy("")false is_truthy("hello")true is_truthy(null)false is_truthy([])false is_truthy([1,2])true

ヒント

main.py
main.py
学習モード

メモ

真偽値の変換と truthy / falsy

⌘S で保存