שיחה:פייתון

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש

כדאי לבדוק האם אפשר להגדיר את פייתון כתוכנה חופשית או כקוד פתוח. באתר הביית מצויין שהתוכנה היא OSI Certified Open Source. אם הרשיון שלה הוא תואם GPL, רצוי לציין אותה כתוכנה חופשית.

כדאי לבסס על הדף הזה על תרגום של הערך בוויקיפדיה האנגלית.

צורך בהרחבה[עריכת קוד מקור]

יש לי הרגשה שהערך צריך הרחבה נוספת. ברור שבוויקי פייתון יסבירו את כל הפרטים על גנרטורים או הערות פנימיות, אבל גם הערך המתומצת יכול להכיל קצת יותר. שקלתי להוסיף את הסיפור של שם השפה (בעקבות מונטי פייתון, ולא נחש-בריח), ובסוף הוספתי קטגוריה על יתרונות וחסרונות ספורים. אולי עוד בהמשך. Assafsh 19:07, 26 ביולי 2007 (IDT)

רוב הפיתוח בגוגל בפייתון?[עריכת קוד מקור]

לא נשמע לי כל כך הגיוני, הורדתי את המשפט עד ל-citation needed, אם יש כזה בעברית.

שוחזר, עודן ותוקן, ולכל טענה הובא מקור חיצוני. Assafsh - שיחה 16:30, 22 באפריל 2008 (IDT)

שינוי שם הערך[עריכת קוד מקור]

אני רוצה להעביר את הערך לדף פייתון. יש התנגדות? --אלעזר - שיחה 15:56, 17 באוגוסט 2011 (IDT)

מתי נוצרה השפה הזו?[עריכת קוד מקור]

אריק1111 - שיחה 23:24, 28 באפריל 2012 (IDT)


קישור שבור[עריכת קוד מקור]

במהלך מספר ריצות אוטומטיות של הבוט, נמצא שהקישור החיצוני הבא אינו זמין. אנא בדקו אם הקישור אכן שבור, ותקנו אותו או הסירו אותו במקרה זה!

--Matanyabot - שיחה 02:20, 16 במאי 2013 (IDT)

פונקציות לא יכולות לשנות ערכים[עריכת קוד מקור]

"פונקציות בשפה אינן יכולות לגרום לשנות את הערך של המצביע שהועבר אליהן - הן יכולות רק לגרום לאותו שם להיות מוגדר מחדש בפונקציה."

פרט לניסוח הבעייתי משהו ("לגרום לשנות"), זה גם לא מדויק. פונקציה יכולה לשנות כל אובייקט Mutable (לדוגמה רשימות, מילונים).

5.22.135.44 04:34, 23 במרץ 2014 (IST)

הניסוח מדוייק. פונקציות יכולות לשנות את הערך של האובייקט שהועבר אליהן, אך לא ניתן להעביר by reference. לא ניתן לשנות משתנה שנמצא בצד שקורא לפונקציה. אפשר לנסות להבהיר את הנקודה הזאת. המילה "לגרום" השתרבבה בטעות כנראה. --אלעזר - שיחה 16:44, 28 במרץ 2014 (IDT)


הי אלעזר. לדעתי הניסוח לא רק שאינו מדויק, אלא גם מטעה. בפייתון הכל מועבר by-object, כך שדיון בהעברה by-value/by reference אינו רלוונטי. פונקציות לא מקבלות מצביע לאובייקט כפי שנטען בערך. הטענה שפונקציה חייבת להגדיר מחדש שם של משתנה כדי לשנות אותו אינה נכונה לאובייקטים בני-שינוי. לגבי הטענה כי לא ניתן לשנות משתנה בצד הקורא - זה לא מדוייק. לדוגמה אם הצד הקורא הוא ה-scope הגלובלי, הפונקציה יכולה להשתמש במילה global כדי לפנות\לשנות את הערך החיצוני. ניתן לקרוא עוד כאן:

