Python функцияларындағы әдепкі аргументтерді қалай пайдалану және атап өту керек

Іскерлік

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