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#と同じ。

まとめ

  • 変数宣言は代入することで実現する。
  • 型が決まるのは実行時
  • 変数名の扱いは大体C#と同じ。