Python 3.6

Python 3.6 beta 1 שוחררה ב-12 בספטמבר 2016, וניתן למצוא כאן סיכום של התכונות החדשות:

תכונות תחביר חדשות

סטטוס

PEP 498

עיצוב מחרוזות ליטרליות

הושלם

PEP 515

קווים תחתונים בליטרלים מספריים

הושלם

PEP 525

גנרטורים אסינכרוניים

PEP 526

תחביר להערות משתנים (זמני)

הושלם

PEP 530

השמות אסינכרוניות (comprehensions)

תכונות מובנות חדשות

PEP 468

שימור הסדר של kwargs בפונקציה

PEP 487

התאמה אישית פשוטה יותר של יצירת מחלקות

חלקי [1]

PEP 520

שימור סדר הגדרת תכונות המחלקה

שינויים בספריית התקן

PEP 495

פתרון אי-בהירות של זמן מקומי

PEP 506

הוספת מודול Secrets לספריית התקן

PEP 519

הוספת פרוטוקול נתיב מערכת קבצים

רכיבים פנימיים של CPython

PEP 509

הוספת גרסה פרטית ל-dict

לא ייושם

PEP 523

הוספת API להערכת frame ל-CPython

שינויים ב-Linux/Windows

PEP 524

הפיכת os.urandom() לחוסמת ב-Linux (במהלך אתחול המערכת)

PEP 528

שינוי קידוד מסוף Windows ל-UTF-8

PEP 529

שינוי קידוד מערכת הקבצים של Windows ל-UTF-8

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

הצהרת global או nonlocal חייבת כעת להופיע טקסטואלית לפני השימוש הראשון בשם המושפע באותו תחום (scope). בעבר זו הייתה SyntaxWarning.

כעת ניתן להגדיר מתודה מיוחדת כ-None כדי לציין שהפעולה המתאימה אינה זמינה. לדוגמה, אם מחלקה מגדירה את __iter__() כ-None, המחלקה אינה ניתנת לאיטרציה.

רצפים ארוכים של שורות traceback חוזרות מקוצרים כעת ל-[Previous line repeated {count} more times]

פעולת import מעלה כעת את החריגה החדשה ModuleNotFoundError כאשר אין באפשרותה למצוא מודול. קוד שכרגע בודק את ImportError (ב-try-except) עדיין יעבוד.

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

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

array

איטרטורים מוצים של array.array יישארו כעת מוצים גם אם המערך עליו מבוצעת האיטרציה הורחב.

binascii

הפונקציה b2a_base64() מקבלת כעת ארגומנט מילת מפתח אופציונלי newline לשליטה בשאלה אם תו השורה החדשה מצורף לערך המוחזר

הושלם

cmath

הקבוע החדש cmath.tau (τ) נוסף

קבועים חדשים: cmath.inf ו-cmath.nan כדי להתאים ל-math.inf ו-math.nan, וגם cmath.infj ו-cmath.nanj כדי להתאים לפורמט שבו משתמש repr של מספרים מרוכבים

collections

מחלקת הבסיס המופשטת החדשה Collection נוספה כדי לייצג מחלקות מכולה ניתנות לאיטרציה בעלות גודל

מחלקת הבסיס המופשטת החדשה Reversible מייצגת מחלקות ניתנות לאיטרציה שמספקות גם את המתודה __reversed__().

מחלקת הבסיס המופשטת החדשה AsyncGenerator מייצגת גנרטורים אסינכרוניים.

הפונקציה namedtuple() מקבלת כעת ארגומנט מילת מפתח אופציונלי module, אשר, כשמצוין, משמש עבור התכונה __module__ של מחלקת ה-named tuple המוחזרת.

הארגומנטים verbose ו-rename של namedtuple() הם כעת מילות מפתח בלבד.

מופעי collections.deque רקורסיביים ניתנים כעת לעיבוד pickle.

hashlib

פונקציות הגיבוב BLAKE2 נוספו למודול. blake2b() ו-blake2s() זמינות תמיד ותומכות במלוא מערך התכונות של BLAKE2.

