変数
一般にプログラミングでは、3.141593 といった 数値 や「今日は良いお天気ですね」というような 文字列 のデータを逐一そのままで記述することはほとんどありません。変数 と呼ばれる名前のついた箱にデータを入れておくだけで、その箱の名前でデータを扱うことができるからです。たとえば pi と名づけた変数に円周率の値 3.141593 を入れておけば、この pi を円の面積や球の体積を求める計算に使うことができます。
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
keywordモジュールのソースコード : keyword.py が紹介されていたので見てみたら、63行のコードの中で kwlist と iskeyword( ) に関係しているところは下記の 2 行だけでした。
kwlist = [ . . . 35ヶのキーワード . . . ] # ここで37行使われている
iskeyword = frozenset(kwlist).__contains__
モジュール名+変数でアトリビュートが呼び出せて、モジュール名+変数( ) でメソッドを関数として呼び出せる。type(keyword.iskeyword) で型を調べると、
builtin_function_or_method
時々関数の型を調べると、このような結果が返ってくることがあったのですが、モジュール内でこのような仕組みが使われていたからでしょうか。
自分でも簡単なモジュール( py ファイル ) を作ってから import していろいろ試してみましたが、なるほどうまく作ったものだなと感心してしまいました。
おっしゃるように、モジュール内の変数はモジュール名.変数、関数はモジュール名.関数で呼び出せます。たとえば、my_module.py に次のようなコードが書かれていたとします。
――――――――――――――――――――――
# my_module.py
a = 10
def hello():
print(‘Hello!’)
――――――――――――――――――――――
このファイルをインポートすれば、a は変数なので、my_module.a で呼び出せます。
hello() は関数なので、my_module.hello() で実行できます。
――――――――――――――――――――――
import my_module
print(my_module.a)
my_module.hello()
# 10
# Hello!
――――――――――――――――――――――
詳しいことは「Pythonスクリプトファイル」の記事に書いてあるので参考にしてください。
keyword.py の一部を抜粋します。
――――――――――――――――――――――
kwlist = [
‘False’,
‘None’,
…]
iskeyword = frozenset(kwlist).__contains__
――――――――――――――――――――――
frozenset(kwlist) は list オブジェクト kwlist を frozenset 型に変換しています。__contains__ は、frozenset オブジェクト s について、任意の x が s のメンバーに含まれるかを判定する演算 x in s を定義する特殊メソッドです。すなわち、iskeyword はモジュール内の「変数」として定義されていますが、その中身は「関数オブジェクト」です。それで、keyword.iskeyword(s) は、kwlist に s が含まれているかを判定する関数として振る舞う仕組みになっています。def 構文を使わずに関数を定義する巧みな手法といえます。
おっしゃるように、type(keyword.iskeyword) は builtin_function_or_method を返しますが、これは keyword がビルトインスコープ(一般的な自作モジュールの外側にある組み込み関数専用スコープ)に定義されているからです。自作モジュールの関数オブジェクトを type() で調べたら、class ‘function’ が返るはずです。
なるほど、自作モジュールの関数に対しては function が返ってきました。
そしてクラスのインスタンスを作ってからクラスの関数の型を
type(インスタンス.関数)
で表示させると method が返ってきました。ビルトインの関数やメソッドの場合は、どちらも builtin_function_or_method と一括りで扱われているということですね。
AIがPythonの変数について解説します
[ChatGPT] Pythonにおける変数は、値を格納するための名前付きのメモリ領域です。変数を使用することで、データを保持し、操作し、再利用することができます。Pythonでは、変数を以下のように宣言します:
◆◆◆◆◆
variable_name = value
◆◆◆◆◆
上記のコードでは、variable_nameという変数名にvalueという値を格納しています。変数名は識別子であり、一般的にアルファベットやアンダースコア(_)で始める必要があります。また、変数名は大文字と小文字を区別します。
◆◆◆◆◆
x = 5
name = “John”
pi = 3.14
◆◆◆◆◆
Pythonでは、変数の型(データの種類)は動的に推論されます。つまり、値を代入することで自動的に適切な型が割り当てられます。例えば、x = 5というコードでは、整数型の変数xが作成されます。変数の値は後から変更することができます。単に新しい値を代入するだけです。
◆◆◆◆◆
x = 5
x = 10 # xの値を10に変更
◆◆◆◆◆
変数の値は、別の変数に代入したり、演算や関数の引数として使用したりすることもできます。
◆◆◆◆◆
x = 5
y = x # xの値をyに代入
z = x + y # xとyの値の和をzに代入
◆◆◆◆◆
変数を使用する際には、事前に宣言する必要はありません。初めて変数に値を代入するときに変数が作成されます。また、Pythonでは動的な型付けが行われるため、同じ変数に異なる型の値を代入することも可能です。ただし、注意が必要です。
◆◆◆◆◆
x = 5
x = “Hello” # 型が異なる値を代入
◆◆◆◆◆
以上が、Pythonにおける変数の基本的な使い方です。変数はプログラミングにおいて重要な概念であり、データの操作や保持に活用されます。
Pythonにおける変数の命名規則は以下のようなルールに従う必要があります:
1. 変数名は英数字とアンダースコア(_)で構成されます。
2. 変数名は数字で始めることはできませんが、アンダースコアまたは文字で始めることができます。
3. 大文字と小文字は区別されます。例えば、`count`と`Count`は異なる変数と見なされます。
4. 予約語(キーワード)は変数名として使用できません。例えば、`if`や`for`などは変数名として使用することができません。
5. 変数名はわかりやすく、意味のある名前を付けることが推奨されます。例えば、`age`や`username`などが良い変数名の例です。いくつかの変数の命名規則のベストプラクティスは次のとおりです:
1. スネークケース(snake_case): Pythonでは、変数名にスネークケースを使用することが一般的です。スネークケースは、単語間をアンダースコアで区切るスタイルです。例えば、`first_name`や`total_count`などがスネークケースの変数名です。
2. 名前の意味を反映させる: 変数名は、その変数が表すデータや値の意味を反映させるようにしましょう。これにより、コードの可読性が向上し、他の人がコードを理解しやすくなります。
3. 短くてわかりやすい: 変数名は短くてわかりやすいものを選ぶことが重要です。長すぎる変数名はコードを読むのに手間がかかるため、適度な長さに保つようにしましょう。
4. コンベンションの利用: Pythonコミュニティには、特定の変数名のコンベンション(慣習)が存在します。例えば、一時的な変数には`tmp`や`temp`を使用することが一般的です。これらのコンベンションに従うことで、他のPython開発者がコードを理解しやすくなります。