Устаноўка аргумента па змаўчанні ў вызначэнні функцыі Python прыводзіць да таго, што значэнне па змаўчанні будзе выкарыстоўвацца, калі аргумент апушчаны падчас выкліку функцыі.
Ніжэй апісаны наступныя дэталі.
- Ўстаноўка аргументаў па змаўчанні
- Абмежаванні на пазіцыю аргументаў па змаўчанні
- Звярніце ўвагу, што калі спіс або слоўнік выкарыстоўваецца ў якасці значэння па змаўчанні
Ўстаноўка аргументаў па змаўчанні
Калі імя аргументу = значэнне па змаўчанні ў вызначэнні функцыі, значэнне па змаўчанні будзе выкарыстоўвацца, калі адпаведны аргумент апушчаны.
def func_default(arg1, arg2='default_x', arg3='default_y'): print(arg1) print(arg2) print(arg3) func_default('a') # a # default_x # default_y func_default('a', 'b') # a # b # default_y func_default('a', arg3='c') # a # default_x # c
Абмежаванні на пазіцыю аргументаў па змаўчанні
Размяшчэнне аргумента па змаўчанні перад звычайным аргументам (аргументам, для якога не вызначана значэнне па змаўчанні) пры вызначэнні функцыі прыводзіць да памылкі.SyntaxError
# def func_default_error(arg2='default_a', arg3='default_b', arg1): # print(arg1) # print(arg2) # SyntaxError: non-default argument follows default argument
Звярніце ўвагу, што калі спіс або слоўнік выкарыстоўваецца ў якасці значэння па змаўчанні
Калі абнаўляльны (зменлівы) аб’ект, напрыклад спіс або слоўнік, зададзены ў якасці значэння па змаўчанні, гэты аб’ект будзе створаны пры вызначэнні функцыі. Затым, калі функцыя выклікаецца без адпаведнага аргументу, выкарыстоўваецца той жа аб’ект.
Значэнні аргументаў па змаўчанні ацэньваюцца злева направа, калі выконваецца азначэнне функцыі. Гэта азначае, што выраз аргументу па змаўчанні ацэньваецца толькі адзін раз, калі функцыя вызначана, і тое ж «разлічанае» значэнне выкарыстоўваецца для кожнага выкліку.
8.7. Function definitions — Python 3.10.2 Documentation
Такім чынам, напрыклад, калі вызначана функцыя, якая прымае спіс або слоўнік у якасці аргумента па змаўчанні і дадае да яго элементы і выклікаецца некалькі разоў без гэтага аргумента, элементы будуць дадаваць да аднаго і таго ж аб’екта неаднаразова.
Прыклад для лістынга.
def func_default_list(l=[0, 1, 2], v=3): l.append(v) print(l) func_default_list([0, 0, 0], 100) # [0, 0, 0, 100] func_default_list() # [0, 1, 2, 3] func_default_list() # [0, 1, 2, 3, 3] func_default_list() # [0, 1, 2, 3, 3, 3]
Прыклад для слоўніка.
def func_default_dict(d={'default': 0}, k='new', v=100): d[k] = v print(d) func_default_dict() # {'default': 0, 'new': 100} func_default_dict(k='new2', v=200) # {'default': 0, 'new': 100, 'new2': 200}
Кожны раз пры выкліку функцыі ствараецца новы аб’ект.
def func_default_list_none(l=None, v=3): if l is None: l = [0, 1, 2] l.append(v) print(l) func_default_list_none() # [0, 1, 2, 3] func_default_list_none() # [0, 1, 2, 3]