はじめに
前回は、プログラミングの基本構造である「順次進行」「条件分岐」「繰り返し」について解説しました。
第4回目の今回は、変数という概念について学んでいきます。
プログラミングを学ぶ上で、変数はよく登場する仕組みのひとつです。
現時点では、まったくピンとこないかもしれませんが、この仕組みを知っておくことで、コードを書く際に便利さを実感できるはずです。
この記事では、Pythonを使ったプログラミングの中でよく使われる「変数」について、解説していきます。
仕組みや使い方を少しずつ理解しながら、プログラムを書く楽しさを感じてみましょう。初心者の方でもわかりやすいように、実例を交えながら進めていきますので、気軽に読み進めてみてください。
変数とは
変数は、プログラムの中でデータを一時的に保管しておく「名札のついたロッカー」のようなものです。このロッカーには名前が付いているため、中に何が入っているかは名札を確認するだけでわかります。また、中身を新しいデータに入れ替えたり、取り出して使うこともできます。
たとえば、「num」という名前のロッカーを用意して、その中に数字の「5」を入れたとします。このとき、「num」を呼び出すと中に入っている「5」が取り出せます。また、あとから「num」の中身を「10」に変更すると、今度は「num」を呼び出すと「10」が取り出せるようになります。
具体的には、以下のように書きます。
num = 5 # numという名前のロッカーに5を入れる
print(num) # numの中身を取り出して表示する
num = 10 # numの中身を10に変更する
print(num) # numの新しい中身を取り出して表示する
このプログラムを実行すると、最初に「5」が表示され、その後「10」が表示されます。
このように、変数を使うことでデータを自由に管理したり操作したりできるようになります。プログラムを組み立てるうえでとても便利な仕組みです。次のセクションでは、変数を使うときのルールや注意点について解説していきます。
Pythonでの変数の宣言と代入
プログラムの中で変数を使うためには、まず「宣言」と「代入」という2つの操作が必要です。それぞれが何を意味するのかをわかりやすく説明していきます。
変数の宣言とは
「宣言」とは、プログラムの中で「ここに新しい変数を作ります」と宣言することです。たとえば、学校で新しいロッカーを割り当ててもらうとき、「私のロッカーの名前はAにします」と決めるようなものです。
Pythonでは、他のプログラミング言語と異なり、特別な準備をすることなく変数を宣言できます。変数の名前を決めるだけでなく、後述する「代入」とセットで行われることが多いのが特徴です。
# Pythonでは、変数名を決めるだけで宣言が完了
x = 0 # ここでxという変数を宣言し、後述の代入も同時に行っている
変数への代入とは
「代入」とは、宣言した変数に具体的な値(データ)を入れる操作のことです。たとえば、ロッカーに「教科書」や「ノート」を入れるような作業に相当します。
Pythonでは、「=」を使ってデータを変数に代入します。イコールは「同じ」という意味ではなく、「右側のデータを左側の変数に入れる」という指示を表します。
以下の例を見てください。
num = 5 # numという変数を作り、その中に5を代入する
このコードでは、変数num
を作り(宣言)、同時にその中に5
を代入しています。
宣言と代入を同時に行う場合
Pythonでは、ほとんどの場合、宣言と代入が同時に行われます。以下はその例です。
name = "太郎" # nameという変数を作り、「太郎」を代入
age = 15 # ageという変数を作り、15を代入
このように、変数を作りつつ値を代入することで、効率よくデータを管理できます。
※変数には数値(例:15)だけでなく、文字列(例:「太郎」)も入れることができます。
これは、Pythonがさまざまな種類のデータ型に対応しているためです。
データ型とは、データがどのような種類であるかを表すもので、例えば整数、文字列、浮動小数点数などがあります。データ型については次回の講座記事で詳細を解説する予定ですので、今はプログラミングで取り扱うデータには種類が別れているんだ、程度に思っておいてください。。
また、同じ変数に何度でも値を入れ直すことができる点も便利です。
num = 5 # numに5を代入
num = 10 # numの中身を10に変更
print(num) # numの最新の中身を表示する
このプログラムを実行すると、最初にnumには5が代入されますが、その後に10が代入されます。
そのため、最後にprint(num)と実行すると、numには最新の値である10が表示されます。このように変数には新しい値をどんどん上書きすることができ、常に最新の情報を保持することができます。
変数の値を変更することで、様々な計算や処理に対応できるようになります。
=と==の違い
ここで注意してほしいのが、「=」と「==
」の違いです。初めて見ると紛らわしいかもしれませんが、役割は全く異なります。
- 「=」は代入のために使います。「このデータをこの変数に入れる」という意味です。
- 例:
num = 5
は「numに5を代入する」という指示です。
- 例:
- 「==」は「等しいかどうか」を確認するために使います。「左側と右側が同じかどうか」をチェックするための記号です。
- 例:
num == 5
は「numの中身が5と同じか?」を調べます。
- 例:
以下のコードで違いを見てみましょう。
num = 5 # numという変数に5を代入
print(num == 5) # numの中身が5と等しいかどうかを調べて表示
このプログラムを実行すると、結果は「True」と表示されます。ここで「True」というのは、条件が正しいことを示す特別な値です。このような値を「bool値(ブール値)」と呼びます。
bool値には「True(真)」と「False(偽)」の2種類があり、何かが正しいかどうかを判断する際に使います。bool値については次回の講座記事で詳細に解説する予定ですが、ここでは「条件が満たされているかどうか」を示すものだと覚えておいてください。
一方で、次のコードは少し違います。
num = 5 # numに5を代入
num == 10 # これは比較するだけで、何も変数に代入しません
このコードではnumの中身は変わりません。「=」が使われていないので、新しいデータを代入する指示がないためです。
実際に試してみる
以下のコードを実行すると、=
と==
の違いを確かめられます。
num = 8 # numという変数に8を代入
print("numの中身は:", num) # numの中身を表示
print(num == 8) # numが8と等しいかどうかを調べる
print(num == 10) # numが10と等しいかどうかを調べる
num = 10 # numに10を代入し直す
print("新しいnumの中身は:", num)
この結果は「True」または「False」というbool値(ブール値)で表示されます。
※繰り返しになりますが、bool値については次回の講座記事で詳しく解説予定です。ここでは「条件が正しい場合はTrue、間違っている場合はFalse」と理解しておけば大丈夫です。
結果を実行してみると、以下のように表示されます。
numの中身は: 8
True
False
新しいnumの中身は: 10
この結果を見れば、=
は変数にデータを入れるために使い、==
は中身を比較するために使うことがわかります。変数を操作する際には、この違いをしっかり理解しておくことが大切です。
変数名のルール
プログラムで変数を使う際には、名前を自由につけることができます。ただし、自由といってもいくつかのルールがあり、これを守らないとエラーになったり、プログラムが意図した通りに動かなくなったりします。
ここでは、Pythonで変数名をつけるときのルールを順に説明していきます。
変数名で使える文字
変数名には次の3種類の文字が使えます。
- アルファベット(a~z、A~Z)
- 数字(0~9)
- アンダースコア(_)
ただし、変数名の最初の文字を数字にすることはできません。最初の文字が数字だと、プログラムが変数なのか数字そのものなのかを区別できなくなるためです。
例を見てみましょう。
x = 10 # OK: xはアルファベット
_name = "太郎" # OK: アンダースコアで始まっている
age2 = 15 # OK: 数字が途中にある
2age = 15 # エラー: 数字で始めている
記号やスペースは使えない
変数名には、記号(例えば、$
や-
)やスペースを含めることはできません。
name-with-hyphen = "太郎" # エラー: ハイフンは使えない
name with space = "太郎" # エラー: スペースも使えない
大文字と小文字は区別される
Pythonでは、変数名の大文字と小文字を区別します。つまり、name
とName
は別々の変数として扱われます。
以下の例を見てください。
name = "太郎"
Name = "花子"
print(name) # 太郎が表示される
print(Name) # 花子が表示される
予約語は使えない
Pythonには「予約語」と呼ばれる特別な単語があり、これらは変数名に使うことができません。予約語は、Pythonが特定の命令や機能を実現するためにすでに使用しているためです。
例えば、if
やfor
、return
などは予約語に含まれます。以下のコードはエラーになります。
if = 10 # エラー: ifは予約語なので使えない
for= 5 # エラー: forは予約語なので使えない
予約語の一覧を確認するには、次のコードを使います。
import keyword
print(keyword.kwlist)
これを実行すると、Pythonで使用されている予約語が一覧として表示されます。初めのうちはすべて覚える必要はありませんが、「予約語は変数名に使えない」というルールだけ覚えておきましょう。
実際に試してみよう
以下のコードは、変数名のルールを確認するための例です。試しに実行してみてください。
# 正しい変数名
age = 18
_student_name = "太郎"
totalAmount = 1000
print(age) # 18を表示
print(_student_name) # 太郎を表示
print(totalAmount) # 1000を表示
# エラーになる変数名
# 2name = "エラー" # 数字で始めている(コメントアウトしてエラー回避)
# total-amount = 5000 # ハイフンを含む(コメントアウトしてエラー回避)
このプログラムを実行すると、正しい変数名では問題なく結果が表示されますが、エラーになる変数名ではエラーが出ます。このようにルールを意識することで、エラーを防ぎ、スムーズにプログラムを作ることができます。
変数の参照とオブジェクトID
変数を理解するためには、「変数が指し示しているもの」について知ることが大切です。Pythonでは、変数は単なる「名前」ではなく、値が保存されている「場所」を指し示しています。この仕組みを知ることで、プログラムの動きを正しく理解できるようになります。
変数の参照とは
変数はデータそのものを直接持っているわけではありません。代わりに、データが保存されている場所を指し示しています。この指し示す仕組みを「参照」と呼びます。
たとえば、「a = 10」というコードを書くと、「a」という変数は「10」という値が保存されている場所を指しています。もし「a」に別の値を代入した場合、元々の「10」が置き換えられるのではなく、新しい値が保存された別の場所を指し示すようになります。
以下の例を見てください。
a = 10 # aが10を指し示す
b = a # bも10を指し示す
a = 20 # aが新しい値20を指し示す
print("aの中身:", a) # 20
print("bの中身:", b) # 10
このコードを実行すると、a
には20
、b
には10
が入っています。b
がa
に追随せず元の値を保持していることがポイントです。これは、b
がa
の値そのものではなく、a
が指していた場所をコピーしているためです。
オブジェクトIDとは
Pythonでは、すべてのデータに固有の「ID」が割り振られています。このIDは、データが保存されている「場所」を特定するためのものです。変数がどのデータを参照しているかを知るために、id
関数を使ってこのIDを確認することができます。
id
関数は、変数が参照しているデータの固有のIDを取得するための関数です。関数とは、プログラムの中で特定の作業をするための「ツール」のようなものです。id
関数はその一例で、他にも多くの便利な関数がPythonには用意されています。
※関数についての詳細は後日の講座記事で解説しますので、今は「id
関数はデータの固有IDを確認するためのツール」と理解しておきましょう。
以下のコードで、変数が指し示しているIDを確認してみましょう。
a = 10 # aが10を指し示す
print("aのID:", id(a)) # aのIDを表示
b = a # bも10を指し示す
print("bのID:", id(b)) # bのIDを表示(aと同じIDになる)
a = 20 # aが新しい値20を指し示す
print("aのID:", id(a)) # 新しいIDに変わる
print("bのID:", id(b)) # bのIDは変わらない
実行結果は次のようになります。
aのID: 12345678 # 実際のIDは環境によって異なります
bのID: 12345678 # aと同じID
aのID: 87654321 # 新しい値20のID
bのID: 12345678 # 変わらない
この結果から、a
の値を変更したときにIDも変わること、そしてb
が元々の値を保持していることがわかります。
実際に試してみる
以下のコードを実行して、変数の参照やIDの動きを確認してみましょう。
# 初期化
x = 5
y = x
# IDを確認
print("xの中身:", x, "ID:", id(x))
print("yの中身:", y, "ID:", id(y))
# xの値を変更
x = 10
print("xの中身:", x, "ID:", id(x))
print("yの中身:", y, "ID:", id(y))
このプログラムでは、x
とy
が同じデータを指し示していること、x
の値を変更するとIDも変わることが確認できます。
補足:変数の参照の注意点(初学者の方は読まなくてOK)
変数の参照は便利ですが、以下のようなケースでは注意が必要です。リストや辞書、といったこの後の講座記事で出てくるような概念が出てくるので、プログラミングを勉強し始めたばかりの方は読み飛ばしてもらって大丈夫です。
リストや辞書などのデータ構造を扱う場合
リストや辞書など、複数のデータを持つ構造では、変数がそのデータ全体を指し示します。このため、別の変数に代入した場合でも、元のデータが変更されると新しい変数にも影響が及びます。
list1 = [1, 2, 3]
list2 = list1
list1.append(4)
print("list1:", list1) # [1, 2, 3, 4]
print("list2:", list2) # [1, 2, 3, 4] (list2にも影響)
値が変更可能かどうか(ミュータブル性)
Pythonでは、データ型によって値の変更が可能か(ミュータブル)不可能か(イミュータブル)が決まっています。例えば、リストや辞書は変更可能(ミュータブル)、整数や文字列は変更不可能(イミュータブル)です。この違いを理解することが、変数の正しい扱いに役立ちます。
変数の参照やオブジェクトIDを理解することで、Pythonがデータをどのように管理しているかを正しく把握できます。これにより、プログラムの挙動が予測しやすくなり、エラーを未然に防ぐことができます。
コメントアウトについて
コメントアウトとは、プログラムの一部を「処理しない」ようにする操作のことです。プログラムを書く際、実行されない説明やメモを残す目的で使用します。また、特定の部分を一時的に無効化してエラーの原因を特定する場合にも役立ちます。
Pythonでは、行の先頭に「#」を付けると、その行がコメントアウトされます。コメントアウトされた部分は実行されず、プログラムに影響を与えません。
以下の例を見てください。
# 以下はコメントアウトされた行です
# print("この行は実行されません")
# こちらは通常のコードで実行されます
print("この行は実行されます")
このコードを実行すると、「この行は実行されます」という結果だけが表示されます。
コメントアウトを使ってエラーを防ぐ
プログラムを書くとき、途中で間違ったコードを入れてしまうことがあります。その場合、エラーが発生してプログラムが停止します。どこが原因か分からないときには、コメントアウトを使って一部のコードを無効化し、原因を切り分けることができます。
以下はその例です。
# 正しいコード
x = 5
print(x)
# エラーが含まれるコード(コメントアウトして回避)
# y = "文字列" + 10 # 異なる型を足そうとしてエラーになる
このコードでは、エラーが発生する箇所をコメントアウトしてプログラムを実行することで、正常に動作する部分だけを動かせます。こうすることで、エラー箇所を特定しやすくなります。
まとめ
この記事では、Pythonプログラミングの基礎である「変数」について解説しました。変数の基本的な役割から、名前の付け方、データを管理する仕組み、さらにはエラーを防ぐためのコメントアウトの活用方法までを詳しく紹介しました。
変数は、プログラム内でデータを保管し、操作するための基本的な仕組みです。変数名のルールを守ることや、データがどのように参照されているのかを理解することで、より正確で効率的なプログラムを作ることができます。
今回の内容をおさらいすると、以下のようになります。
- 変数とは
データを一時的に保管しておく「名札のついたロッカー」のような役割を持つ。 - 変数名のルール
アルファベット、数字、アンダースコアのみ使用可能で、予約語や記号は使えない。また、大文字と小文字は区別される。 - 変数の参照とID
変数はデータそのものではなく、データが保存されている場所を指し示す仕組みを持つ。 - コメントアウトとエラー防止
コメントアウトを活用してコードを整理し、エラー箇所を特定する方法を学んだ。
次回は、今回紹介した内容をさらに深めるデータ型について取り上げる予定です。
※当サイトのメインコンテンツであるプログラミング言語MQL5の変数に関する規則については下記の記事をご参照ください。
今回は以上とさせていただきます。最後までお読みいただきありがとうございました。