def f_basic(a, b=10):
return a + b
assert f_basic(1) == 11
assert f_basic(1, 2) == 3
assert f_basic(5) == 15
def f_multi(a=1, b=2):
return a + b
assert f_multi() == 3
assert f_multi(10) == 12
assert f_multi(10, 20) == 30
def f_mixed(a, b, c=3, d=4):
return a + b + c + d
assert f_mixed(1, 2) == 10
assert f_mixed(1, 2, 30) == 37
assert f_mixed(1, 2, 30, 40) == 73
def f_kw(a, b=10):
return a + b
assert f_kw(1, b=20) == 21
assert f_kw(a=5) == 15
assert f_kw(a=5, b=3) == 8
def value_maker():
return 42
def f_eval(x=value_maker()):
return x
assert f_eval() == 42
assert f_eval() == 42
def f_mutable(lst=[]):
lst.append(1)
return lst
first_result = f_mutable()
assert first_result == [1]
second_result = f_mutable()
assert second_result == [1, 1]
assert first_result is second_result
def f_sep1(x=[]):
x.append('a')
return x
def f_sep2(x=[]):
x.append('b')
return x
r1 = f_sep1()
r2 = f_sep2()
assert r1 == ['a']
assert r2 == ['b']
assert r1 is not r2
def make_adder(n):
def add(x, y=n):
return x + y
return add
add5 = make_adder(5)
assert add5(10) == 15
assert add5(10, 3) == 13
add10 = make_adder(10)
assert add10(1) == 11
assert add5(1) == 6
def kwonly_mix(*, head=1, mid, tail=3):
return head, mid, tail
assert kwonly_mix(mid=2) == (1, 2, 3)
assert kwonly_mix(head=5, mid=7) == (5, 7, 3)