「Pythonの関数ってどう書くの?」
「Pythonでクラスってどう作るの?」
Pythonでプログラミングする上で、関数やクラスの扱いは重要になります。
Pythonにおける「関数」は、数学の関数と似ていて、「何らかの値を渡すと、その値に応じた何らかの値を返すもの」。
また、ざっくりですが「クラス」とは、「オブジェクトを作成するための設計図」になります。
※オブジェクト:「Pythonで書いたプログラムが操作したり、処理したりするデータ」
以下、Jupyter notebook(ジュピターノートブック)を使って実際にPythonのコードを書いていきます。
まだPythonの環境を構築していない方はこちらの記事をお読みください。
関連記事Python(パイソン)環境をAnaconda(アナコンダ)で構築!Jupyter notebookの使い方は?
では、さっそくPythonの関数の書き方、使い方について学んでいきましょう!
Pythonの関数ってどう書くの?
Pythonの関数を書く前に、そもそも関数とは・・・
関数とは、入力された値に対して、指定した内容の計算を行い、入力された値に応じた処理結果を返すものです。
例えば、足し算関数を作りたい場合は下記のようになります。
- 引数1:3
- 引数2:5
- 足し算関数:3+5=8
- 返り値:8
引数(ひきすう)とは、数学における関数やコンピュータプログラムにおける手続きにおいて、その外部と値をやりとりするための特別な変数、あるいはその変数の値のこと。
返り値(戻り値)とは、プログラム中で呼び出された関数やメソッド、サブルーチンなどが処理を終了する際に、呼び出し元に対して渡す値のこと。
・・・と言っても何だか小難しいですよね。
かんたんに言うと・・・
関数に入れるのが「引き数」、関数から出てくるのが「返り値(戻り値)」です♪
def
でadd
という関数を定義します。
関数の処理部が、sum = x + y
。
return
で返り値を与えます。
最後に、print(add(3,5))
で関数を呼び出しています。
def add(x,y):
sum = x + y
return sum
print(add(3,5))
次の例は平均関数。
引数の数だけ値を渡す必要があります。
#3つ引数を受け取って、平均値を返す関数
def average(x1,x2,x3):
ans = (x1+x2+x3)/3
return ans
print(average(18,3,15))
関数に前もって引数を持たせてあげることも出来ます。
#デフォルト引数を持った関数
def average(x1 = 0,x2 = 0,x3 = 0):
ans = (x1+x2+x3)/3
return ans
print(average())
print(average(x1= 18,x2= 3,x3 = 15))
何も引数を指定しない時は、デフォルトの引数で処理します。
また、引数名を指定して、関数に値を与えることもできます。
身長と体重を入力して、BMIが出力される関数を作りましょう。
また、BMIが18未満なら「痩せ気味」、18以上25未満なら「普通」、25以上なら「太り気味」と出力させましょう。
以下の引数を使ってみましょう。
yamada = {“height”:2,”weight”:80}
if文を使った条件分岐については、こちらの記事を参考にしてください。
関連記事Python(パイソン)の制御文の使い方は?(if文、for文、while文)
条件式でA「かつ」Bと表現するためにはand
を使います。
[ac-box01 title=”答え”]
def BMI_function(height,weight):
ans = weight/(height*height)
return ans
yamada = {"height":2,"weight":80}
BMI = BMI_function(yamada["height"],yamada["weight"])
print(BMI)
if BMI<18:
print("痩せ気味です")
elif BMI >=18 and BMI <=25:
print("普通です")
else:
print("太り気味です")
[/ac-box01]
Pythonのクラスってどう作るの?
次は、Pythonのクラスの作り方について学びます。
・・・クラスを勉強する前に。
そもそもクラスって何?
キーワードがこちら。
- オブジェクト:具体的な「モノ」のこと全般
- クラス:「モノ」を生成するための設計図
- インスタンス:クラスから生成された「モノ」
- メソッド:クラスに従属する関数
- フィールド:クラスに従属する変数
- コンストラクタ:インスタンスが生成されるときに最初に実行されるメソッド(関数)
クラスは「レシピ」でインスタンスは出来上がった「モノ」のイメージです。
大規模なプログラム開発を行うためには、他の人が記述したコードを利用し、それらを組み合わせて目的のプログラムをコーディングしていきます。
クラスは継承することができるので、大規模なプログラム開発で威力を発揮します。
例えば、ハンバーガーの「レシピ」を作り、それをもとにチーズバーガーの「レシピ」を作ることができます。
クラスとインスタンス
以下、Pythonでのクラス・インスタンスの実装例です。
- クラスの宣言(class クラス名)
- メソッド(関数)の宣言(def 関数名)
- クラスに基づきインスタンス(モノ)を生成し名付ける
- インスタンスの関数の呼び出し(インスタンス名.関数名)
class test_class: #クラス名の宣言
def sample(self,a): #メソッド(関数)の宣言
print("引数:"+ a)
inst=test_class() #クラスに基づきインスタンス(モノ)生成し名前をつける
inst.sample("EXAMPLE") #インスタンスの関数の呼び出し
Jupyter notebookでの実行結果は以下です。
クラス内の関数を使うには、まずインスタンス(モノ)を生成【インスタンス名=クラス名()】が必要なので注意です。
コンストラクタとデストラクタ
コンストラクタは、インスタンスが生成されるときに最初に実行されるメソッド(クラスに従属する関数)のことです。
class hamburger:
def __init__(self):
print("start loading")
self.ing =[]
self.ing.append("bread")
self.ing.append("meat")
self.ing.append("onion")
def add_ing(self):
self.ing.append("ketchup & mustard")
def __del__(self):
print("finish loading")
def show(self):
print(self.ing)
def fetch(self):
return self.ing
hb=hamburger()
hb.show()
hb.add_ing()
hb.show()
print(hb.fetch())
・__init__関数はインスタンス生成時に自動的に実行される関数で、これをコンストラクタと言います。
・__del__関数はクラスがインスタンス消滅時に自動的に実行される関数で、これをデストラクタと言います。
クラスの継承
次は、クラスの継承です。
先にハンバーガーのレシピ(クラス)を作成済みなので、チーズバーガーのレシピを1から書くよりも、ハンバーガーのレシピにチーズを加えて方が早いです。
class 子クラス名(親クラス名):の形式でクラスを宣言することで、親クラスのメソッドが引き継がれた「子クラス」を作成することができます。
これをクラスの継承と言います。
チーズバーガーのレシピ = ハンバーガーのレシピ + チーズ
class hamburger:
def __init__(self):
print("start loading")
self.ing =[]
self.ing.append("bread")
self.ing.append("meat")
self.ing.append("onion")
self.ing.append("ketchup & mustard")
def show(self):
print(self.ing)
class cheeseburger(hamburger): #hamburgerクラスのメソッドを継承したcheeseburgerクラスを宣言
def add_cheese(self):
self.ing.append("cheese") #チーズを追加。これでチーズバーガーのレシピが完成
cbg = cheeseburger() #チーズバーガーのマニュアルを元にハンバーガーを生成(インスタンス生成)
cbg.show()
cbg.add_cheese() #作成したハンバーガーにチーズを追加
cbg.show()
Jupyter notebookで実際にPytohnを実行すると以下のようになります。
次は、ちょっとした演習問題です。
Aさん~Fさんの6名について出席表(辞書形式)をクラスで実装してみましょう。
- attendanceというクラス
- コンストラクタ、attend、showの3つの関数を作成
- コンストラクタは出席表(メソッド名は”table”)を生成、初期化
- 出席表初期値は{“A”:False, “B”:False, “C”:False, “D”:False, “F”:False}
- attend関数:インスタンス名.attend(“A,B,C”)を実行した場合、そのインスタンスの出席表は{“A”:True, “B”:True, “C”:True, “D”:False, “F”:False}となるような関数
- show関数:”本日の出席表は、{ここに出席表表示}です”を出力
[ac-box01 title=”答え”]
class attendance:
def __init__(self): #コンストラクタ
self.table = {"A":False,"B":False,"C":False,"D":False,"E":False,"F":False}
def attend(self,p):
attendlist=p.split(",") #split関数は文字列を指定した文字で区切って分割する関数
for i in attendlist:
self.table["{}".format(i)]=True
def show(self):
print("本日の出席者は{}です。".format(self.table))
school = attendance() #インスタンスの生成
school.attend("A,D,E") #本日の出席者を格納
school.show() #本日の出席表を出力
Jupyter notebookで実行するとこんな感じで結果が出ます。
[/ac-box01]
実際に色々と自分で試してみてくださいね♪
さあPythonの関数を書いてみよう!
今回は、Pythonの関数の書き方について学びました。
def
、引数や返り値(戻り値)により関数を作ることができます。
また、クラスの作り方を学びました。
ちょっと文法に慣れる必要がありますけどね。
クラスは大規模なプログラムを書く時に便利です。
ぜひ、自分の手で実際に書いてみてくださいね♪
こちらの「スラスラ読める Pythonふりがなプログラミング」もPython初心者の方におすすめです♪
次回はPythonライブラリNumPyを使ってみましょう!
コメント