https://www.jeffknupp.com/blog/2012/11/13/is-python-callbyvalue-or-callbyreference-neither/

Sevarious - שיחה 15:18, 31 במרץ 2014 (IDT)

הנקודה הקריטית שמי שקורא את הערך צריך לצאת איתה, היא שבוודאי אין כאן זה העברה by reference. זאת נקודה שחייבים להבהיר כי המילה "רפרנס" מופיעה לעתים קרובות בהקשר של פייתון, ובצדק; פעולת הכריכה של משתנים היא בדיוק "סמנטיקת רפרנס", בלי קשר לטרמינולוגיה המועדפת עליך. הדוגמא של swap שמופיעה בערך מסבירה את הנקודה כאן. הדוגמה הזאת תקפה בדיוק באותה מידה גם עבור משתנים שמתייחסים לאובייקטים ברי-שינוי, כגון רשימות.
בפוסט הוא מתייחס לזה שמשתנים בפייתון אינם שמות של אזורים בזיכרון; זה נכון גם לגבי משתנים בשפת ג'אווה. יש הבדל אחד: השמות של המשתנים, בתור מחרוזת, הם בעלי משמעות. ברוב המוחלט של הפעולות זה לא משפיע בכלל; זה משפיע כמעט רק בהקשרים כמו eval, exec ופעולות שמתעסקות ב __dict__ - כלומר, הקשרים שמנצלים את עצם העובדה שפייתון היא שפה דינמית.
למיטב ידיעתי, המונח "by-object" לא מונח מקובל בתיאוריה של שפות תכנות, עם סיבה טובה: הוא לא מוסיף שום דבר. אין שום דבר "חדש" במודל הזה מאז LISP וסמולטוק. התיאור שלו זהה לתיאור בערך של העברה by-value, עבור משתנים המקיימים reference semantics; הערך שמועבר איננו הערך של תוכן האובייקט, אלא פרט המידע שמאפשר ביצוע של הכריכה אל האובייקט, כלומר פרט המידע שמחזיק המשתנה. במקרה של CPython, זה בדיוק הכתובת בזיכרון של האובייקט; במימושים אחרים זה יכול להיות משהו אחר. (בערך, רפרנס לעתים נקרא באופן לא-מדויק "מצביע" כדי שאנשים שמגיעים מ-C או ++C יקבלו מושג כלשהו).
"הטענה שפונקציה חייבת להגדיר מחדש שם של משתנה כדי לשנות אותו אינה נכונה לאובייקטים בני-שינוי." - הניסוח הזה כמות שהוא איננו מופיע בערך, ואתה מבלבל כאן בין משתנה ובין אובייקט. משתנים (שמות בתוכנית המאפשרים גישה לאובייקטים) הם ברי-שינוי תמיד בפייתון: הפעולה x=y משנה את x. אובייקטים הם לעתים ברי שינוי ולעתים לא, אבל (א) זה לא רלוונטי לניסוח כמו שהוא בערך, (ב) לא ידוע לי על פעולה שתשנה את תוצאת הפעלת הפונקציה id על אובייקט. למיטב ידיעתי פעולה כזאת אסורה בהגדרת השפה (גם למימושים אחרים מ CPython).
לגבי Global, גם כאן אתה מערבב דברים; פונקציה אכן יכולה לשנות כריכה של משתנים גלובליים, או לא-לוקאליים (עם המילה nonlocal), אבל לא בעזרת המידע שמועבר אליה בתהליך הקריאה. פונקציה גם יכולה לחטט במחסנית הקריאות ולעשות כל מיני דברים מוזרים אחרים. זה לא באמת נוגע לדיון.
בקיצור, אני מציע לרדת מהדיון הזה כמו שהוא כרגע. ניסיתי לשנות מעט את הניסוח; אם יש לך הצעה לניסוח אחר שיבהיר טוב יותר לקורא איזה פעולות הוא יצליח לעשות ואיזה לא, אתה מוזמן להציע אותו. --אלעזר - שיחה 04:47, 13 באפריל 2014 (IDT)