Pythonでの変数の使い方と、関数オブジェクトの代入の解説

Python

Pythonで扱える数値には、どういったものがあるのでしょうか?
基本的には整数、浮動少数点数(実数のこと)などを扱うことができますが、
さらに変数というものを使うことで、Pythonが何倍も使いやすくなります。

変数を使えば、数値などのデータを格納し、後から好きなタイミングでそのデータを取り出すことができます。
Pythonだけでなく、プログラム全般を使う上で欠かせない知識ですので、ぜひとも覚えておきましょう。

変数を使わないコードはとても不便

Pythonで計算をする時に、変数を使わずに計算するとどうなるのでしょうか?
例として、今回は円周率を使った計算をしてみましょう。
Pythonでは計算結果などを画面に出力する時、print関数を使用します。

Print関数について詳しく
Pythonのprint関数の使い方まとめ

【コード例】

	#半径=1 , 円周率=3.14

	#円周を求める
	print( 2 * 3.14 * 1)

	#面積を求める
	print(3.14 * 1 * 1)

【出力結果】

6.28
3.14

コードを見てみると、円周率3.14と半径1という数値がコード中に複数回登場しています。
このようなケースでは、同じ数値を何度も入力しなければならないので、とても面倒ですね。

入力ミスが起こりやすい

これはまだ短いコードなので平気かもしれませんが、コードはもっと長く複雑なものが多いです。
1つのプログラム中で、何回も入力しなければならないデータが必ず出てきます。
すると、3.14を3.11と打ってしまうなど、入力ミスをしてしまう可能性も十分にある訳です。
その度に全ての記述を確認するのは、とても面倒で骨の折れる作業だと思います。

コード記述の意図がわかりづらい

さらに実際のプログラム開発では、チームで開発することが大半です。
なので他の人の書いたコードを見たり、自分が書いたコードが他の人に見られることが常です。
その時に「この値は何を表しているのか?」と、その値が示している意味がわからなくなる事があります。
また一度使った数値を他の計算式でも使いたいケースも非常に多く起こります。
変数を使うことで、このような問題をカンタンに解決してくれます。

変数とは、変化できる数値や文字列の言い換え

変数とはそのままの字の通り、「変化する数」を格納しておくためのメモリです。
変数に格納できるものは、数値や文字列といったオブジェクトです。

ただし、変数は必ず変化させないといけない訳ではありません。
あくまで「変化することができる」数であると思ってください。

【コード例】

	x = 1
	print(x)

【出力結果】

1

1行目のx = 1によって、変数xに「1」という数値を格納しています。
2行目のprint(x)を実行した結果、変数xに格納されている「1」が出力結果となりました。

変数を使うことで、計算がスッキリ簡単に

先ほどの円周率と半径の計算を、変数を使って計算してみましょう。
円周率3.14を変数PIに、半径1を変数rに格納するとします。

すると、コードは次のように変化します。
最初に書いた変数なしのバージョンと比べて、とてもスッキリしたと思います。

【コード例】

	PI = 3.14		# 変数PIに実数3.14(円周率)を格納
	r = 1			# 変数rに整数1(半径)を格納
	
	print(2 * PI * r)	# 円周
	print(PI * r ** 2)	# 面積

【出力結果】

6.28
3.14

出力結果を見ると、変数を使っても結果は変わらないことがわかると思います。
それでは、変数の箇所に焦点を当てて見ていきましょう。

指定したデータを変数に定義する方法

1行目のPI = 3.14と、2行目のr = 1で変数に値を格納しています。
このように変数にデータを格納することを「変数を定義する」と言います。

Pythonで変数を定義するには、変数名 = 値という形の文で変数を定義します。
この1文を書くことで、変数が作成されて、その文字列に値が格納されます。

ちなみに「=」は代入演算子といって、左辺の変数に右辺の値を代入する時に使われます。
けっして数学などに使われる「イコール」の意味ではないことに注意しましょう。
(「==」と記述することで、イコールの意味になります。)

プログラム中では、変数=定義された数値となる

変数に値を定義して、プログラム中でその変数を記述すると、その変数は格納した値として扱われます。
これを「変数の値を参照する」といいます。

上のコード例では、4行目のprint(2 * PI * r)と、
5行目のprint(PI * r ** 2)で、それぞれ2つの変数PIとrの値を参照しています。

変数を定義をしないと、関数が使えないケースも

また関数によっては、変数を定義していないと、エラーを起こす関数もあります。

【コード例】

	x = 1

	print(y)

【出力結果】

NameError: name ‘y’ is not defind

このエラーは「yという変数が定義されていない」という意味です。
このように、定義していない変数を出力しようとするとエラーが出ます。

データの数値を変える時も変数なら簡単

コードの値を書き換える時にも、変数なら1ヵ所を書き換えるだけでOKですので、とっても簡単です。

例えば、先ほどの円周率と半径の計算の円周率を3に変更してみます。
変数なしの場合と変数ありの場合、2つのパターンで比べてみましょう。

