LoginSignup
2
1

More than 3 years have passed since last update.

【Udemy Python3入門+応用】 53. キーワード引数の辞書化

Posted at

※この記事はUdemyの
現役シリコンバレーエンジニアが教えるPython3入門+応用+アメリカのシリコンバレー流コードスタイル
の講座を受講した上での、自分用の授業ノートです。
講師の酒井潤さんから許可をいただいた上で公開しています。

■キーワード引数の辞書化

◆例
keyword_augment_dict
def menu(food='beef', drink='wine'):
    print(food, drink)

menu(food='beef', drink='coffee')
result
beef coffee

まずこういったサンプルを用意する。
ここに、食べ物や飲み物だけでなく、他にも付け足したいときを考える。

◆キーワード引数を辞書化する
keyword_augment_dict
def menu(**kwargs):
    print(kwargs)

menu(food='beef', drink='coffee')
result
{'food': 'beef', 'drink': 'coffee'}

menuにわたす引数の頭に**をつけることで、
わたした引数が辞書化される。

keyword_augment_dict
def menu(**kwargs):
    for k , v in kwargs.items():
        print(k, v)

menu(food='beef', drink='coffee')
result
food beef
drink coffee

作成された辞書のkeyとvalueを引っ張ってきてprintするように組んだ。

keyword_augment_dict
def menu(**kwargs):
    for k , v in kwargs.items():
        print(k, v)

d = {
    'food': 'beef',
    'drink': 'ice coffee',
    'dessert': 'ice cream'
}
menu(**d)
result
food beef
drink ice coffee
dessert ice cream

dで作った辞書は、menu(**d)により、それぞれのkeyとvalueのセットに展開されて渡される。

■普通の引数、位置引数のタプル化、キーワード引数の辞書化の同時使用

◆同時使用も可能
args
def menu(fruit, *args, **kwargs):
    print(fruit)
    print(args)
    print(kwargs)

menu('banana', 'apple', 'orange', food='beef', drink='wine')
result
banana
('apple', 'orange')
{'food': 'beef', 'drink': 'wine'}

最初のbananaは普通の引数としてfruitに渡され、
appleorange*argsに渡されることでタプル化され、
beefwine**kwargsにより辞書化された。

◆注意点
args
def menu(fruit, **kwargs, *args):
    print(fruit)
    print(kwargs)
    print(args)

menu('banana', food='beef', drink='wine', 'apple', 'orange')
result
    def menu(fruit, **kwargs, *args):
                              ^
SyntaxError: invalid syntax

**kwargsを先に、*argsを後にするとエラーとなる。
これらを同時に使う場合は、***の順で使うようにしよう。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1