関数とは #
教科書 p.163(Lesson 7)関数とは,処理の集まりに名前をつけたものです. 何度も行う処理の集まりがあったときに,その処理を関数として定義しておくことで,同じ処理を何度も書く必要がなくなります.
関数は,def文を用いて以下のように定義します.
この例では,hello という名前の関数を定義しています.
関数を呼び出すには,関数名に続けて () を付けます.
すると,hello関数に処理が移り,print文が実行されて Hello, World! と表示されます.
hello関数に定義されたすべての処理が実行されると,呼び出し元に処理が戻ります.
>>> def hello(): # hello 関数を定義する.
... print("Hello, World!") # hello 関数の中身(処理内容).
...
>>> hello() # hello 関数を呼び出す.
Hello World!
関数は定義されていなければ呼び出すことはできません. プログラムは上から順に実行されるため,関数を呼び出す前に関数を定義しておく必要があります.
関数の定義 #
関数は,def文に続いて関数名を記述し,関数が受け取る変数(引数)を()内にコンマで区切って指定します.
また,関数の中身(処理内容)はインデント(字下げ)を用いて記述します.
関数内での処理結果を return 文を用いて,呼び出し元に返すことができます.
関数は一度定義すると何度でも呼び出すことができます.
>>> def hello():
... print("Hello, World!")
...
>>> hello()
Hello, World!
>>> hello() # 何度呼び出しても結果は同じ.
Hello, World!
関数の引数 #
実引数と仮引数 #
関数には,値を渡すことができ,この値のことを引数と呼びます. 引数は関数定義のときに宣言する変数である仮引数(かりひきすう; parameter)と,関数呼び出し時に渡す値である実引数(じつひきすう; argument)の2つに分けられます.
以下の例では,hello関数に name という仮引数を追加し,name に渡された値を表示するように変更しています.
>>> def hello(name): # name という仮引数を追加.
... print("Hello, " + name + "!")
...
>>> hello("Alice") # "Alice" という実引数を渡す.
Hello, Alice!
>>> name = "Bob"
>>> hello(name) # 変数を実引数として渡すこともできる.
Hello, Bob!
複数の引数 #
関数には,複数の引数を定義できます.
引数は () 内にコンマで区切って指定します.
以下のスクリプトを print_sales_tax.py に保存し,実行してみましょう.
import sys
def print_sales_tax(price, is_reduced_tax_rate):
if is_reduced_tax_rate:
print(f"{price}円 消費税(軽減税率): {price * 0.08} 円,小計: {price * 1.08} 円")
else:
print(f"{price}円 消費税: {price * 0.1} 円,小計: {price * 1.1} 円")
is_reduced = False
if len(sys.argv) > 2:
is_reduced = sys.argv[2] == 'true'
print_sales_tax(int(sys.argv[1]), is_reduced)
このとき,実引数は最後の行の int(sys.argv[1])とis_reduced であり,
仮引数は,print_sales_tax 関数定義(3行目)の price と is_reduced_tax_rate です.
int(sys.argv[1])がpriceに,is_reducedがis_reduced_tax_rateにそれぞれ代入されて関数が実行されます.
$ python3 print_sales_tax.py 1000
1000円 消費税: 100.0 円,小計: 1100.0 円
$ python3 print_sales_tax.py 1000 true
1000円 消費税(軽減税率): 80.0 円,小計: 1080.0 円
基本的には,仮引数と実引数の数は一致している必要があります.
関数の返り値 #
関数内での処理結果を呼び出し元に返すことができ,この値を返り値(かえりち; return value),または戻り値(もどりち)と呼びます.
返り値は return 文を用いて指定します.
return 文を実行すると,関数の処理が終了し,呼び出し元に処理が戻ります.
以下の消費税率を計算する関数を例に説明します.
def sales_tax(price, is_reduced_tax_rate):
if is_reduced_tax_rate:
return price * 0.08
else:
return price * 0.10
price = 1000
tax = sales_tax(price, False) # sales_tax での計算結果を返り値と受け取り,tax 変数に代入する.
print(f"{price}円(消費税 {tax}円),小計{price + tax}")
なお,return がない関数は,関数の最後まで処理が済むと呼び出し元に処理が戻り,None が返されます.