פונקציות הגיבוב SHA-3 sha3_224(), sha3_256(), sha3_384(), sha3_512(), ופונקציות הגיבוב SHAKE shake_128() ו-shake_256() נוספו.

פונקציית גזירת המפתח מבוססת הסיסמה scrypt() זמינה כעת עם OpenSSL 1.1.0 ומעלה.

json

json.load() ו-json.loads() תומכות כעת בקלט בינארי. JSON מקודד צריך להיות מיוצג באמצעות UTF-8, UTF-16 או UTF-32.

math

הקבוע החדש math.tau (τ) נוסף

הושלם

os

מתודה חדשה close() מאפשרת סגירה מפורשת של איטרטור scandir(). איטרטור scandir() תומך כעת בפרוטוקול מנהל ההקשר (context manager).

ב-Linux, os.urandom() חוסמת כעת עד שמאגר האנטרופיה urandom של המערכת מאותחל, כדי להגביר את האבטחה.

קריאת המערכת getrandom() של Linux (קבלת בתים אקראיים) חשופה כעת כפונקציה החדשה os.getrandom().

re

נוספה תמיכה בטווחי modifier בביטויים רגולריים. דוגמאות: »(?i:p)ython« מתאים ל-»python« ול-»Python«, אך לא ל-»PYTHON«; »(?i)g(?-i:v)r« מתאים ל-»GvR« ול-»gvr«, אך לא ל-»GVR«.

ניתן לגשת לקבוצות של אובייקט match באמצעות __getitem__, שהוא שקול ל-group(). כך ש-mo[»name«] שקול כעת ל-mo.group(»name«).

אובייקטי match תומכים כעת באובייקטים דמויי-אינדקס כאינדקסים של קבוצות.

socket

הפונקציה ioctl() תומכת כעת בקוד הבקרה SIO_LOOPBACK_FAST_PATH.

הקבועים SO_DOMAIN, SO_PROTOCOL, SO_PEERSEC ו-SO_PASSSEC של getsockopt() נתמכים כעת.

setsockopt() תומכת כעת בצורה setsockopt(level, optname, None, optlen: int).

מודול socket תומך כעת במשפחת הכתובות AF_ALG לממשק עם crypto API של ליבת Linux. ALG_, SOL_ALG ו-sendmsg_afalg() נוספו.

קבועי Linux חדשים TCP_USER_TIMEOUT ו-TCP_CONGESTION נוספו.

ssl

ssl תומך ב-OpenSSL 1.1.0. הגרסה המינימלית המומלצת היא 1.0.2.

3DES הוסר מחבילות הצפנים המוגדרות כברירת מחדל וחבילות הצפנים ChaCha20 Poly1305 נוספו.

ל-SSLContext יש כעת תצורת ברירת מחדל טובה יותר עבור אפשרויות וצפנים.

ניתן להעתיק הפעלת SSL מחיבור צד-לקוח אחד לאחר באמצעות המחלקה החדשה SSLSession. חידוש הפעלת TLS יכול להאיץ את לחיצת היד הראשונית, להפחית השהיה ולשפר ביצועים.

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

כל הקבועים והדגלים הומרו ל-IntEnum ול-IntFlags.

פרוטוקולי TLS ספציפיים לצד שרת ולצד לקוח עבור SSLContext נוספו.

נוספו SSLContext.post_handshake_auth לאיפשור ו-ssl.SSLSocket.verify_client_post_handshake() ליזום אימות post-handshake של TLS 1.3.

struct

תומך כעת במספרים בנקודה צפה בדיוק חצי לפי IEEE 754 באמצעות מציין הפורמט »e«.

sys

הפונקציה החדשה getfilesystemencodeerrors() מחזירה את שם מצב השגיאה המשמש להמרה בין שמות קבצים ב-Unicode לשמות קבצים בבתים.

zlib

הפונקציות compress() ו-decompress() מקבלות כעת ארגומנטים של מילות מפתח

הערות