Pythonの変数
Basic Data Types in Pythonに関する前のチュートリアルでは、さまざまなPythonデータ型の値を作成する方法を説明しました。 しかし、これまでのところ、表示されている値はすべてリテラル値または定数値です。
>>>
>>> print(5.3)
5.3
より複雑なコードを記述している場合、プログラムには、プログラムの実行が進むにつれて変化するデータが必要です。
Here’s what you’ll learn in this tutorial: Pythonプログラムのすべてのデータ項目を抽象用語objectで記述する方法と、variablesと呼ばれる記号名を使用してオブジェクトを操作する方法を学習します。
無料のPDFダウンロード: Python3チートシート
__ Take the Quiz:インタラクティブな「Python変数」クイズで知識をテストします。 完了すると、学習の進捗状況を経時的に追跡できるようにスコアを受け取ります。
変数の割り当て
変数は、特定のオブジェクトに付けられた名前と考えてください。 Pythonでは、他の多くのプログラミング言語の場合のように、変数を事前に宣言または定義する必要はありません。 変数を作成するには、値を割り当ててから使用を開始します。 割り当ては、単一の等号(=
)で行われます。
>>>
>>> n = 300
これは、「n
には値300
が割り当てられている」と読み取られるか解釈されます。これが完了すると、n
をステートメントまたは式で使用でき、その値が置き換えられます。
>>>
>>> print(n)
300
リテラル値がREPLセッションのインタープリタープロンプトからprint()
を必要とせずに直接表示できるのと同様に、変数も次のようになります。
>>>
>>> n
300
後で、n
の値を変更して再度使用すると、代わりに新しい値に置き換えられます。
>>>
>>> n = 1000
>>> print(n)
1000
>>> n
1000
Pythonでは、連鎖代入も可能です。これにより、同じ値を複数の変数に同時に割り当てることができます。
>>>
>>> a = b = c = 300
>>> print(a, b, c)
300 300 300
上記の連鎖割り当ては、300
を変数a
、b
、およびc
に同時に割り当てます。
Pythonの変数タイプ
多くのプログラミング言語では、変数は静的に型付けされます。 つまり、変数は特定のデータ型を持つように最初に宣言され、その有効期間中に変数に割り当てられる値は常にその型を持つ必要があります。
Pythonの変数はこの制限を受けません。 Pythonでは、変数に1つの型の値を割り当ててから、後で別の型の値を再割り当てできます。
>>>
>>> var = 23.5
>>> print(var)
23.5
>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string
オブジェクト参照
変数を割り当てたときに実際に何が起こっていますか? これはPythonでの重要な質問です。答えは他の多くのプログラミング言語で見られるものとは多少異なるためです。
Pythonは非常にobject-oriented languageです。 実際、Pythonプログラムのほぼすべてのデータ項目は、特定のタイプまたはクラスのオブジェクトです。 (この点は、これらのチュートリアルの過程で何度も繰り返されます。)
このコードを見てください:
>>>
>>> print(300)
300
ステートメントprint(300)
が提示されると、インタプリタは次のことを行います。
-
整数オブジェクトを作成します
-
値
300
を与えます -
コンソールに表示します
組み込みのtype()
関数を使用して整数オブジェクトが作成されていることがわかります。
>>>
>>> type(300)
Python変数は、オブジェクトへの参照またはポインターであるシンボリック名です。 オブジェクトが変数に割り当てられると、その名前でオブジェクトを参照できます。 ただし、データ自体はまだオブジェクト内に含まれています。
例えば:
>>>
>>> n = 300
この割り当てにより、値300
の整数オブジェクトが作成され、そのオブジェクトを指すように変数n
が割り当てられます。
次のコードは、n
が整数オブジェクトを指していることを確認します。
>>>
>>> print(n)
300
>>> type(n)
ここで、次のステートメントを検討してください。
>>>
>>> m = n
実行されるとどうなりますか? Pythonは別のオブジェクトを作成しません。 n
が指すのと同じオブジェクトを指す新しいシンボリック名または参照m
を作成するだけです。
次に、これを行うと仮定します。
>>>
>>> m = 400
これで、Pythonは値400
で新しい整数オブジェクトを作成し、m
がそのオブジェクトへの参照になります。
最後に、次のステートメントが次に実行されると仮定します。
>>>
>>> n = "foo"
これで、Pythonは値"foo"
の文字列オブジェクトを作成し、n
にそれを参照させます。
整数オブジェクト300
への参照はもうありません。 孤立しているため、アクセスする方法はありません。
このシリーズのチュートリアルでは、オブジェクトの存続期間について言及する場合があります。 オブジェクトの寿命は作成されたときに始まり、その時点で少なくとも1つの参照が作成されます。 オブジェクトの存続期間中に、上で見たようにオブジェクトへの追加の参照が作成される場合があります。また、オブジェクトへの参照も削除される場合があります。 オブジェクトへの参照が少なくとも1つある限り、オブジェクトは存在し続けます。
オブジェクトへの参照の数がゼロになると、そのオブジェクトにはアクセスできなくなります。 その時点で、その寿命は終わりました。 Pythonは最終的にアクセスできないことに気付き、割り当てられたメモリを再利用して、他の何かに使用できるようにします。 コンピューター用語では、このプロセスはgarbage collectionと呼ばれます。
オブジェクトのアイデンティティ
Pythonでは、作成されるすべてのオブジェクトには、それを一意に識別する番号が付けられます。 ライフタイムが重複する期間中、2つのオブジェクトが同じ識別子を持つことはありません。 上記の300
オブジェクトで発生したように、オブジェクトの参照カウントがゼロになり、ガベージコレクションが行われると、その識別番号が使用可能になり、再び使用できるようになります。
組み込みのPython関数id()
は、オブジェクトの整数識別子を返します。 id()
関数を使用すると、2つの変数が実際に同じオブジェクトを指していることを確認できます。
>>>
>>> n = 300
>>> m = n
>>> id(n)
60127840
>>> id(m)
60127840
>>> m = 400
>>> id(m)
60127872
割り当てm = n
の後、m
とn
は両方とも同じオブジェクトを指し、id(m)
とid(n)
が同じ番号を返すという事実によって確認されます。 m
が400
に再割り当てされると、m
とn
は異なるIDを持つ異なるオブジェクトを指します。
ディープダイブ:小さな整数値のキャッシュ
Pythonでの変数の割り当てとオブジェクト参照についての現在の知識から、次のことはおそらく驚くことではありません。
>>>
>>> m = 300 >>> n = 300 >>> id(m) 60062304 >>> id(n) 60062896
ステートメント
m = 300
を使用して、Pythonは値300
の整数オブジェクトを作成し、それへの参照としてm
を設定します。 次に、n
は、値300
の整数オブジェクトに同様に割り当てられますが、同じオブジェクトには割り当てられません。 したがって、それらは異なるIDを持ち、id()
によって返される値から確認できます。しかし、これを考えてください。
>>>
>>> m = 30 >>> n = 30 >>> id(m) 1405569120 >>> id(n) 1405569120
ここで、
m
とn
は、値30
を持つ整数オブジェクトに個別に割り当てられます。 ただし、この場合、id(m)
とid(n)
は同じです。最適化の目的で、インタープリターは起動時に
[-5, 256]
の範囲の整数のオブジェクトを作成し、プログラムの実行中にそれらを再利用します。 したがって、この範囲の整数値に個別の変数を割り当てると、実際には同じオブジェクトを参照します。
変数名
これまで見てきた例では、m
やn
などの短く簡潔な変数名を使用しています。 ただし、変数名はより冗長な場合があります。 実際、それが変数の目的を一見してより明らかにするので、それらが通常有益です。
公式には、Pythonの変数名は任意の長さにすることができ、大文字と小文字(A-Z
、a-z
)、数字(0-9
)、およびアンダースコア文字(_
)で構成できます。 s)。 追加の制限として、変数名には数字を含めることができますが、変数名の最初の文字を数字にすることはできません。
Note: Python 3への追加の1つは、完全なUnicodeサポートでした。これにより、変数名にもUnicode文字を使用できます。 ユニコードについては、今後のチュートリアルでさらに詳しく学習します。
たとえば、次のすべては有効な変数名です。
>>>
>>> name = "Bob"
>>> Age = 54
>>> has_W2 = True
>>> print(name, Age, has_W2)
Bob 54 True
しかし、変数名は数字で始めることができないため、これはそうではありません。
>>>
>>> 1099_filed = False
SyntaxError: invalid token
大文字と小文字が区別されることに注意してください。 小文字と大文字は同じではありません。 アンダースコア文字の使用も重要です。 以下のそれぞれが異なる変数を定義します。
>>>
>>> age = 1
>>> Age = 2
>>> aGe = 3
>>> AGE = 4
>>> a_g_e = 5
>>> _age = 6
>>> age_ = 7
>>> _AGE_ = 8
>>> print(age, Age, aGe, AGE, a_g_e, _age, age_, _AGE_)
1 2 3 4 5 6 7 8
同じプログラムでage
とAge
、さらに言えばagE
と呼ばれる2つの異なる変数を作成することを妨げるものは何もありません。 しかし、おそらく賢明ではありません。 しばらく離れると、コードを読み取ろうとしている人、さらには自分自身を混乱させる可能性があります。
変数に使用目的を明確にするのに十分な説明的な名前を付けることは価値があります。 たとえば、大学を卒業した人の数を集計しているとします。 おそらく次のいずれかを選択できます。
>>>
>>> numberofcollegegraduates = 2500
>>> NUMBEROFCOLLEGEGRADUATES = 2500
>>> numberOfCollegeGraduates = 2500
>>> NumberOfCollegeGraduates = 2500
>>> number_of_college_graduates = 2500
>>> print(numberofcollegegraduates, NUMBEROFCOLLEGEGRADUATES,
... numberOfCollegeGraduates, NumberOfCollegeGraduates,
... number_of_college_graduates)
2500 2500 2500 2500 2500
それらはすべて、n
やncg
などよりもおそらく良い選択です。 少なくとも、変数の値が何を表すのかを名前から知ることができます。
一方、必ずしもすべてが等しく読みやすいわけではありません。 多くのことと同様に、それは個人的な好みの問題ですが、ほとんどの人は、文字がすべて一緒に押し込まれている最初の2つの例を読むのが難しく、特にすべて大文字の場合を見つけるでしょう。 複数ワードの変数名を作成する最も一般的に使用される方法は、最後の3つの例です。
-
Camel Case: 2番目以降の単語は大文字で表記され、単語の境界が見やすくなっています。 (おそらく、変数名全体に大文字が散らばってラクダのこぶによく似ていると、ある時点で誰かを驚かせたでしょう。)
-
例:
numberOfCollegeGraduates
-
-
Pascal Case:最初の単語も大文字になっていることを除いて、キャメルケースと同じです。
-
例:
NumberOfCollegeGraduates
-
-
Snake Case:単語はアンダースコアで区切られます。
-
例:
number_of_college_graduates
-
プログラマーは意外な熱意を持って熱い議論をしていますが、どちらが望ましいかです。 それらすべてについて、適切な議論を行うことができます。 3つのうち、視覚的に最も魅力的なものを使用してください。 いずれかを選択して、一貫して使用します。
名前を指定できるのは変数だけではないことが後でわかります。 関数、クラス、モジュールなどに名前を付けることもできます。 変数名に適用される規則は、プログラムオブジェクトに与えられる名前のより一般的な用語である識別子にも適用されます。
PEP 8とも呼ばれるStyle Guide for Python Codeには、さまざまなオブジェクトタイプの名前の推奨標準を一覧表示するNaming Conventionsが含まれています。 PEP 8には次の推奨事項が含まれています。
-
関数と変数名にはSnake Caseを使用する必要があります。
-
クラス名にはパスカルケースを使用する必要があります。 (PEP 8ではこれを「CapWords」規則と呼んでいます。)
予約語(キーワード)
識別子名にはもう1つの制限があります。 Python言語では、特別な言語機能を指定する小さなキーワードセットが予約されています。 オブジェクトには予約語と同じ名前を付けることはできません。
Python 3.6には、33個の予約キーワードがあります。
Python キーワード |
|||
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
このリストは、Pythonインタープリターにhelp("keywords")
と入力することでいつでも表示できます。 予約語は大文字と小文字が区別され、示されているとおりに使用する必要があります。 False
、None
、およびTrue
を除いて、これらはすべて完全に小文字です。
予約語と同じ名前の変数を作成しようとすると、エラーが発生します。
>>>
>>> for = 3
SyntaxError: invalid syntax
結論
このチュートリアルでは、オブジェクトの参照とID、Python識別子の命名など、Pythonvariablesの基本について説明しました。
これで、Pythonのデータ型のいくつかを十分に理解し、それらの型のオブジェクトを参照する変数を作成する方法を理解できました。
次に、さまざまなoperationsを含むexpressionsにデータオブジェクトを組み合わせる方法を説明します。
__ Take the Quiz:インタラクティブな「Python変数」クイズで知識をテストします。 完了すると、学習の進捗状況を経時的に追跡できるようにスコアを受け取ります。