Python 3.10

Python 3.10.0 (גרסה סופית) שוחררה ב-4 באוקטובר 2021. המאפיינים של 3.10 מוגדרים ב-PEP 619, ותיאור מפורט של השינויים ניתן למצוא ב-מה חדש ב-Python 3.10.

מאפייני תחביר חדשים

סטטוס

PEP 634

התאמת תבניות מבנית: מפרט

[1]

PEP 635

התאמת תבניות מבנית: מוטיבציה וטיעון

[1]

PEP 636

התאמת תבניות מבנית: מדריך

[1]

bpo-12782

מנהלי הקשר בסוגריים מותרים כעת באופן רשמי

מאפיינים חדשים בספרייה הסטנדרטית

PEP 618

הוספת בדיקת אורך אופציונלית ל-zip

שיפורים במפרש

PEP 626

מספרי שורה מדויקים עבור ניפוי באגים וכלים אחרים

מאפייני typing חדשים

PEP 604

אפשרות לכתוב טיפוסי איחוד בצורה X | Y

PEP 613

כינויי טיפוס מפורשים

PEP 612

משתני מפרט פרמטרים

הוצאות משימוש, הסרות או הגבלות חשובות

PEP 644

דרישת OpenSSL 1.1.1 או חדש יותר

PEP 632

הוצאה משימוש של מודול distutils.

לא רלוונטי

PEP 623

הוצאה משימוש והכנה להסרה של האיבר wstr ב-PyUnicodeObject.

לא רלוונטי

PEP 624

הסרת ממשקי ה-API של מקודד Py_UNICODE

לא רלוונטי

PEP 597

הוספת EncodingWarning אופציונלי

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

לטיפוס int יש מתודה חדשה int.bit_count(), המחזירה את מספר האחדות בהרחבה הבינארית של מספר שלם נתון, הידוע גם כספירת אוכלוסייה (population count).

לתצוגות שמוחזרות על ידי dict.keys(), dict.values() ו-dict.items() יש כעת תכונת mapping המספקת אובייקט types.MappingProxyType העוטף את המילון המקורי.

PEP 618: לפונקציה zip() יש כעת דגל strict אופציונלי, המשמש כדי לדרוש שלכל האיטרבילים יהיה אורך זהה.

פונקציות מובנות ופונקציות הרחבה המקבלות ארגומנטים שלמים אינן מקבלות עוד אובייקטים מסוג Decimal, Fractionואובייקטים אחרים שניתן להמיר למספרים שלמים רק עם אובדן (לדוגמה כאלה שיש להם את המתודה __int__() אך אין להם את המתודה __index__()).

אם object.__ipow__() מחזירה NotImplemented, האופרטור יחזור כראוי אל object.__pow__() ו-object.__rpow__() כצפוי.

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

לפונקציות יש תכונה חדשה __builtins__ המשמשת לחיפוש סמלים מובנים כאשר פונקציה מורצת, במקום חיפוש בתוך __globals__['__builtins__']. התכונה מאותחלת מתוך __globals__["__builtins__"] אם הוא קיים, אחרת מתוך הסמלים המובנים הנוכחיים.

שתי פונקציות מובנות חדשות – aiter() ו-anext() נוספו כדי לספק מקבילות אסינכרוניות ל-iter() ו-next(), בהתאמה.

מתודות סטטיות (@staticmethod) ומתודות מחלקה (@classmethod) יורשות כעת את תכונות המתודה (__module__, __name__, __qualname__, __doc__, __annotations__) ויש להן תכונה חדשה __wrapped__. יתרה מזאת, מתודות סטטיות ניתנות כעת לקריאה כפונקציות רגילות.

הערות (annotations) ליעדים מורכבים (כל דבר מלבד יעדי simple name המוגדרים על ידי PEP 526) אינן גורמות עוד לכל השפעה בזמן ריצה עם from __future__ import annotations.

אובייקטי מחלקה ומודול יוצרים כעת מילוני annotations ריקים באופן עצל לפי דרישה. מילוני ה-annotations נשמרים ב-__dict__ של האובייקט לצורך תאימות לאחור. הדבר משפר את שיטות העבודה המומלצות לעבודה עם __annotations__.

הערות (annotations) המורכבות מ-yield, yield from, await או ביטויים בעלי שם אסורות כעת תחת from __future__ import annotations בשל תופעות הלוואי שלהן.

שימוש במשתנים לא מאוגדים, ב-super() ובביטויים אחרים העלולים לשנות את עיבוד טבלת הסמלים, מעובד כעת ללא השפעה כאשר הם משמשים כהערות (annotations) תחת from __future__ import annotations.

