Како користити и бележити подразумеване аргументе у Питхон функцијама

Бусинесс

Постављање подразумеваног аргумента у дефиницији Питхон функције узрокује да се подразумевана вредност користи ако је аргумент изостављен током позива функције.

Следећи детаљи су описани у наставку.

  • Подешавање подразумеваних аргумената
  • Ограничења положаја подразумеваних аргумената
  • Имајте на уму да када се листа или речник користи као подразумевана вредност

Подешавање подразумеваних аргумената

Ако је име аргумента = подразумевана вредност у дефиницији функције, подразумевана вредност ће се користити када се одговарајући аргумент изостави.

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]
Copied title and URL