変数と予約語

変数と予約語

変数

 一般にプログラミングでは、3.141593 といった 数値 や「今日は良いお天気ですね」というような 文字列 のデータを逐一そのままで記述することはほとんどありません。変数 と呼ばれる名前のついた箱にデータを入れておくだけで、その箱の名前でデータを扱うことができるからです。たとえば pi と名づけた変数に円周率の値 3.141593 を入れておけば、この pi を円の面積や球の体積を求める計算に使うことができます。
 
Excel で描いた Python 変数の説明図
 
 Python においては、変数の定義に特別な宣言は必要ありません。好きな名前の変数に代入演算子「 = 」でデータを格納すれば、新しい変数が生まれたことになります。変数 pi に円周率の値を、変数 r に半径 1.25 の値を入れて、円の面積(円周率 × 半径 の 2 乗)を求めてみます。Python では掛け算は * で、2乗は ** で実行するという決まりがあります。先頭に # の付いた灰色の行はコメント文なのでプログラムに影響を与えません。

# PYTHON_VARIABLE

# In[1]

# 円周率の値を変数piに入れる
pi = 3.141593

# 半径1.25を変数rに入れる
r = 1.25

# 円の面積を計算して変数sに入れる
s = pi * r ** 2

# 面積sを表示する
print(s)
4.9087390625

 ここでは自分で円周率の値を定義しましたが、一般に Python による数値計算で円周率が必要な時には、math や numpy といった拡張モジュールの数学関数ライブラリから高精度の円周率の値を呼びだして計算に用います。そうした関数については別の記事で説明するので、ここで深くは立ち入りませんが、そのように呼びだされた値も変数として扱われます。たとえば、NumPy というモジュールを np という名前で読み込むと、円周率は np.pi という変数名で扱います。

# In[2]

# NumPyをnpという名前で読み込む
import numpy as np

# 半径1.25を変数rに入れる
r = 1.25

# 円の面積を計算して変数sに入れる
s = np.pi * r ** 2

# 面積sを表示する
print(s)
4.908738521234052

 先ほどとは若干値が異なっていて、桁数も増えていますね。
 もちろん、こちらのほうがずっと精度が高くなっています。

 変数には数値以外にも文字列が入ることがあります。
 2 つの変数 x と y に文章を入れて足してみます。

# In[3]

x = "おはようございます。"
y = "今日は良い天気ですね。"
print(x + y)
おはようございます。今日は良い天気ですね。

 文字列のデータは必ずクォーテーション (') かダブルクォーテーション (") で囲みます
 Jupyter NoteBook のようなエディタを使っている場合は、片側にクォーテーションを入れると自動的にもう片方が現れるようになっています。
 


 当たり前ですが、変数は値を変えられます
 だから「変数」とよばれているのです。
 たとえば、先ほどのコードは次のように書き直すことができます。

# In[4]

x = "おはようございます。"
y = "今日は良い天気ですね。"
x = x + y
print(x)
おはようございます。今日は良い天気ですね。

 x に元々入っていたデータを破棄して新たに x と y を連結した文字列を入れています。
 上のコードは複合代入演算子「 += 」というものを使って、さらに洗練された書き方をすることができますが、それについては 複合代入演算子の記事 で改めて解説します。まずは変数の基本的な使い方に慣れてください。

変数の命名規則

 変数の名前のつけかたには簡単なルールがあるので、下にまとめておきます。
 
数字から始まる変数は使えません
 たとえば、51_Ichiro というような変数は使えません。
 
・ and や if など、Python の構文で用いられる 30 余りの 予約語 は使えません
 
大文字と小文字は区別されます
 たとえば、myword と myWord は別の変数として認識されます。
 
変数名にアンダースコアを使うことができます
 Pythonでは、単語をアンダースコアで結びつけるスネークケース (snake case) とよばれる記法が一般的です (例:my_word, real_numbers, total_count)。
 
 こうしたルールを守るだけでなく、わかりやすいコードを書くための作法も大切です。たとえば、日本語を変数に使うこともできますが、Python のコードは様々な国の人が読む可能性があるので、公開するコードにアルファベット以外の文字を用いることはおすすめできません。
 また、アルファベットは基本的に小文字を使うようにします。Python では慣習的に大文字で記述された変数を、値を変えない定数として決めておくことが多いからです。

keywordモジュールで予約語を調べる

 上で述べたように、予約語 (キーワード) を変数名として採用することはできません。標準ライブラリの keyword モジュールには Python における予約語 (キーワード) の情報が収められています。

keyword.kwlist

 keyword.kwlist で予約語の一覧を取得できます。

# PYTHON_KEYWORD

# In[1]

import keyword

# 予約語(キーワード)の一覧を取得
kw = keyword.kwlist

print(kw)
['False', 'None', 'True', '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']

 len() で予約語の数を調べると合計 35 個であることがわかります。

# In[2]

# 予約語(キーワード)の数を調べる
print(len(kw))
35

keyword.iskeyword()

 keyword.iskeyword(s) は文字列 s が予約語リストに含まれているときに True を返します。

# In[3]

# awaitが予約語リストに含まれているかを確認する
x = keyword.iskeyword("await")

print(x)
True

 予約語リストに含まれていなければ False を返します。

# In[4]

# blogcatが予約語リストに含まれているかを確認する
x = keyword.iskeyword("blogcat")

print(x)
False