Python funksiyasının tərifində defolt arqumentin təyin edilməsi, funksiya çağırışı zamanı arqument buraxılıbsa, defolt dəyərin istifadə edilməsinə səbəb olur.
Aşağıdakı təfərrüatlar aşağıda təsvir edilmişdir.
- Defolt Arqumentlərin qurulması
- Defolt arqumentlərin mövqeyinə məhdudiyyətlər
- Qeyd edək ki, siyahı və ya lüğət standart dəyər kimi istifadə edildikdə
Defolt Arqumentlərin qurulması
Əgər arqument adı = funksiya tərifində defolt dəyərdirsə, müvafiq arqument buraxıldıqda defolt dəyər istifadə olunacaq.
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
Defolt arqumentlərin mövqeyinə məhdudiyyətlər
Funksiyanı təyin edərkən standart arqumentin normal arqumentdən (heç bir defolt dəyəri göstərilməyən arqument) əvvəl yerləşdirilməsi xəta ilə nəticələnir.SyntaxError
# def func_default_error(arg2='default_a', arg3='default_b', arg1): # print(arg1) # print(arg2) # SyntaxError: non-default argument follows default argument
Qeyd edək ki, siyahı və ya lüğət standart dəyər kimi istifadə edildikdə
Əgər siyahı və ya lüğət kimi yenilənə bilən (dəyişən) obyekt standart dəyər kimi göstərilibsə, funksiya müəyyən edildikdə həmin obyekt yaradılacaq. Sonra funksiya müvafiq arqument olmadan çağırıldıqda eyni obyektdən istifadə edilir.
Defolt arqument dəyərləri funksiya tərifi yerinə yetirildikdə soldan sağa qiymətləndirilir. Bu o deməkdir ki, defolt arqument ifadəsi funksiya müəyyən edildikdə yalnız bir dəfə qiymətləndirilir və hər zəng üçün eyni “hesablanmış” dəyər istifadə olunur.
8.7. Function definitions — Python 3.10.2 Documentation
Beləliklə, məsələn, siyahı və ya lüğəti öz standart arqumenti kimi qəbul edən və ona elementlər əlavə edən funksiya müəyyən edilərsə və həmin arqument olmadan dəfələrlə çağırılırsa, elementlər eyni obyektə təkrar əlavə olunacaq.
Siyahı üçün nümunə.
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]
Lüğət üçün nümunə.
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}
Funksiya hər dəfə çağırılanda yeni obyekt yaradılır.
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]