関数はdef
の行から始まり、処理の行はインデント(行頭のスペース)を揃えて行い、そのインデントの終了までが関数定義の範囲。
def 関数名(引数1, 引数2, …):
処理
# インデントの終わりまでが定義の範囲
# 定義
def hello(引数):
print(引数 + "さん、こんにちは")
# 呼び出し
hello("アリス") # アリスさん、こんにちは
関数定義の際、return
文の後ろに返すオブジェクトを指定する。指定がない場合はNoneが戻る。
def 倍返し(引数):
return 引数 * 2
戻り値 = 倍返し(10)
print(戻り値) # 20
仮引数を仮引数名 = オブジェクト
のようにして、実引数を省略したときのデフォルト値を指定できる。デフォルト値を持つ仮引数はそうでないものより後半に定義しないと、文法エラー(SyntaxError
)。
def 倍返し(x, y = 2): # (x=2, y)のようにするとエラー(SyntaxError)
print(x * y)
# 実引数を省略
倍返し(10) # 20
# 省略しない例
倍返し(10, 3) # 30
# エラー(TypeError)
倍返し(y=3) # TypeError: 倍返し() missing 1 required positional argument: 'x'
上記では、引数1は必須の実引数となり、省略するとエラー(TypeError
)。
実引数の個数を任意に指定できる可変長引数は、*仮引数名
のように定義する。
def x倍返し(x, *y):
print(y) # 可変長引数はタプル
print(x * sum(y)) # すべてのyを合計して、x倍
x倍返し(2, 1, 2, 3)
# (1, 2, 3)
# 12
可変長引数はまとめてタプルとして利用できる。
可変長引数より後ろに定義した仮引数は、キーワード専用引数となり、位置引数にはならない(デフォルト値があれば省略可)。
def x倍返し(*y, x = 2):
print(x * sum(y)) # すべてのy引数を足して、x倍
x倍返し(1, 2, x = 1) # 3
x倍返し(1, 2, 3) # 12
仮引数の最後に**仮引数名
の書式で指定すると、可変長のキーワード引数となり、まとめて辞書として利用できる。
def キーとバリュー(x, **辞書):
for キー in 辞書: # xは辞書に含まれない
print(キー, 辞書[キー])
キーとバリュー(x = 1, なまえ = 'alice', 分類 = 'ヒト')
# なまえ alice
# 分類 ヒト