Python 入門 ノート (39)位置引数とキーワード引数とデフォルト引数

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

引数が単体の場合

def menu(entree):
    print(entree)
menu('beef')

beef

位置引数

引数が複数の場合 順序を正しくする必要があります。

def menu(entree, drink, dessert):
    print(entree)
    print(drink)
    print(dessert)
menu('beef', 'ice'、'beer')

beef
ice
beer

間違えると上記の様にdrinkにiceが入りdessertにbeerが入ります。

キーワード引数

そこで、間違いを避けるためにキーワードを追加して下記の様に書きます。

def menu(entree, drink, dessert):
    print('entree = ', entree)
    print('drink = ', drink)
    print('dessert = ', dessert)
menu(entree='beef', dessert='ice', drink='beer')

entree = beef
drink = beer
dessert = ice

するとiceとbeerの順序を間違えて書いても、drinkとdessertの順に直してくれています。

位置引数とキーワード引数を混ぜて使う

キーワード引数の全てのキーワードの省略

順序が同じ場合すべてのキーワードを省いても結果は同じになります。

def menu(entree, drink, dessert):
    print(‘entree = ‘, entree)
    print(‘drink = ‘, drink)
    print(‘dessert = ‘, dessert)
menu(‘beef’, ‘beer’, ‘ice’)

entree = beef
drink = beer
dessert = ice

キーワード引数の一部キーワードの省略

但順序が同じ場合、第一引数(entree)のキーワードを省略しても大丈夫ですが、

def menu(entree, drink, dessert):
    print('entree = ', entree)
    print('drink = ', drink)
    print('dessert = ', dessert)
menu('beef', drink = 'beer', dessert = 'ice')

entree = beef
drink = beer
dessert = ice

順序が同じでも、第2引数以降のキーワード(drink,dessert)の省略はエラーになります。

def menu(entree, drink, dessert):
    print('entree = ', entree)
    print('drink = ', drink)
    print('dessert = ', dessert)
menu(entree = 'beef', 'beer', dessert = 'ice')

menu(entree = ‘beef’, ‘beer’, dessert = ‘ice’)
^
SyntaxError: positional argument follows keyword argument

同様順序が同じでも、第3引数(dessert)のキーワードを省略するとエラーが返ります。

def menu(entree, drink, dessert):
    print('entree = ', entree)
    print('drink = ', drink)
    print('dessert = ', dessert)
menu(entree = 'beef', drink = 'beer', 'ice')

menu(entree = ‘beef’, drink = ‘beer’, ‘ice’)
^
SyntaxError: positional argument follows keyword argument

順序が同じで、第2第3引数を省略するとエラーが返ります。

def menu(entree, drink, dessert):
    print('entree = ', entree)
    print('drink = ', drink)
    print('dessert = ', dessert)
menu(entree = 'beef', 'beer', 'ice')

menu(entree = ‘beef’, ‘beer’, ‘ice’)
^
SyntaxError: positional argument follows keyword argument

このように、順序が同じでもキーワードの省略は第一引数までのようです。

順序が変わる場合はキーワードは必須になるでしょう。

def menu(entree, drink, dessert):
    print('entree = ', entree)
    print('drink = ', drink)
    print('dessert = ', dessert)
menu('beer', entree = 'beef', dessert = 'ice')

menu(‘beer’, entree = ‘beef’, dessert = ‘ice’)
TypeError: menu() got multiple values for argument ‘entree’

第一引数(entree)がダブっているエラーが返ります。

位置引数とキーワード引数が混在する場合は注意が必要になります。

デフォルト引数

関数定義(def)の際、前もってデフォルトの引数の値を指定します。

def menu(entree= 'beef', drink= 'wine', dessert= 'ice'):
    print('entree = ', entree)
    print('drink = ', drink)
    print('dessert = ', dessert)
menu()

entree = beef
drink = wine
dessert = ice

すると関数実行の際引数指定がない場合には、デフォルトの値が呼び出されます。

引数に値を指定すると、書き換えが行われます。

def menu(entree= 'beef', drink= 'wine', dessert= 'ice'):
    print('entree = ', entree)
    print('drink = ', drink)
    print('dessert = ', dessert)
menu(entree='chiken')

entree = chiken
drink = wine
dessert = ice

 

def menu(entree= 'beef', drink= 'wine', dessert= 'ice'):
    print('entree = ', entree)
    print('drink = ', drink)
    print('dessert = ', dessert)
menu('chiken', drink= 'beer')

entree = chiken
drink = beer
dessert = ice

コメント