目次
位置引数
# 位置引数
def menu(entree, drink, dessert):
print('entree = ', entree)
print('drink = ', drink)
print('dessert = ', dessert)
menu('beef', 'ice', 'beer')キーワード引数
# キーワード引数
def menu(entree, drink, dessert):
print('entree = ', entree)
print('drink = ', drink)
print('dessert = ', dessert)
menu(entree='beef', dessert='ice', drink='beer')デフォルト引数
# デフォルト引数
def menu(entree='beef', drink='wine', dessert='ice'):
print('entree = ', entree)
print('drink = ', drink)
print('dessert = ', dessert)
menu()
print('-'*5)
menu(entree='fish')デフォルト引数でリストや辞書型を使う場合の注意点
def sample_func(x, l=[]):
l.append(x)
return l
y = [1, 2, 3]
r = sample_func(100, y)
print(r)
# [1, 2, 3, 100]- デフォルト引数のlを指定せずに100と入力すると、初回は空リスト[ ]に100が追加される
r = sample_func(100)
print(r)
# [100]- ただし同じことを続けると[100]になるはずが、[100,100]になってしまう
- これはリストが参照渡しであるため、以前作成したリストのアドレスに紐付いている。そのため一度目に呼び出したリストをそのまま使用している
- このような問題があるため、Pythonではリストをデフォルト引数に使うべきではない
r = sample_func(100)
print(r)- デフォルト引数に空のリストを使いたい場合
- デフォルト引数を[]ではなくNoneを指定し、関数の中でリストの変数がNoneである場合は、リストを空にする(初期化する)処理を入れる
def sample_func(x, l=None):
if l is None:
l = []
l.append(x)
return l
r = sample_func(100)
print(r)
r = sample_func(100)
print(r)
#[100]
#[100]