見出し画像

[Python]変数についてまとめてみました

こんにちは。

普段から趣味でぼちぼちプログラミングを勉強しています。
その中で学んだことや感じたことを備忘録として素人なりにnoteに書いています。
間違っていたらご指摘していただけるとありがたいです。

備忘録として書いていますが、これからプログラミングを勉強しようと思っている方やその他色んな方が見た時にわかりやすいように心掛けて書いていきたいなと思います。

今回は、Pythonの変数について書いています。

変数とは?

プログラミングにおける変数というのは、

高水準言語のプログラムのソースコードにおいて、扱うデータを読み書きする記憶域 (storage) のことであり、固有の名前(識別子)によって識別される。変数を用いることで、データを一定期間記憶し必要なときに利用することができる。高水準言語において、変数は記憶装置(メモリ)を抽象化する役割を果たす。

-------------------------------------------Wikipediaより引用

だそうです。
これだけ見てもよくわからないので少しずつ見ていこうと思います。

まず「扱うデータを読み書きする記憶域のこと」とありますが、実際にプログラムを作成していく中でデータを保持しておきたい時や、あるデータを何度も繰り返して使いたい時、それ以外にも変数を使うタイミングは沢山あります。

そういった「データを一時的に読み書きできる状態にしておきたい場合」に変数を使います。

「固有の名前(識別子)によって識別される」というのは、データを一時的に変数として保持しておくための名前になります。
プログラムから、この名前(変数名と呼ぶ)を使ってデータにアクセスします。

そして「高水準言語において、変数は記憶装置(メモリ)を抽象化する役割を果たす」という部分が大事なのかなと思います。

様々な初心者向けの書籍を見ていると変数は「データを保存しておくための箱」という例えが多いと思います。

ですが実際に箱に入っているというよりかは、メモリにあるデータあるいはデータの番地に対して名前を付けてそのデータにアクセスしていると考えた方が良いのかなと思います。

例えば、名前を付けた箱にデータを格納するというパターンで考えると

variable = 123

variable2 = 123

この二つの123という整数値は、数値こそ同じですが全くの別物のように感じてしまうのではないかと思います。
ですがPythonのidと言う関数を使ってこの二つのメモリアドレスを確認してみると、この二つは同じアドレスに存在する事がわかります。

※このメモリアドレスはプログラムを実行して終了して、また実行すると変化します。

id(variable)
#4477946016

id(variable2)
#4477946016

箱にデータを入れると言うより、人間がそのメモリ番地に保持されているデータに簡単にアクセスできるようにするために番地に名前を付けると言うようなイメージで考える方がしっくりくるかなと思います。

もう少し噛み砕いて言うなら『データにあだ名を付ける』といったイメージです。

これが「変数は記憶装置(メモリ)を抽象化する役割を果たす」という意味じゃないかなと思っています。

変数名 = データ
の形にすることによって、様々な形のデータを任意の変数名で管理できるようになるのです。
例えば、画像ファイルのパスや、ただの数値だったり、関数なども管理する事が出来ます。

file_path = 'C:/Users/user_name/Desktop/sample.txt'

point = 95

def function():
    print('this is function')

define = function
#こんな使い方はしないでしょうが…

例え話ですが、GPSで取得したあるお店の座標や住所を覚えておくのは厳しいですが、そのお店の店名なら覚えておけると思います。
そうすれば後から調べたくなった時に、もし座標や住所を思い出せなくても店名を思い出して調べる事が可能です。

そんな風に、日本(メモリ)の地図上の番地(座標や住所にあたる部分)を知らなくても店名(変数名)を覚えておけばアクセスできます。

そういった事から、変数はプログラムをする上で大切な要素だということですね。

変数の基本的な使い方

と言う事で変数について僕のイメージを書きました、ここからは変数の基本的な使い方について書いていきます。

まず変数名を書いてイコール(=)を書いてその後に変数に割り当てるデータを書きます。

variable = 10
#変数名 = データ

これで変数variableに整数値10が割り当てられました。

この変数variableを別の変数に割り当てたり、様々な型のデータを割り当てる事もできます。

variable2 = variable
print(variable2)
#10

