🙆
Pythonのif x:でFalseになるケース(暗黙の真偽値変換)
はじめに
最近Pythonを利用することが多いのですが、もともと別言語で育ってきたこともあり、暗黙の真偽値変換について勘違いをしてしまったことがあって、戒めの記事になります。
Falseになるケース
- 空のリスト []
- 空の文字列 ""
- 数値の0(0、0.0など)
- None
- False
- 空のタプル ()
- 空の辞書 {}
- 空のセット set()
個人的な認識
この一覧の中では、None
とFalse
と0
以外はTrueのつもりでいました。
感想
うっかりif x is not None
ではなくif x
と書いてしまい空配列でTrueでおかしな動作していたのが気がついたきっかけです。
どこかでPythonは変数のNone判定はisを使えと読んでいたのですが、ついやってしまいました。
その他
次のような判定もPythonは可能です。
参照なりポインタの含有ではなく、リストの一致で比較してくれます。
setでできるかは試していません。
python
t = [["a","b"], ["c","d"]]
if ["a","b"] in t:
print("ok")
else:
print("ng")
Discussion