Python 3.9

Python 3.9.0 (סופית) שוחררה ב-5 באוקטובר 2020. התכונות עבור 3.9 מוגדרות ב-PEP 596 ותיאור מפורט של השינויים ניתן למצוא ב-What’s New in Python 3.9

תכונות

סטטוס

PEP 573

גישה מהירה למצב המודול ממתודות של טיפוסי הרחבה ב-C

לא רלוונטי

PEP 584

אופרטורי איחוד נוספו ל-dict

הושלם [1]

PEP 585

Type hinting של טיפוסים גנריים באוספים סטנדרטיים

PEP 593

הערות גמישות לפונקציות ולמשתנים

PEP 602

CPython מאמצת מחזור שחרור שנתי. במקום שנתי, השאיפה היא למחזור שחרור של חודשיים

לא רלוונטי

PEP 614

הגבלות דקדוק מרוככות על דקורטורים

PEP 615

מסד הנתונים של אזורי הזמן של IANA נמצא כעת בספריית התקן במודול zoneinfo

PEP 616

מתודות מחרוזת להסרת קידומות וסיומות

PEP 617

CPython משתמשת כעת בפרסר חדש המבוסס על PEG

לא רלוונטי

שינויים נוספים בשפה:

__import__() מעלה כעת ImportError במקום ValueError

הושלם

Python מקבלת כעת את הנתיב המוחלט של שם קובץ הסקריפט שצוין בשורת הפקודה (לדוגמה: python3 script.py): התכונה __file__ של מודול ה-__main__ הפכה לנתיב מוחלט, ולא לנתיב יחסי

כברירת מחדל, לקבלת הביצועים הטובים ביותר, ארגומנט errors נבדק רק בשגיאת הקידוד/הפענוח הראשונה וארגומנט encoding נעלם לעיתים עבור מחרוזות ריקות

”“.replace(”“, s, n) מחזירה כעת s במקום מחרוזת ריקה עבור כל n שאינו אפס. היא עקבית כעת עם ”“.replace(”“, s)

כל ביטוי תקף יכול כעת לשמש כדקורטור. בעבר, הדקדוק היה מגביל הרבה יותר

הרצה מקבילה של aclose() / asend() / athrow() אסורה כעת, ו-ag_running משקף כעת את סטטוס ההרצה בפועל של הגנרטור האסינכרוני

שגיאות בלתי צפויות בקריאה למתודה __iter__ אינן מוסתרות עוד על ידי TypeError באופרטור in ובפונקציות contains(), indexOf() ו-countOf() של מודול ה-operator

ביטויי lambda ללא סוגריים אינם יכולים עוד להיות חלק הביטוי בסעיף if בהשמות (comprehensions) ובביטויי גנרטור

שינויים במודולים מובנים:

asyncio

בשל חששות אבטחה משמעותיים, פרמטר ה-reuse_address של asyncio.loop.create_datagram_endpoint() אינו נתמך עוד

נוספה coroutine חדשה shutdown_default_executor() שמתזמנת כיבוי עבור ה-executor המוגדר כברירת מחדל אשר ממתינה לסיום הסגירה של ה-ThreadPoolExecutor. כמו כן, asyncio.run() עודכנה לשימוש ב-coroutine החדשה.

נוספה asyncio.PidfdChildWatcher, מימוש child watcher ספציפי ל-Linux אשר דוגם מתארי קבצים של תהליכים

נוספה coroutine asyncio.to_thread() חדשה

בעת ביטול המשימה עקב timeout, asyncio.wait_for() תמתין כעת עד שהביטול יושלם גם במקרה שבו timeout הוא <= 0, כפי שהיא עושה עם timeouts חיוביים

asyncio מעלה כעת TyperError בעת קריאה למתודות לא תואמות עם socket מסוג ssl.SSLSocket

gc

איסוף אשפה אינו חוסם על אובייקטים שתחיו (resurrected)

נוספה פונקציה חדשה gc.is_finalized() לבדיקה אם אובייקט עבר finalize על ידי אוסף האשפה

math

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

נוספה math.lcm(): מחזירה את הכפולה המשותפת הקטנה ביותר של הארגומנטים שצוינו

נוספה math.nextafter(): מחזירה את ערך הנקודה הצפה הבא אחרי x לכיוון y

נוספה math.ulp(): מחזירה את ערך הסיבית הפחות משמעותית של מספר נקודה צפה

os

נחשפו os.pidfd_open() ו-os.P_PIDFD הספציפיים ל-Linux

הפונקציה os.unsetenv() זמינה כעת גם ב-Windows

הושלם

הפונקציות os.putenv() ו-os.unsetenv() זמינות כעת תמיד

הושלם

נוספה פונקציה os.waitstatus_to_exitcode(): ממירה סטטוס המתנה לקוד יציאה

random

נוספה מתודה חדשה random.Random.randbytes: מייצרת בתים אקראיים

sys

נוספה תכונה חדשה sys.platlibdir: שם ספריית הספרייה הספציפית לפלטפורמה

בעבר, sys.stderr הייתה מאוחסנת בבלוקים (block-buffered) כשלא אינטראקטיבית. כעת stderr ברירת מחדל היא תמיד מאוחסנת בשורות (line-buffered)

הערות