Python 関数の引数

位置引数・キーワード引数・デフォルト引数

位置引数

関数にたいして複数の値を渡したい場合、カンマで区切って書く。

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よりも前に書かないとエラーになる

コメント

タイトルとURLをコピーしました