פרמטרים ופונצקיות

הגעתי לקורס עם ידע מוקדם בתכנות בשפת C וC++.
האם בכתיבה בפייתון יש חשיבות להעברה by ref\pointer\val?
או ברמה היותר פרקטית, אם אני מעביר משתנה כפרמטר בפונקציה, האם הפונקציה משפיע עליו בMAIN? במידה ולא, מה הפתרון לעבודה עם פרמטרים רבים?
לדוגמה:
def func(num):
num=3

main:
num=4
func(num)
num=?

תודה!

אם איני טועה, כל דבר בפייתון הוא מצביע (או לייזר), ולכן אין ממש משמעות להעברה by value/by reference וכו’. לא מוכרות לי * למיניהן חוץ מבכפל/חזקה, בניגוד חד ל-C.
לגבי משתנים - ניתן לשנות משתנים mutable בפונקציה אליה שולחים אותם, למשל רשימות - כפי שמוסבר ביתר פירוט ודיוק במחברת 3.5. מטבע הדברים לא ניתן לשנות משתנים immutable בפונקציה, אלא רק לבצע השמה למשתנה אחר - מה שאינו משפיע על המשתנה בפונקציה הקוראת שכן אנו משנים את המצביע ולא את הערך המוצבע.
אם הכוונה שלך היא להחזיר פרמטרים רבים - בנוסף לאפשרות להחזיר רשימה, שבניגוד למערכים ב-C (לפחות ממה שאני יודעת על C) היא יכולה להכיל ערכים מטיפוסים שונים. בנוסף, פייתון מאפשרת להחזיר כמה ערכים ביחד, ארוזים במבנה שנקרא tuple, (כך שזה אמנם פרקטית ערך החזרה יחיד, אבל ניתן לפצל אותו) ואינה מגבילה אותנו לערך יחיד מטיפוס מוגדר מראש.

2 לייקים

מדהים. תודה רבה. מפתיע אותי כל פעם מחדש ההבדלים בין השפות

היי,

[חומר מתקדם, זהירות לבאי האשכול]
כמתכנת C/CPP חשוב שתזהר מ־* – הוא קיים בפייתון אבל הוא עושה משהו אחר לגמרי :x
בפייתון אין לך (כמעט) בכלל התעסקות עם זיכרון, אלא אם אתה מתכנת עבור CPython C API.
בגדול כל השאלות שלך מקבלות תשובה כאן וגם אורפז ענתה מצוין, אבל כהרחבה קלילה –
כשאתה מעביר משתנה אתה מעביר בערך by reference, אבל לא באמת. העברת הפרמטרים בפייתון היא by assignment.

2 לייקים

תודה ים… אסתכל בלינקים שצירפת