メインコンテンツへスキップ
  1. 第04講 関数(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行目)の priceis_reduced_tax_rate です. int(sys.argv[1])priceに,is_reducedis_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 が返されます.