デフォルト値と or
デフォルト値と or とは
or 演算子と if を使い分けて、None や空文字をデフォルト値で置き換える。本レッスンでは、デフォルト値と or の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。
デフォルト値と or
「値が空ならデフォルト値で埋める」処理はアプリ開発の至るところに現れます。フォームの未入力フィールドを "未設定" に置き換える、API のレスポンスで null が来たら 0 を入れる、設定ファイルにキーが無ければ初期値を使う、などです。Python には or 演算子という強力な短絡評価があり、value or default という 1 行で書ける場面も多い一方で、0 や False のような falsy だが有効な値 を取り違えてしまう罠もあります。本レッスンでは、None や空文字をデフォルト値で置き換える default_name 関数を、or と if の両方の書き方で考えながら実装します。
「
orでデフォルト」は便利だが、0やFalseを弾いてしまわないかを必ず一度立ち止まって考えるべきです。
or 演算子の短絡評価
Python の or は、左から評価して 最初の truthy な値 を返します。
"Alice" or "guest"は"Alice""" or "guest"は"guest"(空文字は falsy)None or "guest"は"guest"(None は falsy)0 or 10は10(0 は falsy)
注目すべきは最後のケースで、0 や False は falsy なので or で弾かれて、意図せずデフォルト値が選ばれてしまいます。「年齢 0 歳の赤ちゃん」が or で消える可能性があるわけです。
「
Noneのときだけデフォルト」が欲しいときは、value if value is not None else defaultを使うのが安全です。
文法を確認する
本レッスンでは文字列専用の関数 default_name を書きます。引数 name が None または空文字なら "guest" を返し、それ以外はそのまま返します。or を使えば 1 行で書けます。
Python
def default_name(name):
return name or "guest"この書き方では name が None でも "" でも "guest" に置き換わります。ただし将来 name に 0 や False などが入る可能性があるなら、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よくある間違い
orを盲信して0を弾く —count or 10と書くと、countが0のときも10になります。is Noneで明示的に判定するのが安全です。if not name:の落とし穴 —not nameはnameがNone、""、0、FalseのいずれでもTrueになります。文字列専用の関数なら問題ないですが、汎用化するときは挙動を確認しましょう。isと==の使い分け —Noneの判定はis Noneを使うのが慣習です。name == Noneも動きますが、リンターに警告されることが多いです。
Python では「
Noneの有無を比べるならis、値の中身を比べるなら==」を覚えておきましょう。
やってみよう
関数 default_name(name) を実装してください。name が None か空文字なら "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 つができることを確認しましょう。
- デフォルト値と or の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. デフォルト値と or とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
要件
- name が None なら 'guest' を返す
- name が空文字 '' なら 'guest' を返す
- それ以外 (空白文字を含む) はそのまま返す
入出力例
test-cases.txt
default_name("Alice") → "Alice"
default_name("") → "guest"
default_name(null) → "guest"
default_name("Bob") → "Bob"
default_name(" ") → " "
default_name("0") → "0"