לפייתון מספר מנגנונים מורכבים להעברת פרמטרים לפונקציות, אותם נסקור כאן.
פרמטר או ארגומנט?
במקום בו מוגדרת הפונקציה, כותבים בתוך הסוגריים פרמטרים, שהם שמות המתארים את האובייקטים אותם צריך להעביר לפונקציה לצורך עבודתה.
במקום בו קוראים לפונקציה (כלומר מפעילים אותה), כותבים ביטויים היוצרים את האובייקטים הללו, אותם נעביר לפונקציה. אלה נקראים ארגומנטים.
הנה דוגמא:
def add_nums(a, b):
my_sum = a + b
return my_sum
print(add_nums(3, 5+7)) # prints 15
x=7
y=9
print(add_nums(x,y+1)) # prints 17
בדוגמא, הפונקציה מקבלת שני פרמטרים (a ו – b), ומחזירה את הסכום שלהם.
קוראים לפונקציה פעמיים, ומעבירים לה ארגומטים שונים בכל פעם.
בקריאה הראשונה, הארגומנטים נכתבים ישירות בתוך הסוגריים, ואחד הארגומנטים מבהיר כי הארגומנטים הם ביטויים שיש לחשב את הערך שלהם (התוצאה היא במקרה זה הצבעה לאובייקט מסוג int, שערכו 12.
בקריאה השנייה מעבירים את ההצבעה על האובייקט ש – x מצביע עליו, ובארגומנט השני שוב מחשבים את ערך הביטוי.
האמת היא שכל הארגומנטים הם ביטויים, שמחשבים את ערכם (שהוא אובייקט כלשהו) ומעבירים את ההצבעה על האובייקט לפונקציה.
שם (בפונקציה) הפרמטרים יצביעו על אותם אובייקטים – אלה שהועברו.
אפשר לקרוא כאן על ההבדל בין פרמטר לארגומנט.
ערכי ברירת מחדל לארגומנטים
(default argument values)
בדרך כלל, בקריאה לפונקציה, סדר הארגומנטים וכמותם צריך להתאים לסדר ולכמות של הפרמטרים.
דוגמא:
def sub_nums(a, b):
my_sum = a - b
return my_sum
print(sub_nums(6, 9)) # prints -3
print(sub_nums(9, 6)) # prints 3
לפונקציה שני פרמטרים, וצריך לתת אותם לפי הסדר הרצוי (אחרת החישוב יהיה שגוי).
אם רוצים, אפשר לתת ערך ברירת מחדל (default value), ואז לא חייבים להעביר את הארגומנט המדובר בזמן הקריאה.
דוגמא:
def div_it(a, b=100):
return a/b
print(div_it(3,10)) # prints 0.3
print(div_it(3)) # prints 0.03
ועכשיו – עושים סדר:
קודם באים פרמטרים ללא ברירת מחדל (כאלה שחייבים להעביר להם ערך), ורק אחר כך פרמטרים עם ערכי ברירת מחדל.
הנה דוגמא לשגיאה:
def add_something(a=100, b):
return a+b
print(add_something(10,80))
למרות הקריאה הנכונה, הגדרת הפונקציה שגוייה.
הודעת השגיאה שהוצגה:
SyntaxError: non-default argument follows default argument
(המשך בחלק השני)