変数を定義してその値を初期化すると、その値を後から変更できる。変数の値を変更するには、その変数に別の値を代入するだけだ。そこで、変数を使って円周と面積を求めたセルをクリックして、編集状態にしたら、次のコードを追加して、今度は半径を2として円周を求めてみよう。
PI = 3.14
r = 1
print(2 * PI * r)
print(PI * r ** 2)
r = 2
print(2 * PI * r)
実行結果を以下に示す。
既に定義されている変数への値の代入は、その変数の値を変更するのであって、「初期化」ではない。初回の変数への代入が「変数の定義と初期化」となることには注意しよう。
次に、半径を2から3にして、円の面積を求めることにしよう。これには、「r = 3」としてから、「PI * r ** 2」を計算してもよいが、せっかくなのでPythonが提供する「累算代入演算子」を使ってみる。
「累算代入演算子」は「左辺の値を使って(加減乗除などの)演算」をしてから「その結果を左辺に代入」するという2つの機能が1つの演算子に組み合わせられたものだ。例えば、「a += 1」は「a = a + 1」を省略して表記したものと考えられる。つまり、「a += 1」は「a + 1」という計算を行った後に、その結果を変数aに代入する(他の演算子も同様)。以下にPythonの累算代入演算子を幾つか示す。
演算子 | 説明 |
---|---|
+= | 左辺の値に右辺の値を加算したものを左辺に代入する |
-= | 左辺の値から右辺の値を減算したものを左辺に代入する |
*= | 左辺の値と右辺の値を乗算したものを左辺に代入する |
/= | 左辺の値を右辺の値で除算したものを左辺に代入する |
//= | 左辺の値を右辺の値で整数除算したその商を左辺に代入する |
%= | 左辺の値を右辺の値で整数除算した剰余(余り)を左辺に代入する |
累算代入演算子(一部) |
変数の値を「1つ増やす」「1つ減らす」という処理は、プログラミングではよく行われるため、上の表に示した累算代入演算子の中では「変数 += 1」「変数 -= 1」という表記はこれからよく使うことになるだろう*2。
*2 C言語などでは変数の値を1増やすのに「++」演算子(インクリメント演算子)が、値を1減らすのに「--」演算子(デクリメント演算子)が使われるが、これらの演算子はPythonにはない。Pythonでは、値を1増やすには「+=」演算子を、1減らすには「-=」演算子を使う。
では、実際に試してみよう。今度はブラウザの最下部にある新しいセルをクリックして、以下のコードを入力し、実行ボタンをクリックする。
r += 1
print(PI * r **2)
本連載でPythonの実行環境として例示しているJupyter Notebookのノートブックでは、以前に実行したセルで定義されている変数は、別のセルでも利用できる。そのため、上のコードは先ほど「r = 1」として定義した後に、「r = 2」としてその値を変更した変数rの値を「1加算」することになる。実行結果を以下に示す。
ここまで、何となく「PI」や「r」という名前の変数を使ってきたが、変数には「その名前に使えるもの」「どのような名前を付ければいいか」など、守るべきルールがある。次は、それらについて簡単に見ていこう。
Pythonでは、変数の名前にはアルファベット(大文字/小文字)と数字、アンダースコア「_」を使える(実際には日本語の変数名も付けられるが推奨はされていない)。このとき、変数名の先頭には数字は使えない。
また、Pythonの予約語(またはキーワード)を変数名として使うこともできない。第2回の「より複雑なHello Worldプログラム」では関数を定義したが、そのときに使用した「def」が予約語(キーワード)の一例だ。この他にも「for」「if」「while」「class」など、幾つかの語が予約されており、それらは変数名には使えない。
ここまでをまとめると次のようになる。
だが、実際には以下のような規約もある。Pythonプログラムはこれらの慣習に従って変数名が付けられていることが多いので、自分で書くプログラムでも以下を守るとよいだろう。
この他にも「モジュール内部でのみ使用するものはアンダースコアで始める」などの規約もあるが、これらについてはまだモジュールについて説明をしていないなどの理由から、適切なタイミングで取り上げることにしよう。
これらを踏まえた上で、幾つかの変数名の例を以下に示す。
変数名 | 適切な変数名かどうか |
---|---|
name | 〇 |
1on1 | ×(変数名はアルファベットかアンダースコアで始まる必要がある) |
Var1 | △(変数名には大文字を使わないことが推奨される) |
some_value | 〇(読みやすくなるのであれば、複数の単語はアンダースコアで区切ってもよい) |
変数名の例 |
変数とは「変化する値」を保存するものだが、円周率3.14……のように変わらない値をプログラムで扱いたいときにはどうすればよいだろう。Pythonには「変わらない値を保存しておく(変わらない値に名前を付ける)」機能がない(他の言語ではこれを「定数」と呼ぶ)。
Pythonでは変数を定義して、その値を変更しないで使うことで「定数」の代わりとしている。このとき、定数の名前は「大文字」(とアンダースコア)だけを使うという一般的な規則がある。例えば、上のコードでは円周率を保存するのに大文字の「PI」という名前の変数を使って、それが定数であることを表現している。
ここまで変数を中心に話をしてきたが、最後にPythonの「文」と「式」について簡単に説明をしておく。
「式」とは「何らかの値を持つ」ものだ。「1 + 1」は一目で式であり、その値は「2」だとすぐに分かるが、単独の「1」(整数リテラル)も値を持つ(その値はもちろん「1」)ので式である。あるいは、文字列(文字列リテラル)や変数を単独で記述した場合も、それは式として扱われる。print関数などの関数呼び出しも式である。そして、式が持つ値を得ることを「式を評価する」などと呼ぶ。式は、以下で述べる文を構成する要素ともなる。
「文」はその文に関連付けられた処理を実行するものと考えられる。例えば、「a = 1 + 1」は代入「文」であり、「変数に値を代入する」という処理を行う(大ざっぱにいえば、代入文は「代入先 = 式」とPythonの文法で定められている)。この代入文は「1 + 1」という「式」を含んでいる。
また、第2回で見た「def文」は「関数を定義する」という処理を実行していた。
def helloworld():
name = input('input your name: ')
message = 'Hello ' + name + ' !'
print(message)
これも関数定義の本体は、文と式で構成されていることが分かる。なお、式は文としても扱われる。例えば、上のコードでprint関数を呼び出している部分は、単に「関数呼び出しという式」が記述されているだけだが、これも文の一種として扱われる(これを「式文」と呼ぶことがある)。
このように、式と文はPythonのプログラムを構成する基本要素となる。また、「a = 1 + 1」のような1行で記述できる文のことを「単純文」と、上で見たdef文(関数定義)のように、他の文を含む文のことを「複合文」と呼ぶ。Pythonでは、1行には1つの単純文だけを記述することが推奨されている(本連載で記述するコードもこのスタイルにのっとっている)。
何が式で、何が文であるかは、最初のうちは意識する必要はないだろうが、そうしたものでPythonのプログラムが構成されることは覚えておこう。
今回は「変数」というプログラムを書く上では欠かすことのできない要素を中心に以下のような事柄を見てきた。変数は「何かの値を取っておく」「何かの値に名前を付ける」「その値を後から自由に使える」「使うには定義が必要」といったことが重要だ。こう書くと、難しく感じる人もいるだろうが、変数を使っているうちに自然と身に付くはずだ。次回はPythonの文字列を取り上げる。
「Python入門」
Copyright© Digital Advantage Corp. All Rights Reserved.