Python で if 文に変数を入れたときの結果

if 文に変数を渡したときの挙動というのは言語ごとにまちまちでなかなか間違えやすいところです。

今回は Python で if 文に変数を渡したときにどういう評価になるのかというところをデータ型別に見てみたいと思います。

以下、次の組み込み型について順番に見ていきます。

  • 数値型
  • 文字列型
  • リスト・タプル・辞書・集合型
  • 論理値型
  • None

数値型

数値型の場合は 0 なら False で、それ以外ならすべて True になります。

a = 1
b = 0

if a:
    print 'True'  # True

if b:
    print 'True'  # 何も表示されない

文字列型

文字列型の場合は、空文字列なら False 、空文字以外ならすべて True 、となります。

a = 'Hello'
b = ''

if a:
    print 'True'  # True

if b:
    print 'True'  # 何も表示されない

リスト・タプル・辞書・集合型

いずれも、空(空集合)なら False 、それ以外なら True となります。

a = [1, 2, 3]
b = []

if a:
    print 'True'  # True

if b:
    print 'True'  # 何も表示されない
a = {'car': 1, 'house': 2}
b = {}

if a:
    print 'True'  # True

if b:
    print 'True'  # 何も表示されない

論理値型

論理値型はもちろんそのままで、 True なら TrueFalse なら False となります。

None

NoneFalse となります。

a = None

if a:
    print 'True'  # 何も表示されない

NoneFalse を区別したい場合は is を使って判定します。

if a is None:
    print '%s is None' % a  # None is None

この「 a is None 」というのは「 a == None 」としても同じように動きますが、どちらかといえば「 a is None 」の方がよいようです。理由は、 1) クラスの定義によっては == None ではつかまえられないレアケースがあるから、 2) is None の方が実行速度が速いから、の 2 点だそうです。 そのあたりについて書かれたブログ記事 がありますので、詳細が気になる方はそちらをご覧になってみてください。