[Python] 文字列を数値に変換(ただし空文字(None)はゼロとする)

[Python] 文字列を数値に変換(ただし空文字(None)はゼロとする)

文字列を数値に変換するときに空文字はゼロで変換する方法

Python で文字列を数値型(int, float)に変換するには以下のようにします。

i = int("123")
f = int("123.4")

この時変換対象の文字列が空文字(もしくは None)の時でも安全に変換できるようにする方法があります。

i = int("" or "0")
f = float(None or "0")

print(i) # 0
print(f) # 0.0

or を使ってデフォルト時の値を文字列として指定することで左辺が Falsy な値(つまり空文字やNone)の時に右辺の文字列が評価され、結果的に右辺の値がデフォルト値となります。

仕組み

Python における or はbool値を返すわけではなく、左辺が Truthly な値ならば左辺を、Falsy な値ならば右辺を返します。or 演算子がif文の条件式で登場するとき、結果的に返された値を判定しているという仕組みです。

また orand はif文の条件式以外でも使えるので上記のようにデフォルト値代わりとして使えるということです。つまり空文字や NoneFalsy な値です。

Falsy な値

  • False
  • 空のリスト []
  • 空の辞書 {}
  • 空の文字列 ""
  • ゼロ 0, 0.0
  • None

上記値以外はすべて Truthly な値です。

例えば以下のような or 演算子の使い方を見てみます。

a = False or [] or {} or "" or 0 or 0.0 or None or "a"
print(a) # a

"a" 以外すべて False で評価されるので、最終的に一番右の "a" が評価されて返されます。したがって表示されるのは "a" となります。

以上。

Pythonカテゴリの最新記事