今回は変数。プログラミングでは必須の変数ですが、特に難しいことはありません。
ただプログラミング言語によって多少の違いがあるのがこの変数の分野です。他の言語とごっちゃにならないように気を付けましょう。
変数とは? 何が便利なの?
すごく簡単に言ってしまうと、変数は「値の別名」です。
「10」という数値や「"Hello"」という文字列は全て1つの「値」と呼びます。複数行の文字列や「1+3」の計算結果「4」も値です。
これらの値は、当たり前ですが1つのソースコードに同じものが何度も出てきたり、あるいは値そのままの形では何とも不便な場合があります。
例を挙げてみましょう。
print(1+3) #4
これは1という値と3という値を足し合わせた計算結果として4という値が得られるコードですが、例えば同じコード内で、この4にさらに2を掛けたいというような場合どうすればいいでしょう?
このコードには答えの4を再び呼び出す手段がありません。4はそのままターミナル上で出力されてしまい、このコードの中では4を再利用することができない状態です。
そこで別名を用意しましょう。変数名 = 値とすることで、変数を作ることができます。
answer = 1+3
print(answer) #4
print(answer*2) #8
この場合、1+3の結果としての値4は一旦「answer」という名前の別名が付けられます。これが変数です。
次の行ではこの別名の名前をコールすることで、1+3の結果が得られます。1+3の結果はあらかじめ別名を付けているため、「answer」を呼び出しさえすれば何度でも使用することができます。
また単純に長い文字列を何度も打ち込むのが面倒であれば、これも変数という別名を付けて呼びやすくしてしまいましょう。
hello = "こんにちは。プログラミング日和のぷーおんです。"
print(hello+"よく佐藤健に間違えられます。")
print(hello+"身長はディーン・フジオカと同じです。")
#こんにちは。プログラミング日和のぷーおんです。よく佐藤健に間違えられます。
#こんにちは。プログラミング日和のぷーおんです。身長はディーン・フジオカと同じです。
・ 変数とは値の別名である
・ 変数名 = 値 とすることで変数を作ることができる。
・ 値に別名を付けることを「代入」、「=」を代入演算子と呼ぶ
変数の命名規則
次に変数の命名(名前付け)についてみていきましょう。
命名については基本的に自由ですが、いくつかの決まりごとがあります。
- 英数字、アンダースコア(_)のみを使用する
- 小文字を使用する (大文字と小文字は区別される)
- 1文字目に数字は使えない
- 単語を繋げる場合はアンダースコアを使用する
- Pythonが既に使用している予約語(キーワード)は使用できない
この中で3と5以外は守らなくても即エラーにはなりませんが、例えば平仮名などの2バイト文字を変数名で使用するのはナンセンスです。
またチームで開発する場合などはこのようなルールにできる限り従うことで、よりスムーズな開発が行なえます。
wareware = "宇宙人だ" #OK
われわれ = "宇宙人だ" #2バイト文字は非推奨
day6 = 6 #OK
15days = "360時間" #SyntaxError: invalid syntax
PYTHON = 3.8 #大文字は非推奨だが、定数の場合はこの限りではない
good_morning = "おはよう" #OK
goodMorning = "おはよう" #Pythonでは非推奨
True = "唐沢美帆" #SyntaxError: cannot assign to True
true = "唐沢美帆" #予約語と同じ単語のため非推奨だが、エラーにはならない
Pythonの予約語(キーワード)一覧
ここに並んでいる語はPythonが処理やデータ型などで既に使用している予約語のため、変数などに使用することができません。
大文字小文字を変更すれば無理矢理使えますが非推奨です。使わないに越したことはありません。
and | as | assert | async | await |
break | class | continue | def | del |
elif | else | except | finally | for |
from | global | if | import | in |
is | lambda | nonlocal | not | or |
pass | raise | return | try | while |
with | yield | False | None | True |
値の再代入
「変数」というからには値を変化させることができます。逆に一度入った中身が変わらないものを「定数」と呼びますが、Python標準の機能では完全な定数をユーザーが作ることができません。
慣例として全て大文字の変数を定数としていますが、これも完全な定数ではなく、値の変更は可能となっています。
変数の値を変更することを値の再代入といいますが、基本的には非常に簡単です。例を見ていきましょう。
a = 10
print(a)
a = 20
print(a)
#10
#20
上の例では変数aに10を代入して出力し、その後に20を代入し直しています。このように違う値を代入し直せば、その変数の中身を変更することができます。これが再代入です。
さらに違うデータ型を再代入してしまうことも可能になっています。
a = 10
print(a)
a = "文字列を代入してみる"
print(a)
#10
#文字列を代入してみる
プログラミング言語によってはこの挙動はエラーになりますが、Pythonはこのあたりが非常に緩い言語であり、変数は再代入によって「データ型すらも変化する可能性がある」言語です。
色々な代入
では他の代入例も見ていきましょう。これもポピュラーで簡単な例です。
a = 10
b = 20
c = a+b
print(c) #30
2つの変数同士で計算を実行し、その結果を新たな変数cにそのまま代入しています。
a = 10
b = 20
a = a+b
print(a) #30
こちらは再代入。この場合、4行目以降では変数aの値はa+b=30に変更されます。
インクリメント、デクリメント
再代入で最もよく使われるのはこのような形ではないでしょうか。
a = 0
for i in range(10):
print(i)
a = a+1
意味は分からなくてかまいませんが、コードをコピーして実行すれば、何をしているのかなんとなく分かるはず。
ここでは一番下の行に注目します。この「a = a+1」は、「自分自身に1を足す」という処理です。
こういった繰り返し処理の中で、数が一定量ずつ増えていく変数を「カウンタ変数」などと呼びますが、プログラミングしていると嫌というほど出てきます。
なのでもっと省略した書き方が用意されています。今のうちにご紹介しましょう。
a = 0
a = a+1 #自分自身に1を足す
print(a)
a += 1 #これも同じ
print(a)
a -= 1 #自分自身から1を引く
print(a)
#1
#2
5行目では「a += 1」と表記していますが、これは上の書き方と同じ意味になります。
この「+=」を、増加させるということでインクリメント、+が-になると逆に減少させるデクリメントと呼ばれます。
ちなみに「*=」や「/=」もあります。色々と試してみてください。
「a++」や「a–」といった演算子は、Pythonには実装されていないので注意しましょう。