Python の関数定義の基本
Python では def キーワードで、関数オブジェクトを定義できます。
def 関数名(引数1, 引数2, ..., 引数n):
ステートメントブロック
引数は任意です。ひとつも引数を受け取らない関数も作れます。
関数の戻り値は return キーワードで返します。
例えば、引数として x と y の二つを受け取り、 それらを足し合わせて、関数の戻り値として返す関数 add(x, y) は、次のように定義できます。
def add(x, y):
return x + y
ひとつのファイル内で関数を定義して呼び出すには、次のようにします。
def add(x, y):
return x + y
c = add(1, 3)
print(c)
1-2行目で関数 add() を定義しています。
3-4行目は空白行です。空白行はなくても動作しますが、Python のスタイルガイド (PEP8) でトップレベルに定義した関数定義及びクラス定義は二つの空白行で囲む (Surround top-level function and class definitions with two blank lines.) ことが推奨されています。
5行目で引数 1 と 3 を渡して、 add() 関数を呼び出しています。 これらの足し算は 4 ですから関数を呼び出した結果として、変数 c には 4 が入ります。
6行目で c を出力しています。
実行結果:
4
引数の型は指定していない
上で作った add() 関数では受け取る引数は、必ずしも int 型であるとは限りません。 もし次のように文字列を渡せば、それらを足し合わせた文字列 (連結した文字列) が返ります。
c = add('Hello', ' world')
print(c) # 'Hello world' と出力される
関数オブジェクトも他の変数に代入可能
Python はオブジェクト指向のプログラミング言語で、関数もオブジェクトとして扱えます。
次のように、任意の bar という変数に add を代入し、bar という関数として呼出すこともできます。
bar = add
c = bar(1, 3)
print(c) # 4 と出力される
動的に定義を切り替えることもできる
条件によって関数オブジェクトの定義を変えることもできます。次の例では i の値によって foo の定義を切り替えています。
i = int(input('Enter number: '))
if i == 1:
def foo(x, y):
return x + y
else:
def foo(x, y):
return x - y
print(foo(10, 5))
Enter number: 1
15
Enter number: 2
5
実際は動作の異なる関数は別名で定義する方が望ましいです。この例は「やりたければできます」という程度で考えてください。
以上、ここでは関数を定義して使う基本的な方法について説明しました。