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