位置引数・キーワード引数・デフォルト引数
位置引数
関数にたいして複数の値を渡したい場合、カンマで区切って書く。
def menu(entree, drink, dessert):
print('entree = ', entree)
print('drink = ', drink)
print('dessert = ', dessert)
menu('beef', 'ice', 'beer')
- 引数は渡した順番通りに格納される。
キーワード引数
引数を渡す際に「引数名=値」という形でキーワードを指定すると、順番が変わっても目的の変数に値を渡すことができる。
menu(enterr='beef', dessert='ice', drink='beer')
位置引数とキーワード引数を混ぜて使うこともできる
menu('beef', dessert='ice', drink='beer')
# 位置引数とキーワード引数を混ぜるとエラーになる。
# 'ice'も'beef'も2番目のdessertに格納しようとしているのでエラー
mune(dessert='ice', 'beef', drink='beer')
デフォルト引数
引数が省略された場合にデフォルトで入る値を設定できる
def menu(entree='beef', drink='wine', dessert='ice'):
print('entree = ', entree)
print('drink = ', drink)
print('dessert = ', dessert)
# すべてデフォルト
menu()
# entreeとdrinkのデフォルト引数をそれぞれ上書き
menu(entree='chicken', drink='beer')
# 位置引数とキーワード引数を混ぜる
# entreeは位置引数、drinkは上書き、dessertはデフォルト
menu('chiken', dirnk='beer')
※リストをデフォルト引数につかうべきではない。
可変引数
位置引数をタプル化してまとめる
def say_something(*args):
for arg in args:
print(arg)
say_something('Hi!', 'Mike', 'Nancy')
位置引数と混ぜて使う
def say_something(word, *args):
print('word=', word)
for arg in args:
print(arg)
# 'Hi!'が位置引数。'Mike'と'Nansy'は*args
say_something('Hi!', 'Mike', 'Nansy')
引数を渡す際にアンパッキングする
タプルやリストに*をつけるとアンパッキングした個々の値として渡すことができる
def say_something(word, *args):
print('word=', word)
for arg in args:
print(arg)
# 引数を*tにするとtがアンパッキングされ
# say_something('Hi!', 'Mike', 'Nansy')と同様になる
t = ('Mike', 'Nansy')
sya_something('Hi!', *t)
キーワード引数を辞書化してまとめる
def menu(**kwargs):
for k, v in kwargs.items():
print(k, v)
menu(entree='beef', drink='coffee')
キーワード引数を辞書にして渡す
def menu(**kwargs):
for k, v in kwargs.items():
print(k, v)
d = {'entree': 'beef', 'drink': 'ice coffee', 'dessert': 'ice' }
menu(**d) # 展開する
位置引数とタプル化と辞書化を組み合わせて使う
def menu(food, *args, **keyargs):
print(food)
print(args)
print(kewargs)
menu('banana', 'appke', 'orange', 'entree='beef', 'drink='coffee')
※*argsは**kwargsよりも前に書かないとエラーになる
コメント