ערכי גיבוב (hashes) של ערכי NaN מטיפוס float ומטיפוס decimal.Decimal תלויים כעת בזהות האובייקט. בעבר, הם תמיד גובבו ל-0 למרות שערכי NaN אינם שווים זה לזה. הדבר גרם להתנהגות זמן ריצה ריבועית פוטנציאלית עקב התנגשויות גיבוב מוגזמות בעת יצירת מילונים וקבוצות המכילים מספר ערכי NaN.

SyntaxError (במקום NameError) תיזרק בעת מחיקת הקבוע __debug__.

לחריגות SyntaxError יש כעת תכונות end_lineno ו-end_offset. הן יהיו None אם לא נקבעו.

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

asyncio

הוספת המתודה החסרה connect_accepted_socket().

array

למתודה index() של array.array יש כעת פרמטרים אופציונליים start ו-stop.

gc

הוספת ווי ביקורת (audit hooks) עבור gc.get_objects(), gc.get_referrers() ו-gc.get_referents().

hashlib

מודול hashlib דורש OpenSSL 1.1.1 או חדש יותר.

למודול hashlib יש תמיכה ראשונית ב-OpenSSL 3.0.0.

המימוש החלופי הטהור ב-Python של pbkdf2_hmac() הוצא משימוש. בעתיד PBKDF2-HMAC יהיה זמין רק כאשר Python נבנה עם תמיכת OpenSSL.

os

הוספת תמיכה ב-os.cpu_count() עבור VxWorks RTOS.

הוספת פונקציה חדשה os.eventfd() ועוזרים קשורים כדי לעטוף את קריאת המערכת eventfd2 ב-Linux.

הוספת os.splice() המאפשרת העברת נתונים בין שני מתארי קבצים ללא העתקה בין מרחב הכתובות של הליבה למרחב הכתובות של המשתמש, כאשר אחד ממתארי הקבצים חייב להפנות לצינור (pipe).

הוספת O_EVTONLY, O_FSYNC, O_SYMLINK ו-O_NOFOLLOW_ANY עבור macOS.

platform

הוספת platform.freedesktop_os_release() כדי לאחזר זיהוי של מערכת ההפעלה מקובץ התקן freedesktop.org os-release.

socket

החריגה socket.timeout היא כעת כינוי של TimeoutError.

הוספת אפשרות ליצירת שקעי MPTCP עם IPPROTO_MPTCP.

הוספת אפשרות IP_RECVTOS לקבלת שדות סוג השירות (ToS) או DSCP/ECN.

ssl

מודול ssl דורש OpenSSL 1.1.1 או חדש יותר.

למודול ssl יש תמיכה ראשונית ב-OpenSSL 3.0.0 ואפשרות חדשה OP_IGNORE_UNEXPECTED_EOF.

פונקציות שהוצאו משימוש ושימוש בקבועים שהוצאו משימוש גורמים כעת ל-DeprecationWarning. ל-ssl.SSLContext.options יש את OP_NO_SSLv2 ו-OP_NO_SSLv3 מוגדרים כברירת מחדל, ולכן אינם יכולים להזהיר על הגדרת הדגל שוב.

למודול ssl יש כעת הגדרות ברירת מחדל מאובטחות יותר. צפנים ללא סודיות קדימה (forward secrecy) או עם SHA-1 MAC מושבתים כברירת מחדל. רמת אבטחה 2 אוסרת מפתחות RSA, DH ו-ECC חלשים עם פחות מ-112 ביטים של אבטחה. SSLContext מוגדר כברירת מחדל לגרסת הפרוטוקול המינימלית TLS 1.2. ההגדרות מבוססות על המחקר של Hynek Schlawack.

הפרוטוקולים שהוצאו משימוש SSL 3.0, TLS 1.0 ו-TLS 1.1 אינם נתמכים עוד באופן רשמי. Python אינו חוסם אותם באופן פעיל. עם זאת, אפשרויות בנייה של OpenSSL, תצורות הפצה, תיקוני ספק ומערכי צפנים עשויים למנוע לחיצת יד (handshake) מוצלחת.

הוספת פרמטר timeout לפונקציה ssl.get_server_certificate().

מודול ssl משתמש בטיפוסי ערימה (heap-types) ובאתחול רב-שלבי.

נוסף דגל אימות חדש VERIFY_X509_PARTIAL_CHAIN.

sys

הוספת התכונה sys.orig_argv: רשימת ארגומנטי שורת הפקודה המקוריים שהועברו לקובץ ההפעלה של Python.

הוספת sys.stdlib_module_names, המכיל את רשימת שמות המודולים של הספרייה הסטנדרטית.

_thread

_thread.interrupt_main() מקבלת כעת מספר אות (signal) אופציונלי לדמות (ברירת המחדל עדיין signal.SIGINT).

הערות