Դիրքային և keyword արգումենտներ

Python-ում կոդ գրելիս կարելի է կիրառել դիրքային արգումենտներ, keyword (բանալի) արգումենտներ կամ դրանց համադրությունը ֆունկցիաներ սահմանելու և կանչելու ժամանակ: Այս արգումենտների օգնությամբ կոդը կարող եք դարձնել ավելի հակիրճ և ընթեռնելի:

Դիրքային արգումենտներ

Դիրքային արգումենտներն այն արգումենտներն են, որոնք պետք է փոխանցվեն ֆունկցիային որոշակի հերթականությամբ: Ահա մեկ օրինակ, որտեղ մենք կառուցում ենք պարզ ֆունկցիա՝ ամբողջական անուն ստեղծելու համար.
def full_name(first_name, last_name):
    return f'{first_name} {last_name}'  # Combine the first and last name

print(full_name('Anna', 'Brown'))       # Prints 'Anna Brown'
Վերոնշյալ օրինակում Anna-ն առաջին արգումենտն է, իսկ Brown-ը՝ երկրորդ արգումենտը։ Եթե փոխենք արգումենտների հերթականությունը, ապա կստանանք տարբեր արդյունքներ.
print(full_name('Brown', 'Anna'))       # Prints 'Brown Anna'

Keyword արգումենտներ

Ի տարբերություն դիրքային արգումենտների՝ keyword արգումենտները մեզ հնարավորություն են տալիս՝ նշելու փաստարկի անունը, երբ այն փոխանցում ենք ֆունկցիային՝ այդպիսով մեր կոդը դարձնելով ավելի ընթեռնելի: Բացի այդ, մենք կարող ենք դրանք օգտագործել արգումենտների համար սկզբնադիր արժեքներ (default values) սահմանելու համար:
def full_name(first_name, last_name):
    return f'{first_name} {last_name}'

print(full_name(last_name='Brown', first_name='Anna'))  # Prints 'Anna Brown'
print(full_name(first_name='Anna', last_name='Brown'))  # Prints 'Anna Brown'
Այս դեպքում ստանում ենք նույն արդյունքը, ինչ առաջին օրինակում՝ անկախ փաստարկների հերթականությունից:
 
💡
Կարևոր է նշել, որ ֆունկցիա կանչելիս keyword արգումենտները միշտ պետք է դիրքային արգումենտներից հետո լինեն:
Եթե ֆունկցիայի կանչի ժամանակ keyword արգումենտներն օգտագործեք դիրքային արգումենտներից առաջ, Python-ը syntax-ի (շարահյուսության) սխալ ցույց կտա: Այս կանոնը Python-ին օգնում է տարբերակել նշված երկու արգումենտները: Եթե դիրքային արգումենտները դնեք keyword արգումենտներից հետո, Python-ը կշփոթվի, քանի որ ծրագիրն ակնկալում է, որ բոլոր դիրքային արգումենտներն արդեն սահմանված են: Ահա ֆունկցիան սխալ կանչելու օրինակ, որը կարող է առաջացնել SyntaxError.
def greet(first_name, last_name):
    print('Hello', first_name, last_name)

greet(last_name='Doe', 'John')
# SyntaxError: positional argument follows keyword argument
Այս կանոնը երաշխավորում է, որ ֆունկցիաների կանչերը հստակ են, կոդն ավելի հասկանալի է, իսկ սխալների հավանականությունը՝ քիչ։

Դիրքային և keyword արգումենտների համադրում

Դիտարկենք այս ֆունկցիան, որը ելքում տալիս է ամբողջական անունը, ներառյալ՝ միջին անունը.
# Default values for middle and last names (empty strings)
def full_name(first, middle='', last=''):
    return first + ' ' + middle + ' ' + last

print(full_name('Anna', last='Brown'))                   # 'Anna  Brown'
print(full_name('Anna', middle='Louise', last='Brown'))  # 'Anna Louise Brown'
print(full_name('Anna', 'Louise', last='Brown'))         # 'Anna Louise Brown'
print(full_name('Anna', 'Louise', 'Brown'))              # 'Anna Louise Brown'
print(full_name(first='Anna', 'Louise', last='Brown'))   # SyntaxError
Այս օրինակում անունը հանդես է գալիս որպես դիրքային արգումենտ, մինչդեռ ազգանունը keyword արգումենտ է: Միջին անունը տրված չէ, ուստի այն օգտագործվում է իր սկզբնադիր (default) արժեքով (դատարկ):
Մեկ այլ կարևոր կանոնն այն է, որ երբ սկսում եք կիրառել keyword արգումենտներ, ապա բոլոր հաջորդ արգումենտները պետք է լինեն keyword արգումենտներ: Օրինակ, print(full_name(first='Anna', 'Louise', last='Brown')) կհանգեցնի սխալի, քանի որ keyword արգումենտին (first='Anna') հետևում է դիրքային արգումենտը ('Louise')։
Ի վերջո, եկեք դիտարկենք իրական կյանքի ավելի բարդ օրինակ. ֆունկցիա, որը հաշվարկում է կատարված գնումի ընդհանուր արժեքը, և ունի հարկի և զեղչի ոչ պարտադիր պարամետրեր:
# Default values for tax and discount are set to 0
def calculate_total_cost(price, tax=0.0, discount=0.0):
    return price + price * tax - discount

print(calculate_total_cost(100, tax=0.05))                # 105.0
print(calculate_total_cost(100, discount=10))             # 90.0
print(calculate_total_cost(100, tax=0.05, discount=10))   # 95.0
Այս օրինակում գինը պարտադիր դիրքային արգումենտ է, մինչդեռ հարկը և զեղչը ոչ պարտադիր keyword արգումենտներ են: Եթե տվյալներ չտրամադրվեն, վերջիններս կվերցնեն իրենց սկզբնադիր (default) արժեքները՝ 0:
 
To check your solution you need to sign in