פייתון/פייתון גרסה 3/פונקציות המתכנת: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
Steeve815 (שיחה | תרומות)
אין תקציר עריכה
שורה 24:
הפונקציה מסתיימת בפקודת return. <ref> כיום לא חייב לרשום את הפקודה מפני שתכנת רבות משלימות פקודה זו ועדין מקובל למען הסדר הטוב לציין אותה</ref>
 
<sourcesyntaxhighlight lang = "python">
def <name>(<parameters >):
'''documentation'''
<Statements>
return
</sourcesyntaxhighlight>
 
===מבנה הפונקציה===
שורה 36:
* '''Statements''' הם רצף של פקודות רצופות אותם מקליד המשתמש. במידה ותרצו לדלג על כתיבת הפונקציה תוחלפו להעזר ב-pass.
* '''arguments''' הוא ביטוי אותו מקליד המשתמש וגורם לפונקציה לפעול. למשל, אחת הפונקציות הראשונות שהכרנו הייתה type, באמצעותה יכולה המשתמש לדעת מה הטיפוס אותו הוא מקליד במערכת.
<sourcesyntaxhighlight lang = "python">
<<<type ('I love you')
<<class ‘str’>
</syntaxhighlight>
</source>
::המחרוזת "I love you" היא הארגומנט של הפונקציה באמצעותה המערכת מתחילה לפעול. ניתן לייבא ארגומנטים גם דרך ה-#[[פייתון/פייתון גרסה 3/הרצת פקודה בפייתון דרך ה-cmd|שורת הפקודות]]
** פרמטר הוא סוג של ארגומנט
שורה 48:
 
הפונקציה צריכה להראות כך:
<sourcesyntaxhighlight lang = "python">
def hello_world ():
print('hello world! I love you!')
return
</sourcesyntaxhighlight>
 
בכדי לקרוא לה נקליד את הקלט:
<sourcesyntaxhighlight lang = "python">
>>>hello world()
hello world! I love you!
</syntaxhighlight>
</source>
 
לקרוא למיקום הפונקציה בזכרון:
<sourcesyntaxhighlight lang = "python">
print(hello_world)
>>><function hello_world at 0x03B1BAE0>
</syntaxhighlight>
</source>
 
נשם לב שקריאה לפונקציה עצמה מחזירה את מיקומה בזכרון.
שורה 71:
פרמטרים (Parameters) - מציין אלו ארגומנטים המערכת יכולה לקבל מהמשתמש. כאשר אותם ארגומנטים מוקלדים מתרחשת הפעלת הפונקציה. רשימה זו יכולה להיות ריקה. לפני הפרמטרים ניתן להציב פונקציות
 
<sourcesyntaxhighlight lang = "python">
def solve(a,b):
return 2*a+5*b
שורה 78:
>>>print(x)
 
</syntaxhighlight>
</source>
: בדוגמה זו שני פרמטרים מפעילים את הפונקציה.
 
=== ברירת מחדל של פרמטרים (parameters default value) ===
ניתן להגדיר שאם פרמטר אינו מוקלד תבחר הפונקציה מספר אותו הגדיר המתכנת כברירת מחדל, המוגדר על ידי שיוויון (ראה את הפרמטר area).
<sourcesyntaxhighlight lang = "python">
def area_triangle(a, b, area=2):
print(a*b *(1/area))
שורה 90:
>>> area_triangle(4,5,6)
3.333333333333333
</syntaxhighlight>
</source>
:במקרה השני הפונקציה לא השתמש בברירת המחדל אלא בפרמטר אותו בחר המשתמש.
 
שורה 97:
===*args ===
כאשר אנו לא יודעים כמה פרמטר יכניס המשתמש, למשל, מה הגילאים של הילדים של משתמש זה או אחר נעזר בכוכבית.
<sourcesyntaxhighlight lang = "python">
#the function is print a name and the numbers of kids the person has
 
שורה 108:
Dani
(2, 23, 45, 65)
</syntaxhighlight>
</source>
 
===**kwargs ===
<sourcesyntaxhighlight lang = "python">
 
def data_print(**data):
שורה 119:
>>>{'name': 'Alon'}
 
</syntaxhighlight>
</source>
 
===שגיאות נפוצות===
שורה 126:
נשם לב שפונקציה מטבעה אינה יודעת מה טיפוס של הפרמטר אותו מכניסים אליה. מבחינתה כל טיפוס יכול להיות פרמטר אך לא בהכרח שרצף הפקודות בתוכה יתאים לכל טיפוס של פרמטר וזו אחת הסיבות שחשוב לרשום ב - documentation הסבר על כל פרמטר אותו מקבלת הפונקציה וטיפוסו.
 
<sourcesyntaxhighlight lang = "python">
 
def multiplication(str1, str2):
שורה 142:
return str1 * str2
TypeError: can't multiply sequence by non-int of type 'str'
</syntaxhighlight>
</source>
 
==return==
שורה 148:
 
===החזרת ערך חזרה יחיד===
<sourcesyntaxhighlight lang = "python">
def square(x):
return x*x
>>> square(5)
25
</syntaxhighlight>
</source>
 
