関数とは
同じ処理を何度も行いたい場合、その処理を関数にしておくことで後から何度でも実行することができます。
関数の定義
Pythonの関数は下記で定義できます。
def 関数名():
処理
...
定義した関数は下記で実行できます。
関数名()
実際の例は下記のとおりです。
def func():
print("funcが実行されました。")
func()
func()
# funcが実行されました。
# funcが実行されました。
# と出力される
上記は最も単純な関数を定義した例ですが、関数には下記の概念があります
- 引数
- 位置引数
- 名前付き引数
- 可変長引数
- リターン
- スコープ
- 関数内関数
引数
位置引数
def 関数名(仮引数名1, 仮引数名2, ...):
処理
...
関数定義の際に使用される引数を仮引数と呼びます
def func(arg1, arg2):
print("最初の引数は"+arg1+
"、二番目の引数は"+arg2+"です")
func("a","b")
func("c","d")
# 最初の引数はa、二番目の引数はbです
# 最初の引数はc、二番目の引数はdです
# と出力される
関数を呼び出す際に仮引数に呼び出し時の値が設定されます。
上記の例では
func(“a”,”b”)が実行される際には、arg1に”a”、arg2に”b”が設定される
func(“c”,”d”)が実行される際には、arg1に”c”、arg2に”d”が設定される
また、関数定義にはdefaultの引数を設定することができる
def 関数名(仮引数名1=<デフォルト値>, ...):
処理
...
def func(arg1, arg2="e"):
print("最初の引数は"+arg1+
"、二番目の引数は"+arg2+"です")
func("a","b")
func("f")
# 最初の引数はa、二番目の引数はbです
# 最初の引数はf、二番目の引数はeです
# と出力される
func(“a”,”b”)が実行される際には、arg1に”a”、arg2に”b”が設定される
func(“f”)が実行される際には、arg1に”f”、arg2はデフォルトの値である”デフォルト値e”の文字列が設定される
キーワード引数
func(仮引数名=値, ...)
def func(arg1, arg2):
print("最初の引数は"+arg1+
"、二番目の引数は"+arg2+"です")
func("a","b")
func(arg2="a",arg1="b")
# 最初の引数はa、二番目の引数はbです
# 最初の引数はb、二番目の引数はaです
# と出力される
func(“a”,”b”)が実行される際には、arg1に”a”、arg2に”b”が設定される
func(arg2=”a”,arg1=”b”)が実行される際には、arg1に”b”、arg2に”a”が設定される
可変長引数
def 関数名(仮引数名, *可変長引数名):
処理
...
def func(arg1, arg2, *args):
print(arg1)
print(arg2)
print(args)
func(1,2,3,4,5)
func(1,2,3,4,5)が実行される際には、arg1に1、arg2に2、argsには(3, 4, 5)が設定される
リターン
def 関数名(仮引数名):
処理
...
return 値
def add(arg1, arg2):
return arg1+arg2
ret = add(3,4)
print(ret)
# 7
# と出力される
returnを使用すると関数は値を返却する
上の例ですと、add(3,4)を実行するとarg1に3、arg2に4が設定されるarg1+arg2が評価され、7になるreturnで7が返却する
返却された値7を変数retに代入する
print(ret)で7が出力される
スコープ
def 関数名():
ローカル変数宣言
...
ローカル変数参照不可
def func():
a = 1
print("関数内", a)
func() # 1が出力される
print("関数外", a) # エラーになる
関数の中で定義された変数は関数の中でしか参照できない
この変数が利用可能な範囲をスコープと呼ぶ
関数内関数
def 関数名():
def 関数内関数名():
処理
...
関数内関数名() # 実行可能
関数内関数名() # 実行不可
def func():
def inner_func():
print("inner_func")
inner_func()
func() # inner_func と出力される
inner_func() # エラーになる
関数の中で定義された関数も関数の中でしか参照できない