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() שניתן לדרוס כדי לשלוט כיצד מטופלות ”חריגות שאינן ניתנות להעלאה“ |
|