Python 関数の定義 - function
Publish date: 2021-02-18
Pythonでの関数定義の記述方法についての解説です。
関数の定義
キーワードdef
を使用して関数の定義を行うことができます。
def 関数名(引数1, 引数2):
関数の処理
e.g.
def add(number1, number2):
return number1 + number2
add(2, 3) ## => 5
デフォルトの引数値
引数には、デフォルト値を指定可能です。
def add(number1 = 0, number2 = 0):
return number1 + number2
print(add(2, 3)) ## => 5
print(add(2)) ## => 2
print(add()) ## => 0
キワード引数(名前付き引数)
変数名を名称で指定して関数を呼び出す事ができる。
def named_parameter_function(p1, p2, str1='A', str2='B', str3='C'):
print('p1', p1)
print('p2', p2)
print('str1', str1)
print('str2', str2)
print('str3', str3)
named_parameter_function(1, 2)
named_parameter_function(1, p2=2)
named_parameter_function(1, 2)
named_parameter_function(1, p2=2 , str2='X')
可変引数
*変数名
で位置で渡される可変個の引数、
**変数名
でキーワードで渡される可変個の引数を受け取る事ができる。
def variable_arguments_function(p1, p2 , p3=3, *arguments, **keywords):
print('p1', p1)
print('p2', p2)
print('p3', p3)
for arg in arguments:
print("arguments", arg)
for kw in keywords:
print(kw, ":", keywords[kw])
variable_arguments_function(1, 2, 3, 4, 5, 6, kw1="A", kw2="B")
p1 1
p2 2
p3 3
arguments 4
arguments 5
arguments 6
kw1 : A
kw2 : B
型ヒント(型アノテーション)
関数の引数右に: 型
、関数閉じ括弧の右に-> 型
を付与することで、
関数が期待する型をヒントとして記載できる。
def add(number1: int, number2: int = 0) -> int:
return number1 + number2
デコレータ
関数宣言の前に@デコレータ名
とすることで、
対象関数の実行時に特定の処理を行う事ができるようになります。
デコレータは高階関数です。対象の関数を引数に受け取り、 関数実施の前後で処理を行ったり、関数の呼び出し方法を制御できます。
def decorator_sample(func):
def wrapper(*arguments, **keywords):
print('begin')
r = func(*arguments, **keywords)
print('end')
return r
return wrapper
@decorator_sample
def add(number1: int, number2: int = 0) -> int:
r = number1 + number2
print(r)
return r
add(1, 2)
# =>+
# begin
# 3
# end
引数のアンパック
引数を位置で指定する必要がある場合リストのままでは渡せない。
その場合は引数として渡す変数の先頭に*
を付与しunpackすることで呼び出しが可能となります。
list(range(0, 9, 2)) # => [0, 2, 4, 6, 8]
range_parameters = [0, 9, 2]
list(range(*range_parameters)) # => [0, 2, 4, 6, 8]
list(range(range_parameters)) #=> TypeError: 'list' object cannot be interpreted as an integer
マッピング型(dict)は**
を付与することで、キーワード引数として渡す事ができる。
variable_arguments_function(1, 2, 3, 4, 5, 6, kw1="A", kw2="B")
position_parameters = [1, 2, 3, 4, 5, 6]
named_parameters = {"kw1":"A", "kw2":"B"}
variable_arguments_function(*position_parameters, **named_parameters)
ラムダ式
チョットした関数はキーワードlambda
で定義できます。
def get_decorator(wrap):
return lambda body: wrap + body + wrap
contents = "ABCDE"
asterisk_decorator = get_decorator("***")
print(asterisk_decorator(contents))
# => ***ABCDE***
equals_decorator = get_decorator("===")
print(equals_decorator(contents))
# => ===ABCDE===