===החזרת שני ערך חזרה ===
החזרת שני ערך חזרה מתבצע באמצעות פסיקים:
<sourcesyntaxhighlight lang = "python">
 
x=0
שורה 165:
>>> square(4)
(16, 12)
</syntaxhighlight>
</source>
 
===פעולות אחרי return===
כל פעולה אחרי ה-return היא חסרת משמעות אלא אם ערך ההחזרה נמצא בתנאים ואינו מסיים את פעולת הפונקציה:
 
<sourcesyntaxhighlight lang = "python">
 
def name_Alex():
שורה 176:
print('Dana')
 
</syntaxhighlight>
</source>
 
==ערך החזרה ==
שורה 183:
פונקציה עם retun מחזירות "ערך חזרה" (return value) בו ניתן להשתמש עבור ערכים אחרים.
 
<sourcesyntaxhighlight lang = "python">
def minute(second=1):
return second / 60
שורה 194:
print('minutes in an hour : ' + str(hours(minute())))
 
</syntaxhighlight>
</source>
 
נבצע הפעלה:
<sourcesyntaxhighlight lang = "python">
value return 0.016666666666666666
minutes in an hour : 0.0002777777777777778
</syntaxhighlight>
</source>
 
הפונקציה שניות (minute) יכולה להריץ עצמה באמצעות ברירת המחדל ומייצרת ערך החזרה 0.166.
שורה 209:
none הוא ערך מיוחד אשר משמש להציג ערך אבסולוטי. כאמור כל פונקציה שאינה מחזירה ערך חזרה, מחזירה את ערך ה-none כאשר היא אינה מדפיסה אותו.
 
<sourcesyntaxhighlight lang = "python">
def hello_world():
print('hello_world')
שורה 218:
hello_world
None
</syntaxhighlight>
</source>
המשתנה x מפעיל את הפונקציה שלנו hello world. נאחר שהיא ללא ערך חזרה מדפיס לנו פיתון שלפונקציה hello_world אין ערך (none).
 
שורה 232:
 
אם במהלך התיעוד הפונקציה משנה רשימה (או טיפוס שניתן לשנותו) לרשימה אחרת יש לרשום זאת בתיעוד הפונקציה. בדוגמה הבא מטרת הפונקציה לשנות את הרשימה אך במקרים רבות זהו שלב אחד בהגדרת הפונקציה:
<sourcesyntaxhighlight lang = "python">
def zero_lst(lst):
lst[0]=0
שורה 239:
zero_lst(list_1)
print(list_1)
</syntaxhighlight>
</source>
 
==משתנים גלובליים, מקומיים==
המשתנים והפרמטרים בפונקציה נקראים '''"משתנים מקומיים"''' (Local variables) לעומת הפרמטרים שנמצאים מחוץ לפונקציה ונקראים '''"משתנים גלובלים"''' (global). בעוד אנו יכולים לשנות את המשתנים המקומיים, לא נוכל לשנות את הערכים הגלובליים.
 
<sourcesyntaxhighlight lang = "python">
 
x=0
שורה 252:
 
print(x)
</syntaxhighlight>
</source>
 
<math>x=0</math> הוא משתנה גלובלי. <math>x=2</math> הוא משתנה של הפונקציה. בד"כ מקובל לתת שמות שונים לערך מקומי וגלובלי באותו רצף של פקודות.
שורה 260:
כאמור, פרק משתנים, פייתון זוכרת את המשתנה האחרון שהוקלד בה:
 
<sourcesyntaxhighlight lang = "python">
y=0
def a():
שורה 274:
>>>1
>>>the vaule of y is: 0
</syntaxhighlight>
</source>
 
פייתון מזהה את המשתנה y המוגדר בתוך הפונקציה כאחד ולכן הדפיסה אחד. מחוץ לפונקציה, המשתנה y=0 ולכן ההדפסה עבורו היא 0.
שורה 284:
'''פונקציה ללא משתנה גלובלי תחזיר הודעת שגיאה:'''
 
<sourcesyntaxhighlight lang = "python">
counter = 1
def number():
שורה 297:
counter +=1
UnboundLocalError: local variable 'counter' referenced before assignment
</syntaxhighlight>
</source>
 
אם נרצה להגדיר את המשתנה שבפונקציה לפי המשתנה הגלובלי נוכל להעזר ב-global:
<sourcesyntaxhighlight lang = "python">
counter = 1
def number():
שורה 309:
print(counter)
>>>4
</syntaxhighlight>
</source>
 
הפונקציה global מקבלת את המשתנה הגלובלי ומפעילה אותו בפונקציה. נשם לב כי המשתנה ה'''גלובלי''' שנה את ערכו!
שורה 315:
==הערכים של פונקציה==
נבחן את הערכים שמחזירה פונקציה:
<sourcesyntaxhighlight lang = "python">
 
def exm (a,b):
שורה 335:
<class 'tuple'>
<class 'int'>
</syntaxhighlight>
</source>
 
כלומר הערכים תלויים בפרמטר אותם נציב אל הפונקציה