C#プログラマからみたPython 変数の基本編
変数宣言の方法
Pythonの変数は代入を行うことで宣言する。
// C# int hoge = 10;
と
#Python hoge = 10
は変数を宣言するという意味では同じ。
JavaScriptの「Var」や、Perlのように「$Var」というような予約語はない。あくまで代入を行った場合に変数宣言とみなされる。
代入で変数宣言ってことは…
代入するたびに別物が生成されるかっていうとそうでもなくて。(不変型の変数とかそういう話はここでは置いておく…。)
代入しようとしているスコープ内に、代入先の変数が存在すれば宣言とはみなされない。
のだけど、スコープの考え方もC#とかとは結構違う。
例えば以下のコードの場合…
# 変数を宣言する a = 1 b = 2 def hoge(): # 関数内からは親のスコープの変数bを見ることが出来ないため、 # 以下のbは変数を新規に宣言している。 # ここで宣言した変数はローカルスコープとなるので、上位の変数bには影響を与えない b = 10 # この場合はbが既に(先頭あたりで)宣言済みのため、変数bの値が200に変わる b = 200
C#だと、このような場合は親の変数bの値が変更されるし、宣言しようにも親のスコープで宣言されている変数名と同様の変数名を下位のスコープで利用できないので、マジでかって感じなのだが、Pythonの言語仕様上そうなので納得せざるをえない('A`)
型について
上のコードを見て、「型の宣言が無くね('A`)?」って思った人がいるかもしれないけど、Pythonはいわゆる動的言語なので、実行時に型が決まる。
C#やJavaなどの静的言語ではコンパイル時に常に型が決まるのに対し、Pythonでは実行時にならないと型が決まらない。JavaScriptなんかと同じ。
余談だけど、C#の…
var hoge = 10;
はあくまで型推論で、動的に型が決まっているわけではないので注意。
変数名について
Python3からは日本語を利用することが可能。
とは言えPython2まではアルファベットと数字のみだったので、日本語変数名の文化がないはず。よって、基本的には英数字のみで変数名を決める。
なお、変数名を数字から始めることは出来ない。これはC#と同じ。
アルファベットの大文字と小文字は区別される。これもC#と同じ。