נושא
לכתוב פונקציות
def, return, טווח הכרה, וארגומנטים.
השלד
>>> def greet(name, greeting="Hello"):
... """Builds a greeting.
...
... :param name: who to greet
... :type name: str
... :param greeting: the opening word
... :type greeting: str
... :return: the full greeting
... :rtype: str
... """
... return greeting + ", " + name
...
>>> greet("Noa")
'Hello, Noa'
>>> greet("Noa", "Hi")
'Hi, Noa'
>>> greet(greeting="Hey", name="Noa")
'Hey, Noa'
| חלק | מה זה |
|---|---|
def greet(...): |
הגדרה. לא מריצה כלום |
name |
פרמטר חובה |
greeting="Hello" |
פרמטר עם ברירת מחדל. רק אחרי פרמטרי החובה |
"""...""" |
docstring. help(greet) מציג אותו |
return |
מה שהפונקציה מחזירה |
greet("Noa") |
קריאה. "Noa" הוא הארגומנט |
greeting="Hey" |
ארגומנט לפי שם. הסדר לא משנה |
print או return
print |
return |
|
|---|---|---|
| מה קורה | מוצג על המסך | חוזר למי שקרא |
| אפשר לשמור במשתנה | לא | כן |
| מה הפונקציה מחזירה | None |
את הערך |
>>> def show(x):
... print(x * 2)
...
>>> def give(x):
... return x * 2
...
>>> a = show(5)
10
>>> b = give(5)
>>> print(a, b)
None 10
כמעט תמיד רוצים return. פונקציה שמחזירה ערך אפשר לשלב בחישוב,
בתנאי, או בפונקציה אחרת.
כמה ערכים
>>> def min_max(numbers):
... return min(numbers), max(numbers)
...
>>> low, high = min_max([4, 9, 1])
>>> low, high
(1, 9)
חוזר טאפל, ופורקים אותו לכמה משתנים.
טווח הכרה
| מוגדר | מוכר | |
|---|---|---|
| גלובלי | מחוץ לפונקציות | בכל מקום |
| לוקאלי | בתוך פונקציה | רק בתוכה |
>>> x = "global"
>>> def f():
... x = "local"
... return x
...
>>> f()
'local'
>>> x
'global'
השמה בתוך פונקציה יוצרת משתנה לוקאלי חדש, גם אם יש גלובלי באותו
שם. לוקאלי קודם לגלובלי. global x משנה את זה, וזה לא מומלץ.
פונקציה היא אובייקט
>>> double = give
>>> double(7)
14
>>> sorted(["ccc", "a", "bb"], key=len)
['a', 'bb', 'ccc']
שם בלי סוגריים הוא הפונקציה עצמה. כך מעבירים len ל-key.
איפה זה תופס אתכם
- שכחתם סוגריים:
greetלא מריץ כלום, ואין שגיאה - שכחתם ארגומנט:
TypeError: ... missing 1 required positional argument - ברירת מחדל באמצע:
def f(a=1, b):הואSyntaxError - משתנה לוקאלי מבחוץ:
NameError printבמקוםreturn: הפונקציה מחזירהNone, ומה שבא אחריה נשבר
בדיקה עצמית
- מה מחזירה
def f(): pass? - האם מותר
def f(a, b=2, c=3):? - עם
greetמלמעלה: מה יחזירgreet("Dan", greeting="Yo")? def add(a, b): print(a + b), ואזtotal = add(1, 2) * 2. מה יקרה?
תשובות. 1: None. 2: כן. כל הפרמטרים עם ברירת המחדל בסוף. 3: 'Yo,
Dan'. 4: יודפס 3, ואז TypeError, כי add מחזירה None, ואי אפשר
להכפיל None.