Pythonの基本構文である「 変数の扱い方 」に関して、現役エンジニアである筆者が解説いたします。分かりやすく説明できるように心がけ、理解を助ける図解を用いて説明しました。
この記事を読めば、変数宣言から命名規則まで、学べる内容となっております。下記目次から該当の項目に飛べます!
Python 変数の様々な扱い方
変数とは何か
変数(variable)とは、名前がついた入れ物です。様々な値を変数に代入することができ、その区別をするために変数に名前を付けます。
例えば以下の例で例えるなら、文字: 「 Python 」を変数に代入することによって、値を格納する事が可能となります。
変数に文字を代入すれば、その変数は「 文字列型 」となりますし、数値を代入すれば「 数値型 」になります。このように、変数の方によってデータ型を判断するためPythonは動的型付け言語と呼ばれます。
上記の例は、変数「 name 」に小林を代入し、変数「 number 」に数値を代入した例です。こちらをコードで書くと以下のようになります。
# シングルクォーテーション「'」またはダブルクォーテーション「"」で囲む
name = "小林"
number = 5
ただ、このままだと、変数に値を代入しただけですので、変数の中身を取り出したいと思います。その場合は「 print() 」 と呼ばれる関数を使います。
print(name)
print(number)
実行してみましょう。
# 実行結果
小林
5
無事、変数の中身を取り出すことが出来ました。一般的に変数はこのように使用していきます。
様々な変数の代入の仕方
単純な代入
num = 10
複数の変数への同時代入
num_1, num_2, num_3 = 1, 2, 3
print(num_1)
print(num_2)
print(num_3)
変数と変数の間に「 , 」を入れて区切る事により、複数の変数へ同時に代入する事が可能です。それでは、実行結果を見てみましょう。
# 実行結果
1
2
3
他の変数からの代入
name_1 = "小林"
name_2 = name_1
print(name_2)
変数「 name_1 」に「 小林 」が代入されています。代入されている変数を変数「 name_2 」に代入すると、変数「 name_1 」の値を代入することが出来ます。
# 実行結果
小林
複数の変数への同じ値の代入
それぞれの名前の違う変数に同じ値を代入する事ができます。
no_1 = no_2 = no_3 = 100
print(no_1)
print(no_2)
print(no_3)
上記で代入したそれぞれの変数に「 100 」という値が代入されています。
# 実行結果
100
100
100
【複合データ型】リストやタプルからの拡張代入
変数の型の話を前途で記述していますが、リストやタプルは、「 複合データ型 」といいます。「 リスト型 」や「 タプル型 」と呼ばれます。そういった型に代入された値をそれぞれの変数に代入する事が出来ます。
name_data = ["小林", "田中", "佐藤"]
name_koba, name_tanaka, name_sato = name_data
print(name_koba)
print(name_tanaka)
print(name_sato)
上記の例ではリスト型の変数「 name_data 」に3つの要素である「 小林 」「 田中 」「 佐藤 」が格納されています。その3つの要素を変数「 name_koba 」「 name_tanaka 」「 name_sato」にそれぞれ代入する事が出来ます。
それでは、実行結果を見てみましょう。
# 実行結果
小林
田中
佐藤
【複合データ型】辞書からの代入
辞書からキーに対応する値を変数に代入する事ができます。
person = {"person_name" : "小林", "age" : 18}
name = person["person_name"]
age = person["age"]
print(name)
print(age)
# 実行結果
小林
18
辞書とはキーと値のペアを保持するデータ構造を指すデータ型です。今回は変数の値の代入に念頭を置いておりますので、辞書に関しての詳細は割愛します。プログラムの流れは下記に載せておきます。
変数の初期化と未定義の表現
変数の初期化をする場合は下記のように、変数の値に「 None 」を代入する事で初期化が出来ます。下記の状態は他のプログラミング言語でいうところの 「 null 」や 「 undefined 」に相当します。
n = None
print(n)
# 実行結果
None
変数の値をリセットする
変数の値を明示的に「 空 」にする場合は「 None 」を代入すれば、変数の値がリセットされます。
num = 50
num = None
print(num)
# 実行結果
None
宣言した変数の削除
Pythonの「 del 」ステートメントを使用する事で、宣言した変数を削除する事ができます。宣言した変数を削除する理由や目的に関しては後述していますので、知りたい方は開いてご覧ください。
name = "小林"
print(name)
del name
print(name)
# 実行結果
print(name)
# エラー
NameError: name 'name' is not defined
上記の実行結果は、変数「 name 」に値を代入し「print()メソッド」で出力しています。そのあとに「 del 」 ステートメントで宣言した変数を削除しているため、エラーが出ています。
この「 NameError 」というエラーは、「 name 」という変数は「 未定義 」というエラーです。つまり、変数を出力しようとしましたが、そのような変数が見つかりませんよ!と怒られてます。
メモリ管理の最適化: 変数を不要になったタイミングで削除することで、プログラムのメモリ使用量を最適化することができます。特に大きなデータ構造や多数の変数が関与する場合には、不要なデータを削除することでシステムのパフォーマンスが向上する場合があります。
名前空間の整理: 変数を削除することで、名前空間を整理し、プログラムの可読性を向上させることができます。不要な変数が残っていると、後でその変数が何に使われていたのかを理解するのが難しくなることがあります。
リソースの解放: 特定のリソース(例えばファイルハンドルやネットワーク接続など)を使用している場合、それらのリソースを明示的に解放するために、関連する変数を削除することが重要です。これにより、プログラムのリソース管理を正確に行うことができます。
セキュリティの向上: 不要な変数やデータが残っていると、それを悪意のあるコードが利用する可能性があります。変数を削除することで、データの不用意な漏洩を防ぐことができます。
変数の再利用を防止: 変数を削除することで、それ以降その変数名を再利用することができないようになります。このようにして、間違ったデータが誤って再利用される可能性を減らすことができます。
Pythonの定数の変数宣言
まずは定数の説明をする前に前置きとして、変数の上書きに関して説明します。(変数の再代入とも言います。)一般的に変数は宣言し値を代入した段階で、値が確定します。しかし、同じ変数に再度、別の値を代入すると、前回代入した値を上書きして、値を更新する事が出来ます。
name = "小林"
name = "木村"
print(name)
# 実行結果
木村
基本的に変数は再代入が可能という事を念頭に置いたうえで、定数の説明に入ります。
定数とは、「 再代入が出来ない変数 」と言えると思います。他のプログラミング言語においては、定数を宣言するための型がありますが、Pythonにおいては、厳密に定数を宣言する型がありません。従って、定数としての振る舞いを実現するために以下のように記述する事で、「 定数を定義した 」とする慣習があります。
NAME = "小林"
全てを大文字で変数を宣言すると、「 定数ですよ 」という意味になります。全て大文字で変数を宣言する事をアッパーケースと言います。こちらに関しては変数の命名規則で後述しておりますのでご覧ください。
変数の命名規則
- 変数名は、英字(大文字・小文字)やアンダースコア
_
、数字(ただし先頭に数字は使用できない)を組み合わせて構成します。 - 変数名はアルファベットまたはアンダースコア
_
で始める必要があります。 - 例外として、Pythonの特別な用途で使われる変数名は
_
から始まることがありますが、通常の変数名としては推奨されません。 - 変数名には予約語を使うことはできません。予約語とはPython言語が特別に意味付けしている単語のことです。
Pythonの予約語は特別な意味があるため、変数名や関数名として使用する事は出来ません。以下が予約語一覧です。
False await else import pass
None break except in raise
True class finally is return
and continue for lambda try
as def from nonlocal while
assert del global not with
async elif if or yield
変数命名の主要な付け方/スタイル
ロワーケース
person_name
小文字とアンダースコアを使って、複数の単語を組み合わせる命名。
アッパーケース
PERSON_NAME
定数を定義する場合に使用することが多いです。
キャメルケース/アッパーキャメルケース
#キャメルケース
personName
#アッパーキャメルケース
PersonName
主に「 クラス名 」など特定の命名に使用される。
上記のように、スタイルを適宜、用途ごとに使用することにより、コーディング規約が守られ、見やすいコードでプログラムを構成する事ができます。
以上です。お読みいただきありがとうございました。
コメント