【コード例(変数なし)】

	print(2 * 3 * 1)
	print(3 * 1 * 1)

print(2 * 3.14 * 1)print(2 * 3 * 1)
print(3.14 * 1 * 1)print(3 * 1 * 1)
変数を使わない場合、2ヵ所の数値を書き換えなければなりません。

【コード例(変数あり)】

	PI =  3
	r = 1

	print(2 * PI * r)
	print(PI * r ** 2)

PI = 3.14PI = 3
変数を定義している場合、1ヵ所のみを書き換えるだけでOKです。
このように変数を使った方が、変更にかかる作業数が減るので非常に楽です。

プログラムの途中で変数の値を変更する方法

先ほどの変数PIの値を3.14から3へ書き換えたケースは、「変数を初期化する」といった動作になります。
変数の初期化では、最初から最後までコード内の変数を全て書き換えてしまいます。
今度はそれとは異なり、コードの途中で「変数を変更する」方法を説明します。

【コード例】

	PI = 3.14
	r = 1

	print(2 * PI * r)
	print(PI * r ** 2)

	PI = 3

	print(2 * PI * r)

【出力結果】

6.28
3.14
6

7行目のPI = 3で、変数PIを3という数値に定義し直してます。

9行目のprint(2 * PI * r)の結果は、6と出力されています。
この部分はprint(2 * 3 * 1)として、PI = 3を参照していることがわかります。

このように変数を再び定義することで、変数に格納している値を上書きすることができます。

変数に名前をつける時のルール

PI = 3.14では、PIという文字列が変数名となっています。

このように変数を定義するには、変数名を入力しなければなりません。
しかし、その変数名はどんな名前を付けても良いということではありません。

変数の名前には、以下のようなルールがあります。

・アルファベット(大文字と小文字)、数字、アンダースコア「_」が使える
・変数名の先頭に数字は使えない
・予約語は使えない

ですので「x」や「number_1」といった変数名は使えますが、
「for」や「1_man」といった変数名は使えません。

予約語というのは、Pythonであらかじめ定義されているキーワードのことです。
例としては、「for」、「if」、「while」などが挙げられます。

関数オブジェクトを変数に代入することも可能

変数には、文字列や数値だけでなく関数も代入することができます。

そもそも関数とは、データを入力するとあらかじめ定義した処理を実行して出力するプログラムの事です。
関数を実行させて、結果を出力することを「関数を呼び出す」と言います。

また関数へ入力するデータを引数と言い、引数に入れるデータによって出力結果が変化する関数もあります。
関数を変数とするには、def文で定義することができます。

【コード例】

	def add(x,y)
		print(x * y)

	add(2,3)

【出力結果】

6

1行目def add(x,y)では、
2つの引数(x,y)を受け取り、その合計値を表示するadd()関数を定義しています。

4行目add(2,3)で、定義した関数を呼び出しています。
def文で定義した関数を呼び出す時は、このように関数名をそのまま記述すればOKです。

【コード例】

	def repeat_msg(msg, repeat=3):
   		 for i in range(repeat):
       	 print msg

	repeat_msg('Hello')                   
	repeat_msg('Yahho', repeat=5)

【出力結果】

Hello, Hello, Hello
Yahho, Yahho, Yahho, Yahho, Yahho

【コード例】

	def print_add_default(a, b, c=100):
  		  print('a = ', a)
  		  print('b = ', b)
   		 print('c = ', c)
   		 print('a + b + c = ', a + b + c)

print_add_default(1, 10)

【出力結果】

a = 1
b = 10
c = 100
a + b + c = 111

【コード例】

	def func_return_multi(a, b):
    		return a + b, a * b, a / b

	x = func_return_multi(3, 4)

	print(x)
	print(type(x))

【出力結果】

(7, 12, 0.75)

1行目def func_return_multi(a, b):によって、
2行目return a + b, a * b, a / bという3つの処理をfunc_return_multi関数と定義しています。
3行目x = func_return_multi(3, 4)では、変数xに以下のfunc_return_multi関数を格納しています。

a + b = 3 + 4 = 7
a * b = 3 × 4 = 12
a / b = 3 ÷ 4 = 0.75

これらの関数は変数の中に格納することができます。

【コード例】

	def my_name():
 		 name = 'nanashi'
   		 print(name)
   		 return 
 
 
	name = my_name() 
	print(name)
 
	f = my_name 
 
	name = f() 
	print(name) 

【出力結果】

nanashi

まず1行目のdef文で関数が定義されています。
f = my_nameで変数に関数を代入しています。
このようにすることで変数の値として関数を格納することができます。
関数の呼び出しで変数を書くと関数を参照してその関数の処理が実行されます。

まとめ

いかがでしたか。
変数には、文字列や数値だけでなく、関数も代入することができます。
関数も変数に格納してしまうことで、呼び出しが楽になり非常に便利です。

コメント

タイトルとURLをコピーしました