関数とは #
教科書 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
が返されます.