*args (արգումենտներ) և **kwargs (բանալի արգումենտներ)

*args

Python-ում հնարավոր է ֆունկցիաներին փոխանցել կամայական քանակությամբ արգումենտներ *args-ի և **kwargs-ի միջոցով: Դուք կարող եք *args կամ **kwargs պարամետրերին տալ ցանկացած անուն, բայց պայմանականորեն դրանք կոչվում են args (արգումենտներ) և kwargs (keyword արգումենտներ):
*args-ն օգտագործում են այն ժամանակ, երբ հարկավոր է առանց keyword (բանալի) բառերի ֆունկցիային փոխանցել կամայական թվով արգումենտներ։ Ահա մեկ օրինակ.
def add(*args):
    res = 0             # Initialize the final result to 0
    for num in args:    # Loop through the list of passed arguments
        res += num      # add each number to the sum
    return res

print(add(3, 5, 7, 9))  # 24
Այս ծրագրում args-ը tuple է այն արժեքներով, որոնք մենք փոխանցում ենք ֆունկցիային: Այսպիսով, վերը նշված օրինակում, args-երը հավասար են (3, 5, 7, 9): Այս կերպ մենք կարող ենք ցանկացած քանակությամբ արգումենտ փոխանցել մեր ֆունկցիային:

**kwargs

**kwargs-ը թույլ է տալիս փոխանցել կամայական թվով keyword արգումենտներ: Ահա մեկ օրինակ.
def introduce(**kwargs):
    for key, value in kwargs.items():  # Loop through all the key-value pairs
        print(f'{key}: {value}')       # prints each key-value pair

introduce(Name='Alice', Age=25, Country='USA')  
# 'Name: Alice'
# 'Age: 25'
# 'Country: USA'
Վերոնշյալ ծրագրում kwargs-ը բառարան է, որն ունի բանալի-արժեք զույգեր, որոնք մենք փոխանցում ենք ֆունկցիային: Այսպիսով, վերը նշված օրինակում, kwargs-ը հավասար է {'Name': 'Alice', 'Age': 25, 'Country': 'USA'}:
Կարող եք նաև համատեղել *args-ը և **kwargs-ը ֆունկցիայի կանչում: *args-ը պետք է լինի **kwargs-ից առաջ։
def combined_example(*args, **kwargs):
    print(args)    # prints the tuple of arguments
    print(kwargs)  # prints the dictionary of keyword arguments

combined_example(1, 2, 3, Name='Alice', Age=25)  
# (1, 2, 3)
# {'Name': 'Alice', 'Age': 25}
Այս ֆունկցիայում args-ը tuple է (1, 2, 3) արժեքներով, իսկ kwargs-ը բառարան է՝ {'Name': 'Alice', 'Age': 25} արժեքներով:
Ցանկացած թվով արգումենտների և keyword արգումենտների հետ աշխատելու այս ճկունությունը կարող է իսկապես օգտակար լինել, եթե ցանկանում եք, որ ձեր ֆունկցիաները ավելի դինամիկ լինեն:

*args-ի և **kwargs-ի համադրումը ստանդարտ ֆունկցիայի արգումենտների հետ

*args-ը և **kwargs-ը կարող են օգտագործվել ֆունկցիայի ստանդարտ արգումենտների հետ համատեղ: Այս դեպքերում դուք պետք է հիշեք մի քանի կանոն.
  1. Ֆունկցիայի սահմանման մեջ արգումենտների ճիշտ հաջորդականությունը պետք է լինի՝ ստանդարտ արգումենտներ, հետո *args, ապա **kwargs:
  1. Ստանդարտ արգումենտները (նաև հայտնի են որպես դիրքային արգումենտներ) միշտ պետք է փոխանցվեն *args-ից և **kwargs-ից առաջ:
def function_example(a, b, *args, **kwargs):
    print(a)       # print the first standard argument
    print(b)       # print the second standard argument
    print(args)    # print additional non-keyworded arguments
    print(kwargs)  # print keyworded arguments


function_example(1, 2, 3, 4, 5, Name='Alice', Age=25)
# 1
# 2
# (3, 4, 5)
# {'Name': 'Alice', 'Age': 25}
Այստեղ 1-ը և 2-ը ստանդարտ արգումենտներ են, որոնք ֆունկցիայի սահմանման մեջ համապատասխանում են a-ին և b-ին: (3, 4, 5) tuple-ը ներկայացնում է լրացուցիչ արգումենտներ, որոնք խմբավորված են args-ի մեջ: Մնացած keyword արգումենտները խմբավորված են kwargs-ի մեջ՝ որպես բառարան:
*args-ը և **kwargs-ը ստանդարտ արգումենտների հետ կիրառելիս մի՛ մոռացեք default արգումենտների մասին ֆունկցիան կանչելու ժամանակ, քանի որ դա կարող է հանգեցնել TypeError-ի: Օրինակ՝ եթե կանչեք function_example(1, Name='Alice', Age=25) ֆունկցիան առանց b արգումենտին արժեք տրամադրելու, ապա սա կհանգեցնի սխալի:
 
To check your solution you need to sign in
Sign in to continue