Python入門:関数
関数
基本的な関数
def add(a, b): return a + b
位置引数
add(1, 2) 3
キーワード引数
add(1, b=2) 3 add(a=1, b=2) 3 add(b=2, a=1) 3
デフォルト値
def add(a, b=4): return a + b add(1) 5
デフォルト値NG
def append(item, _list=[]): _list.append(item) return _list users = append('Tom') print(users) ['Tom'] cars = append('GT-R') print(cars) ['Tom', 'GT-R'] print(users) ['Tom', 'GT-R']
スコープ
ローカル→グローバル参照
gbar = 'グローバル' def foo(): print(gbar) # アクセス可能
実行結果
foo() グローバル
ローカル→ローカル参照
gbar = 'グローバル' def foo(): gbar = 'ローカル' print(gbar) # foo関数で定義したgbar
実行結果
foo() ローカル print(gbar) グローバル
ローカル→グローバル代入
gbar = 'グローバル' def foo(): print(locals()) print(globals()) global gbar # 明示的にグローバル指定 gbar = 'ローカル' print(gbar) print(locals()) print(globals())
実行結果
foo() {} {'__name__': '__main__', … , 'gbar': 'グローバル', 'foo': <function foo at 0x01752468>} ローカル {} {'__name__': '__main__', … , 'gbar': 'ローカル', 'foo': <function foo at 0x01752468>} print(gbar) ローカル
def counter(x): count = x def closure(): nonlocal count count += 1 return count return closure
lambda関数
operations = {'+': lambda a,b: a+b, '-': lambda a,b: a-b} add = operations['+'] add(1, 2) 3 sub = operations['-'] sub(3, 2) 1