※この記事はUdemyの
「現役シリコンバレーエンジニアが教えるPython3入門+応用+アメリカのシリコンバレー流コードスタイル」
の講座を受講した上での、自分用の授業ノートです。
講師の酒井潤さんから許可をいただいた上で公開しています。
##■キーワード引数の辞書化
#####◆例
def menu(food='beef', drink='wine'):
print(food, drink)
menu(food='beef', drink='coffee')
beef coffee
まずこういったサンプルを用意する。
ここに、食べ物や飲み物だけでなく、他にも付け足したいときを考える。
#####◆キーワード引数を辞書化する
def menu(**kwargs):
print(kwargs)
menu(food='beef', drink='coffee')
{'food': 'beef', 'drink': 'coffee'}
menu
にわたす引数の頭に**
をつけることで、
わたした引数が辞書化される。
def menu(**kwargs):
for k , v in kwargs.items():
print(k, v)
menu(food='beef', drink='coffee')
food beef
drink coffee
作成された辞書のkeyとvalueを引っ張ってきてprintするように組んだ。
def menu(**kwargs):
for k , v in kwargs.items():
print(k, v)
d = {
'food': 'beef',
'drink': 'ice coffee',
'dessert': 'ice cream'
}
menu(**d)
food beef
drink ice coffee
dessert ice cream
d
で作った辞書は、menu(**d)
により、それぞれのkeyとvalueのセットに展開されて渡される。
##■普通の引数、位置引数のタプル化、キーワード引数の辞書化の同時使用
#####◆同時使用も可能
def menu(fruit, *args, **kwargs):
print(fruit)
print(args)
print(kwargs)
menu('banana', 'apple', 'orange', food='beef', drink='wine')
banana
('apple', 'orange')
{'food': 'beef', 'drink': 'wine'}
最初のbanana
は普通の引数としてfruit
に渡され、
apple
とorange
は*args
に渡されることでタプル化され、
beef
とwine
は**kwargs
により辞書化された。
#####◆注意点
def menu(fruit, **kwargs, *args):
print(fruit)
print(kwargs)
print(args)
menu('banana', food='beef', drink='wine', 'apple', 'orange')
def menu(fruit, **kwargs, *args):
^
SyntaxError: invalid syntax
**kwargs
を先に、*args
を後にするとエラーとなる。
これらを同時に使う場合は、*
→ **
の順で使うようにしよう。