Python 3.8¶
Python 3.8.0 (סופית) שוחררה ב-14 באוקטובר 2019. התכונות עבור 3.8 מוגדרות ב-PEP 569 ותיאור מפורט של השינויים ניתן למצוא ב-What’s New in Python 3.8.
תכונות | סטטוס | |
ארגומנטים מיקומיים-בלבד | ||
ביטויי השמה | הושלם | |
פרוטוקול Pickle 5 עם נתונים מחוץ-לתחום (out-of-band) | ||
ווי ביקורת בזמן ריצה (Runtime audit hooks) | ||
תצורת אתחול של Python | ||
Vectorcall: פרוטוקול קריאה מהיר ל-CPython | ||
שונות | ||
f-strings תומכות ב-= לביטויים מתעדים-עצמית ולניפוי באגים | הושלם | |
שינויים נוספים בשפה:
הצהרת continue הייתה אסורה בסעיף finally בשל בעיה במימוש. ב-Python 3.8 הגבלה זו הוסרה | הושלם |
לטיפוסים bool, int ו-fractions.Fraction יש כעת מתודה as_integer_ratio() כמו זו הקיימת ב-float וב-decimal.Decimal | |
הבנאים של int, float ו-complex ישתמשו כעת במתודה המיוחדת __index__(), אם היא זמינה והמתודה המתאימה __int__(), __float__() או __complex__() אינה זמינה | |
נוספה תמיכה ב-escapes מסוג N{name} בביטויים רגולריים | |
Dict ו-dictviews ניתנים כעת לאיטרציה בסדר הכנסה הפוך באמצעות reversed() | |
התחביר המותר עבור שמות מילות מפתח בקריאות לפונקציות הוגבל עוד יותר. בפרט, f((keyword)=arg) אינו מותר עוד | |
פריקה (unpacking) כללית של איטרבילים בהצהרות yield ו-return אינה דורשת עוד סוגריים עוטפים | |
כאשר חסר פסיק בקוד כגון [(10, 20) (30, 40)], המהדר מציג SyntaxWarning עם הצעה מועילה | |
פעולות אריתמטיות בין תת-מחלקות של datetime.date או datetime.datetime לבין אובייקטי datetime.timedelta מחזירות כעת מופע של תת-המחלקה, ולא של מחלקת הבסיס | |
כאשר מפרש Python נקטע על ידי Ctrl-C (SIGINT) וחריגת ה-KeyboardInterrupt הנובעת מכך אינה נתפסת, תהליך Python יוצא כעת באמצעות אות SIGINT או עם קוד היציאה הנכון כך שהתהליך הקורא יכול לזהות שהוא מת עקב Ctrl-C | |
כמה סגנונות תכנות מתקדמים דורשים עדכון של אובייקט types.CodeType עבור פונקציה קיימת | |
עבור מספרים שלמים, הצורה בעלת שלושת הארגומנטים של הפונקציה pow() מתירה כעת למעריך להיות שלילי במקרה שבו הבסיס זר יחסית למודולוס | |
השמות dict (dict comprehensions) סונכרנו עם ליטרלי dict כך שהמפתח מחושב ראשון והערך שני | |
המתודה object.__reduce__() יכולה כעת להחזיר tuple באורך של שניים עד שישה איברים |
שינויים במודולים מובנים:
asyncio.run() עברה מ-API זמני ל-API יציב | הושלם |
הרצת python -m asyncio מפעילה REPL אסינכרוני מקורי | |
החריגה asyncio.CancelledError יורשת כעת מ-BaseException ולא מ-Exception ואינה יורשת עוד מ-concurrent.futures.CancelledError | הושלם |
נוספה asyncio.Task.get_coro() לקבלת ה-coroutine העטוף בתוך asyncio.Task | |
ניתן כעת לתת שמות למשימות asyncio, על ידי העברת ארגומנט מילת המפתח name ל-asyncio.create_task() או למתודת לולאת האירועים create_task(), או על ידי קריאה למתודה set_name() על אובייקט המשימה | |
נוספה תמיכה ב-Happy Eyeballs ל-asyncio.loop.create_connection(). כדי לציין את ההתנהגות, נוספו שני פרמטרים חדשים: happy_eyeballs_delay ו-interleave. | |
get_objects() יכולה כעת לקבל פרמטר generation אופציונלי המציין דור שממנו לקבל אובייקטים. (שימו לב, עם זאת, שלמרות ש-gc היא מובנית, get_objects() אינה ממומשת ב-MicroPython) | |
נוספה פונקציה חדשה math.dist() לחישוב מרחק אוקלידי בין שתי נקודות | |
הורחבה הפונקציה math.hypot() לטיפול במספר ממדים | |
נוספה פונקציה חדשה, math.prod(), כפונקציה אנלוגית ל-sum() המחזירה את המכפלה של ערך ”start“ (ברירת מחדל: 1) כפול איטרביל של מספרים | |
נוספו שתי פונקציות קומבינטוריות חדשות math.perm() ו-math.comb() | |
נוספה פונקציה חדשה math.isqrt() לחישוב שורשים ריבועיים שלמים מדויקים ללא המרה לנקודה צפה | |
הפונקציה math.factorial() אינה מקבלת עוד ארגומנטים שאינם דמויי-int | הושלם |
נוספה פונקציה חדשה sys.unraisablehook() שניתן לדרוס כדי לשלוט כיצד מטופלות ”חריגות שאינן ניתנות להעלאה“ | |