デフォルト値と or

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

デフォルト値と or とは

or 演算子と if を使い分けて、None や空文字をデフォルト値で置き換える。本レッスンでは、デフォルト値と or の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

デフォルト値と or

「値が空ならデフォルト値で埋める」処理はアプリ開発の至るところに現れます。フォームの未入力フィールドを "未設定" に置き換える、API のレスポンスで null が来たら 0 を入れる、設定ファイルにキーが無ければ初期値を使う、などです。Python には or 演算子という強力な短絡評価があり、value or default という 1 行で書ける場面も多い一方で、0False のような falsy だが有効な値 を取り違えてしまう罠もあります。本レッスンでは、None や空文字をデフォルト値で置き換える default_name 関数を、orif の両方の書き方で考えながら実装します。

or でデフォルト」は便利だが、0False を弾いてしまわないかを必ず一度立ち止まって考えるべきです。

or 演算子の短絡評価

Pythonor は、左から評価して 最初の truthy な値 を返します。

  • "Alice" or "guest""Alice"
  • "" or "guest""guest" (空文字は falsy)
  • None or "guest""guest" (None は falsy)
  • 0 or 1010 (0 は falsy)

注目すべきは最後のケースで、0False は falsy なので or で弾かれて、意図せずデフォルト値が選ばれてしまいます。「年齢 0 歳の赤ちゃん」が or で消える可能性があるわけです。

None のときだけデフォルト」が欲しいときは、value if value is not None else default を使うのが安全です。

文法を確認する

本レッスンでは文字列専用の関数 default_name を書きます。引数 nameNone または空文字なら "guest" を返し、それ以外はそのまま返します。or を使えば 1 行で書けます。

Python

def default_name(name): return name or "guest"

この書き方では nameNone でも "" でも "guest" に置き換わります。ただし将来 name0False などが入る可能性があるなら、if で明示的に書くほうが安全です。

Python

def default_name_strict(name): if name is None or name == "": return "guest" return name

本問題の入力は文字列もしくは None だけなので、どちらの書き方でも正解になります。挙動を意識して書き分けてください。

動きを追ってみる

default_name("Alice")"Alice" が truthy なのでそのまま "Alice"default_name("")default_name(None) は falsy なので "guest" を返します。default_name(" ") (半角スペース) は falsy ではないので " " がそのまま返る点に注意してください。空白文字も「未入力扱い」にしたいなら name.strip() で前後の空白を取り除いてから判定する必要があります。

Python

def default_name_v2(name): if name is None: return "guest" if name.strip() == "": return "guest" return name
diagram (will load when visible)

よくある間違い

  1. or を盲信して 0 を弾くcount or 10 と書くと、count0 のときも 10 になります。is None で明示的に判定するのが安全です。
  2. if not name: の落とし穴not namenameNone""0False のいずれでも True になります。文字列専用の関数なら問題ないですが、汎用化するときは挙動を確認しましょう。
  3. is== の使い分けNone の判定は is None を使うのが慣習です。name == None も動きますが、リンターに警告されることが多いです。

Python では「None の有無を比べるなら is、値の中身を比べるなら ==」を覚えておきましょう。

やってみよう

関数 default_name(name) を実装してください。nameNone か空文字なら "guest"、それ以外はそのまま返します。テストでは "Alice", "", None, "Bob", " " (空白文字) のケースが含まれます。空白文字をどう扱うかは仕様次第なので、今回は そのまま返す ことにしましょう (" "" " のまま)。完成したら、if value is None: return default 型のチェックを取り入れた版にも書き換えてみると、or との違いがより鮮明になります。

よくある質問

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

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

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

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

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

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

次のレッスン

次は 第4章クイズ で、or 演算子と if を使い分けて、None や空文字をデフォルト値で置き換える を学びます。

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

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

理解度チェック (30 秒)

Q. デフォルト値と or とは何か、1 文で説明してください。

この章のポイント

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

関連レッスン

要件

  1. name が None なら 'guest' を返す
  2. name が空文字 '' なら 'guest' を返す
  3. それ以外 (空白文字を含む) はそのまま返す

入出力例

test-cases.txt

default_name("Alice")"Alice" default_name("")"guest" default_name(null)"guest" default_name("Bob")"Bob" default_name(" ")" " default_name("0")"0"

ヒント

main.py
main.py
学習モード

メモ

デフォルト値と or

⌘S で保存