Funksiya arqumentləri

Funksiyalar çağrıldığı zaman onların arqumentləri parametrlərə göndərilir. Biz funksiyaları aşağıdakı növ arqumentlərlə çağıra bilərik:

  • mütləq arqumentlər (required arguments);
  • açar sözlü arqumentlər (keyword arguments);
  • default (susmaya görə) arqumentlər (default arguments);
  • ixtiyari uzunluqlu arqumentlər (variable-length arguments).

İndi də bu arqumentləri bir-bir nəzərdən keçirək.

Mütləq arqumentlər

Funksiya təyin olunarkən ona ötürüləcək arqumentlər müəyyən sayda və ardıcıllıqda göstərilibsə, o, eyni saydakı və ardıcıllıqdakı arqumentlərlə də çağrılmalıdır. Belə arqumentlər mütləq arqumentlər adlanır.
Aşağıdakı proqramda simvolun sətirdə neçə dəfə təkrarlandığını müəyyənləşdirən funksiya və ondan necə istifadə edilməsi verilmişdir:

>>> def cinstr(c, s): 
        n = 0
        for i in s: 
            if c == i:
                n += 1 
        return n

>>> cinstr('a', 'balaban') 
3
>>> cinstr('balaban', 'a') 
0
>>> cinstr('a')
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module> 
    cinstr('a')
TypeError: cinstr() missing 1 required positional argument: 's' 
>>>

Proqramdan da göründüyü kimi, ikinci misalda arqumentlərin ardıcıllığı yanlış verildiyinə görə istənilən nəticə əldə olunmur. Üçüncü misalda isə onların sayı əksik olduğundan interpretator xəta qeydə alır.

Açar sözlü arqumentlər

Funksiya çağrılarkən arqumentlərin ixtiyari ardıcıllıqda göstərilə bilməsi üçün onlar parametr adlarından istifadə edilməklə verilməlidir. Bu cür arqumentlər açar sözlü arqumentlər adlanır.
Aşağıdakı proqramda simvol və ya sətri n dəfə təkrarlayan funksiya və ondan istifadə edilməsi göstərilmişdir:

>>> def repstr(s, n): 
        return s * n

>>> repstr(n = 2, s = 'do re mi fa sol lya si ') 
'do re mi fa sol lya si do re mi fa sol lya si ' 
>>>

Gördüyünüz kimi, parametrlərin adından və bərabərlik işarəsindən istifadə etməklə arqumentləri istənilən ardıcıllıqda vermək olar.

Default (susmaya görə) arqumentlər

Funksiya çağrılarkən onun hansısa arqumentlərinin məcburi qaydada verilməsini istəmiriksə, funksiyanın elanı zamanı onları default (susmaya görə) qiymətlərlə təyin etməliyik. Belə arqumentlər default arqumentlər adlanır. Funksiya çağrıldığı zaman bu arqumentlər verilməsə, susma halına görə onlar öz qiymətlərini saxlamış olacaqlar.
Aşağıdakı proqramda bir arqumenti default kimi təyin olunan funksiya və ondan necə istifadə edilməsi göstərilir:

>>> def fee(amount, currency = 'AZN'): 
        print(amount, currency)

>>> fee(50)
50 AZN
>>> fee(20, 'USD') 
20 USD
>>>

Gördüyünüz kimi, biz funksiyanı çağırarkən ikinci arqumenti (valyutanı) göstərməsək də, bu default (susmaya görə) qiymət kimi AZN qəbul ediləcək. Default arqument verildiyi təqdirdə, həmin qiymət (USD) funksiyaya ötürülmüş olacaq.
Burada bir vacib məqamı da qeyd etmək yerinə düşər. Belə ki, funksiyanı elan edərkən default arqumentlər məcburi arqumentlərdən sonra təyin olunmalıdır. Əks halda, interpretator xəta qeydə alacaq:

>>> def fee(currency = 'AZN', amount): 
        print(amount, currency)

SyntaxError: non-default argument follows default argument 
>>>

İxtiyari uzunluqlu arqumentlər

Funksiya elan edilərkən ona ötürüləcək arqumentlərin sayı öncədən məlum deyilsə, ixtiyari uzunluqlu arqumentlərdən istifadə oluna bilər. Funksiyaya bu zaman ixtiyari sayda açar sözlü olmayan arqumentlər ötürüləcəksə, funksiya parametrinin önünə tək ulduz (*) işarəsi qoyulmalıdır. Əgər funksiyaya ixtiyari sayda açar sözlü arqumentlər ötürüləcəksə, onda da funksiya parametrinin önünə qoşa ulduz (**) işarəsi qoyulmalıdır. Birinci halda ötürüləcək arqumentlər kortejdə, ikinci halda isə lüğətdə toplanmış olacaq. Bir funksiyaya eyni zamanda həm ixtiyari sayda açar sözlü olmayan, həm də ixtiyari sayda açar sözlü arqumentlər ötürülə bilər. Bu halda açar sözlü arqumentlər, açar sözlü olmayan arqumentlərdən sonra yazılmalıdır.
Aşağıdakı nümunələri nəzərdən keçirək:

>>> def fruits(*args): 
        print('Meyvələr\n')
        for i in args: 
            print(i)

>>> fruits('alma', 'armud', 'portağal') 
Meyvələr

alma 
armud 
portağal 
>>>
>>> def fruits(**kwargs): 
        print('Meyvələrdə vitaminlər\n')
        for i in kwargs: 
            print(i, kwargs[i], sep = ': ')

>>> fruits(alma = 'B, C', armud = 'B, C, E, K', 
           portağal = 'A, B, C, E')

Meyvələrdə vitaminlər

armud: B, C, E, K 
portağal: A, B, C, E 
alma: B, C
>>>

Sonda bir məsələni də nəzərinizə çatdıraq ki, funksiyalar bütün növ (mütləq, açar sözlü, default, ixtiyari uzunluqlu) arqumentləri eyni zamanda qəbul edə bilər.

Funksiya arqumentləri” üçün bir şərh

Şərh üçün bağlıdır.