茨の道も一歩から

インフラ構築からプログラミング(Python・JavaScript)までITに関するブログです。

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