Միայն դիրքային արգումենտներ
Python ծրագրավորման լեզուն ուսումնասիրելիս դուք կհանդիպեք «ֆունկցիայի արգումենտներ» հասկացությանը: Python-ում գոյություն ունեն ֆունկցիաներին արգումենտներ փոխանցելու տարբեր եղանակներ: Մենք կարող ենք ունենալ սկզբնադիր (default) արգումենտներ, keyword արգումենտներ և դիրքային արգումենտներ: Բայց կան արգումենտներ, որոնք կարող են ներկայանալ միայն դիրքով, ոչ թե keyword-ով։ Դրանք հայտնի են՝ «միայն դիրքային արգումենտներ» անվանումով:
Սկսած Python 3.8-ից՝ ֆունկցիաների սահմանումների մեջ կա հատուկ շարահյուսություն
/
, որը ցույց է տալիս, որ որոշ արգումենտներ միայն դիրքային են: Միայն դիրքային արգումենտները ֆունկցիայի սահմանման մեջ դրվում են /
-ից առաջ:Դիտարկենք հետևյալ ֆունկցիան, որը գումարում է երեք թվեր.
def add_numbers(a, b, c):
return a + b + c
Մենք կարող ենք կանչել այս ֆունկցիան՝ փոխանցելով արգումենտներ այն հերթականությամբ, որով դրանք սահմանված են, այսինքն՝ ըստ դիրքի․
print(add_numbers(10, 20, 30))
# outputs: 60
Մենք ֆունկցիան կարող ենք նաև կանչել՝ օգտագործելով արգումենտների անունները, այսինքն՝ keyword-ով.
print(add_numbers(a=10, b=20, c=30))
# outputs: 60
Սակայն կլինեն դեպքեր, երբ ուզում ենք համոզվել, որ որոշ արգումենտներ միշտ ներկայացվում են կոնկրետ հերթականությամբ: Հենց այստեղ է, որ միայն դիրքային արգումենտներն այդքան օգտակար են: Եկեք փոփոխենք
add_numbers
ֆունկցիան, որպեսզի a
-ն և b
-ն լինեն միայն դիրքային․def add_numbers(a, b, /, c):
return a + b + c
Մենք դեռ կարող ենք կանչել այս ֆունկցիան դիրքային արգումենտներով.
print(add_numbers(10, 20, 30)) # 60
print(add_numbers(a=10, b=20, c=30)) # TypeError
print(add_numbers(10, 20, c=30)) # 60
Սակայն եթե փորձենք ֆունկցիան կանչել «միայն դիրքային արգումենտներով»՝ որպես keyword արգումենտներ, ապա կստանանք
TypeError
: Այս դեպքում մենք պետք է տրամադրենք a
-ն և b
-ն՝ ըստ իրենց դիրքերի։ c
արգումենտը կարող է փոխանցվել կամ դիրքով, կամ keyword-ով.Այսպիսով, «միայն դիրքային արգումենտների» շարահյուսությունը հետևյալն է.
- Ֆունկցիայի սահմանման մեջ «միայն դիրքային արգումենտները» դրվում են
/
-ից առաջ:
- Եթե
/
-ը առկա է ֆունկցիայի սահմանման մեջ, ապա դրանից առաջ եղած արգումենտները համարվում են «միայն դիրքային»:
- «Միայն դիրքային արգումենտները» չեն կարող փոխանցվել keyword-ով:
/
-ից հետո եղած արգումենտները կարող են փոխանցվել դիրքով կամ keyword-ով:
Արդյո՞ք Python-ում կան ներկառուցված ֆունկցիաներ, որոնք ունեն միայն դիրքային արգումենտներ:
Այո՛, Python-ում բազմաթիվ ներկառուցված ֆունկցիաներ ունեն միայն դիրքային արգումենտներ:
abs()
ֆունկցիան ասվածի լավ օրինակ է.help(abs)
# Help on built-in function abs in module builtins:
# abs(x, /)
# Return the absolute value of the argument.
abs(-6) # 6
abs(x=-6) # TypeError: abs() takes no keyword arguments
x
պարամետրը abs
-ում միայն դիրքային արգումենտ է, և երբ կանչելիս մենք փորձում ենք այն փոխանցել ֆունկցիային որպես keyword արգումենտ, ծրագիրը վերադարձնում է TypeError
: