↓ メインコンテンツへスキップ
  1. 第02講 基本データ型(2/2; セット、ディクショナリ)、関数(1/2; 関数の基礎)/

関数(1/2) 関数の基礎

関数とは
#

教科書 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 が返されます。