print(variable is variable2)
#True

#何か処理をした結果なども変数に割り当て可能

var_id = id(variable)
print(var_id)
#4363254400

#様々な型のデータも割り当て可能

#文字列型
a = "Hello world!"

#数値型
b = 2021

#リスト型
c = [12345]

#タプル型
d = (12345)

#辞書型
e = {"A""hello""B""world"}

また、変数に割り当てられているデータを操作した結果を同じ変数名に割り当てたりもできます。

var = 10

print(var)
#10

var = var + 10

print(var)
#20

変数名の付け方(使用できない名前)

変数を使うにあたって変数名として自分の任意の名前を付ける事が出来ますが、どんな名前でも大丈夫と言うわけではありません。

①キーワード(予約語)と同じ名前は付けれない

Pythonで予め使われているキーワード(予約語)と呼ばれるモノと同じ名前をつける事は出来ません。

以下に書いてある名前は変数名として使用する事が出来ないので、もし変数名としてキーワード(予約語)を付けようとした場合は実行時にエラーとなります。

False
None
True
and
as
assert
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

例えばforという変数名の変数を定義しようとすると、シンタックスエラー(構文がおかしいよ)が出ます。

for = 123

#エラー
File "<string>", line 1
    for = 123
        ^
SyntaxError: invalid syntax

これはPythonが「変数を定義しているんだ」と解釈しているのではなくて「for文を書いているんだな」という解釈をしてしまうので、そうなると構文がおかしいのでエラーになると言う事です。

他にも例えばNoneと言う名前で変数を定義してみると

None = 100

#エラー
 File "<stdin>", line 1
SyntaxError: cannot assign to None

「Noneにデータを割り当てる事が出来ません」というエラーになります。
また、予約後やキーワードといったものだけでなく組み込み関数も気をつけないとプログラムの挙動がおかしくなったりします。

例えばPythonの組み込み関数の中にlen()という関数がありますが、そのlenという名前で変数を定義してからlen関数を使おうとするとエラーがでます。

len('python')
#出力
#6

len = 100

len('python')

#エラー
Traceback (most recent call last):
 File "<stdin>", line 1in <module>
TypeError: 'int' object is not callable

②変数名の先頭に数字は使えない

変数名の先頭には数字は使えません。
こちらも実行時にエラーになります。

0abc = 123

#エラー
 File "<stdin>", line 1
   0abc = 123
    ^
SyntaxError: invalid syntax

変数名の付け方(使用できる文字)

変数名に使える文字は

・a〜zまでの小文字
・A〜Zまでの大文字
・アンダースコア( _ )
・数字(先頭に付けなければOK)
・日本語全角なども可能(基本的に使わない方がいいです)
・先ほど書いた予約後やキーワードなど以外の文字

abc = 100

ABC = 100

a_b_c = 100

abc100 = 100

数字 = 100

ルールさえ守れば好きな名前をつける事が出来ますね。

おまけ(変数名の書き方)

変数名の書き方には色々あって、それぞれの書き方によって名前があります。
命名規則って言うんですかね。

アッパーキャメル形式(パスカル形式)

全ての単語の先頭を大文字で記述します。

ImagePath = 'C:/Users/username/image.jpg'

ロウワーキャメル形式

先頭は小文字でその後の単語の先頭は大文字で記述します。

imagePath = 'C:/Users/username/image.jpg'

アッパースネーク形式

全ての文字を大文字にして単語と単語の繋ぎをアンダースコアで区切ります。

IMAGE_PATH = 'C:/Users/username/image.jpg'

ロウワースネーク形式

全ての文字を小文字にして単語と単語の繋ぎをアンダースコアで区切ります。

image_path = 'C:/Users/username/image.jpg'

まとめ

今回はPythonの変数についてまとめてみました。
前半は自分のイメージを書いてみましたが、人によって色んなイメージのやり方があると思うので、あなたが理解出来る説明ができたのかどうかは分かりませんが、何かの参考になれば良いなと思います。

最後まで読んでいただきありがとうございました!
では、またお会いしましょう!

この記事が気に入ったらサポートをしてみませんか?