Pythonに限らず、全てのプログラミング言語の基礎とも言える変数。
ただ、初めてプログラミングに触れる方にとっては「そもそも変数とは?」「どうやって使うの?」「変数を使うときの注意点は?」といった疑問があるのではないでしょうか?
そこで、ここでは変数の基礎的な使い方と、変数の有効範囲(スコープ)について解説します。
YouTubeも公開していますので、動画や音声で聞きたい方はぜひご覧ください。
変数
変数とは、文字や数字を格納したり、取り出したりできる、データを入れておく「箱」のことです。
変数の基本的な使い方を見ていきましょう。
apple_price = 100
kazu = 5
total_price = apple_price * kazu
print(str(total_price) + "円")
[出力結果]
500円
このプログラムは「りんご5個の合計金額」を求めています。
1行目、2行目ではそれぞれ「りんごの価格」「個数」を変数apple_priceと変数kazuに入れています。変数に値を入れることを「代入」と言い、初めて変数に代入することを「初期化」と呼びます。
また、変数を作ることを「宣言」と言います。3行目のtotal_priceでは、りんごの価格と個数を掛け算した結果をそのまま変数total_priceに代入しています。
このように、変数は式の計算結果をそのまま代入することができるのが特徴です。
特に関数やメソッドの結果を変数に代入することはよくあるので、覚えておくと良いでしょう。
list = [3, 6, 9, 8, 0]
max_num = max(list)
print(max_num)
[出力結果]
9
複合代入演算子
ここでは複合代入演算子について説明します。
まずは次のコードを見てください。
age = 17
age = age + 1
print(age)
[出力結果]
18
2行目の式に注目してください。式の左右両方に「age」があります。まず右辺のage + 1が計算されて、それをageに再代入しています。age + 1は18になるので、ageに18を代入し、出力しています。
プログラムでは、こういった「変数の値を更新するために、変数自身に演算を行う」ことがよくあります。そのため、このパターンの処理を簡潔に書けるようにしてくれる演算子があります。
それが「複合代入演算子」です。
試しに先ほどの例を複合代入演算子に置き換えてみましょう。
age = 17
age += 1
print(age)
結果は同じ18になります。
2行目の「+=」が複合代入演算子です。これは「age = age + 1」と同じ意味です。複合代入演算子には次のようなものがあります。
演算子 | 例 | 説明 |
---|---|---|
+= | a += b | a = a + bと同じ |
-= | a -= b | a = a - bと同じ |
*= | a *= b | a = a * bと同じ |
/= | a /= b | a = a / bと同じ |
//= | a //= b | a = a // bと同じ(aをbで割って、その整数値を代入する) |
%= | a %= b | a = a % bと同じ(aをbで割って、その余りを代入する) |
**= | a **= b | a = a ** bと同じ(aをb回掛け算した値を代入する) |
「+=」の複合代入演算子は、文字列を効率よく結合するのにも役立ちます。
s = "Hello "
s += "Python "
s += "World!"
print(s)
[出力結果]
Hello Python World!
変数の有効範囲
変数の有効範囲とはなんでしょうか?
実は変数は、変数を宣言した場所によって、その変数を使える場所が限定されます。
例を見てみましょう。
a = 10
def test():
a = 20
test()
print(a)
[出力結果]
10
「結果は20じゃないのか?」と思う方もいらっしゃると思いますが、10になりました。
処理の手順を追ってみましょう。まず1行目で変数aに10を代入しています。次に3〜4行目でtest関数を作成します。test関数は変数aに20を代入する関数です。このtest関数をprint()で出力する直前で呼び出します。
しかし、このとき「最初に10で初期化した変数aは値が変わらず」、結果10が出力されています。なぜ変数aは値が20に変わらなかったのでしょうか?実は、最初に初期化した変数aと、関数内の変数aは別物として扱われています。
これは、それぞれの変数の有効範囲が異なるからです。
関数内の変数aは、関数内でだけ使え、最初に宣言した変数aは、関数内では使えず、お互いに影響されない場所にいます。この変数の有効範囲のことを、変数の「スコープ」と呼びます。
定数
定数とは、「一度初期化したら、その後の処理で再代入できない変数」のことです。つまり、値が固定化されている変数です。
しかし、Pythonは定数をサポートしていないので、扱えません。慣習として、Pythonでは「全角 + アンダーバー」で名付けた変数を定数として扱います。
test_value = 10 #これは通常通り変数として扱う
TEST_VALUE = 10 #これは擬似的に定数として扱う