[Python]変数と定数の違い|サンプルコードを見ながら実際に書いてみよう
- システム
エンジニア - Pythonの変数と定数の違いって何ですか。
- プロジェクト
マネージャー - Pythonでは、定数を言語としてサポートしていません。基本的には全て変数なのです。
定数とは?
初めに定数とは何か、そして、変数と定数の違いとは何かを見比べながら定数について学んでいきましょう。定数について理解ができたら、実際にコードを書いて実践してみてください。
変数って何?
プログラミング言語において、データを扱うメモリ領域(値を入れておく「箱」)のことです。
変数には「データ型」と呼ばれる型があり、その「データ型」と一致する値を格納できます。ただし、同じ変数が2つあるとプログラムエラーが発生するため、固有の名前をそれぞれに付ける必要があります。
なお、値については何度も書き換えることが可能です。
定数って何?
プログラミング言語において、値をいれておく「箱のひとつ」です。
変数同様、データを扱うメモリ領域を、必要に応じて利用できるようにするために、データに固有の名前を与えたものです。
ただし、変数とは異なり初期の値からの変更は不可能です。中身があまり変わらないと分かっているものは、変数ではなく定数にすると良いでしょう。
定数を扱うために必要な動きには、「初期化」と「参照」の2つがあります。
「初期化」では、これから使用する定数の名称と対応するデータを明確にします。定数は値が変更できないため、名称の明確化(宣言)と同時にデータを関連づける(代入する)ことになります。また、場合によっては定数も変数のようにデータ型を指定することもあります。
「参照」とは、初期化した定数を利用することです。定数は宣言時に必ず初期化しなければならないので、不正な値が使用されることはありません。
Pythonの定数
Pythonでは、定数を言語としてサポートしておらず、基本的には全て変数となります。しかし、変数や値を定数として宣言することはできないので気を付けましょう。
Pythonで定数を定義する時は、定数名を全て大文字で構成します。(PEP8標準)
ただし、このルールは、あくまで慣習的なルールのため、Pythonの定数では値を再度代入することが可能です。
また、Pythonでは厳密に定数を作成することが不可能なため、他人が書いたコードを変更する時は、定数の中身を書き換えないよう注意しましょう。
再度代入できてしまう例:
1
2
3
4
5
|
AD_MAIL = "admin@email.com"
print(AD_MAIL)
AD_MAIL = "admin@email.co.jp"
print(AD_MAIL)
|
1
2
3
4
|
実行結果:
admin@email.com
admin@email.co.jp
|
コードの解説としては、AD_MAIL定数に”admin@email.com”という値を代入し、その値を出力しています。そして、AD_MAIL定数に”admin@email.co.jp”という値を再代入し、その値を出力しています。実行結果のように、メールアドレスが再代入されています。
なお、どうしても定数を使用したい場合は、自分でも定数クラスを作れます。任意のファイル名(const.pyなど)で保存をし、モジュールとして読み込んでみましょう。
例:クラス定数
下記のように示します。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class NameClass:
NAME = "aiko"
def show_info(self):
print(self.NAME)
name = NameClass()
name.show_info()
実行結果:
aiko
|
例:ファイル内定数
ファイル内定数の一例として記載します。
1
2
3
4
5
6
7
|
MIN_FILE_NUM = 5
print(MIN_FILE_NUM)
実行結果:
5
|
命名ルール
Python(PEP8)における、命名のルールを挙げます。変数と定数の違いを見比べてみてください。なお、今回は対象が「変数」と「定数」のもののみ紹介します。
対象が「変数」のものは、ルールで〔全小文字、アンダースコア区切り〕でなければならないと決められています。例として、〔my_favorite_rule〕のように使用されます。
対象が「定数」のものは、ルールで〔全大文字、アンダースコア区切り、モジュールレベル(関数の外側)に書く〕でなければならないと決められています。例として、〔MY_FAVORITE_RULE〕のように使用されます。
Pythonの予約語一覧(python3.7.3現在)
Pyhtonの予約語は以下の通りです。
False
class
finally
is
return
None
continue
for
lambda
try
True
def
from
nonlocal
while
and
del
global
not
with
as
elif
if
or
yield
assert
else
import
pass
break
except
in
raise
実際に書いてみよう!
例
1
2
3
4
5
6
7
8
9
10
11
|
COUNT = 5
for i in range(COUNT):
print(i)
実行結果:
0
1
2
3
4
|
コードの解説をしましょう。
「COUNT = 5」で、定数を設定しています。上記で説明した通り、Pythonの定数は大文字で書いています。
「for i in range(COUNT):」で変数iを指定し、for文を使用して定数COUNTをループ処理しています。
「print(i)」では、変数iの値を出力しています。この時、変数iにはrange関数で設定していた範囲0~4が順番に出力されます。
mathライブラリの定数piの使い方
Pythonでπ(円周率)を使う方法を試してみます。mathモジュールのpi定数を使用することで、円周率πを参照できます。
まず、mathモジュールを入力します。
1
2
3
|
import math
math.pi
|
その後、
1
2
3
4
5
|
import math
print(math.sin(math.pi/5))
print(math.cos(math.pi/5))
print(math.tan(math.pi/5))
|
1
2
3
4
5
|
実行結果
0.587785252
0.809016994
0.726542528
|
このコードの解説としては、π/5のサイン、コサイン、タンジェントを計算しています。
Pythonの定数モジュールをハードコーディングしないで使う方法
Pythonの定数モジュールをハードコーディングしないで使う方法を紹介します。では、記述していきましょう。
1つ目は、「eval」関数を使う方法です。
Pythonで定数を表すには、定数用のモジュールを作成し、それに定数を定義します。
例
1
2
3
|
--- const.py ---
ABC1 = u"abc1"
|
しかし、都合により、この「ABC1」を使う時にハードコーディングしたくないとしましょう。
その時は、このように使用すれば上手くいきます。
例
1
2
3
4
5
6
7
|
--- test.py ---
import const
def get_const_abc(abc):
return(eval("const." + abc))
print(get_const_abc(u"ABC1"))
# Print "abc1"
|
以上、ハードコーディングしないで使う方法を紹介しました。
- システム
エンジニア - 実際にコードを書いてみるとよく分かりますね。
- プロジェクト
マネージャー - ご紹介した方法を参考に、実際にコードを書きながら理解を深めてください。
まとめ
本記事では、変数と定数の違いを元にPythonの定数を知り、Pythonの定数を使用する際に必要なルールや、実際にどのように活用できるか紹介してきました。
Pythonの定数を知ることができたでしょうか。
本記事を参考に、例に挙げたような動作を実践してみてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
新着案件New Job
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅) -
PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)