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

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-ով.
 
Այսպիսով, «միայն դիրքային արգումենտների» շարահյուսությունը հետևյալն է.
  1. Ֆունկցիայի սահմանման մեջ «միայն դիրքային արգումենտները» դրվում են /-ից առաջ:
  1. Եթե /-ը առկա է ֆունկցիայի սահմանման մեջ, ապա դրանից առաջ եղած արգումենտները համարվում են «միայն դիրքային»:
  1. «Միայն դիրքային արգումենտները» չեն կարող փոխանցվել keyword-ով:
  1. /-ից հետո եղած արգումենտները կարող են փոխանցվել դիրքով կամ 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:
 
To check your solution you need to sign in
Sign in to continue