はじめに
JavaやC#を触ってきた人がPythonに移ると、
「変数だけ定義して、値はあとで入れる」
というおなじみのパターンができず最初に戸惑うかもしれません。
僕も実際にそうでした。
本記事ではこの違いの理由とPythonでの代替方法を解説します。
Javaではできる「変数だけ宣言」
Javaならこんな書き方普通にしますよね。
String name; // 値はまだ入れない
変数は定義されているけど値は設定されていない状態です。
参照型ならnull、プリミティブ型なら初期値が入ります。
Pythonには「変数だけ宣言」がない
Pythonでは変数宣言という構文自体が存在せず、
代入と同時に初めて変数が生まれます。
name # NameError: name 'name' is not defined
未代入の変数は存在しないので、
「型だけ決めておく」みたいなことはできません。
代替方法は None
Pythonで「値なし状態」を作りたいときはNoneを使います。
これはJavaのnullに相当します。
name = None # まだ値はないことを明示
# 後で代入
name = "Alice"
これで「今は空だけど後で値を入れる」意図を明確にできます。
Noneを使うときの注意点
比較は == ではなく is を使う
if name is None:
print("値はまだない")
関数の戻り値としても便利
def find_user(id):
if id not in db:
return None
まとめ
-
JavaやC#では「変数宣言」と「値の代入」が分離している
-
Pythonでは変数は代入と同時に初めて存在する
-
値なし状態は None を使う
-
比較は is None が推奨
最初は違和感がありますが、慣れるとシンプルで分かりやすい仕組みです。
Java脳からPython脳に切り替える最初のステップとして
この違いは押さえておくとスムーズに移行できます。