Python 3.6

صدرت النسخة التجريبية الأولى من Python 3.6 في 12 سبتمبر 2016، ويمكن العثور على ملخص للميزات الجديدة هنا:

ميزات بناء الجملة الجديدة

الحالة

PEP 498

تنسيق السلاسل النصية الحرفية

مكتمل

PEP 515

الشرطات السفلية في الأعداد الحرفية

مكتمل

PEP 525

المولّدات غير المتزامنة

PEP 526

بناء جملة توصيفات المتغيرات (مؤقت)

مكتمل

PEP 530

الاستيعابات غير المتزامنة

ميزات مدمجة جديدة

PEP 468

الحفاظ على ترتيب kwargs في الدالة

PEP 487

تخصيص أبسط لإنشاء الأصناف

جزئي [1]

PEP 520

الحفاظ على ترتيب تعريف سمات الصنف

تغييرات المكتبة القياسية

PEP 495

إزالة لبس التوقيت المحلي

PEP 506

إضافة وحدة Secrets إلى المكتبة القياسية

PEP 519

إضافة بروتوكول لمسار نظام الملفات

الأجزاء الداخلية لـ CPython

PEP 509

إضافة نسخة خاصة إلى dict

لن يُنفّذ

PEP 523

إضافة واجهة برمجية لتقييم الإطارات إلى CPython

تغييرات Linux/Windows

PEP 524

جعل os.urandom() محظورة على Linux (أثناء بدء تشغيل النظام)

PEP 528

تغيير ترميز وحدة تحكم Windows إلى UTF-8

PEP 529

تغيير ترميز نظام ملفات Windows إلى UTF-8

تغييرات أخرى في اللغة:

يجب الآن أن تظهر عبارة global أو nonlocal نصيًا قبل أول استخدام للاسم المتأثر في النطاق نفسه. كان هذا في السابق تحذيرًا من نوع SyntaxWarning.

أصبح من الممكن الآن تعيين دالة خاصة إلى None للإشارة إلى أن العملية المقابلة غير متاحة. على سبيل المثال، إذا عيّن الصنف __iter__() إلى None، فإن الصنف يصبح غير قابل للتكرار.

تُختصر الآن التسلسلات الطويلة من أسطر التتبع المكررة على شكل [Previous line repeated {count} more times]

يُطلق الاستيراد الآن الاستثناء الجديد 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__ الخاصة بصنف الصف المُسمّى المُعاد.

أصبح الوسيطان verbose وrename الخاصان بـ namedtuple() الآن بالكلمة المفتاحية فقط.

يمكن الآن تخليل (pickle) نسخ collections.deque التكرارية.

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() الآن بروتوكول مدير السياق.

على Linux، تحظر الآن os.urandom() حتى تتم تهيئة مجمّع إنتروبيا urandom للنظام لزيادة الأمان.

يُتاح الآن استدعاء نظام التشغيل getrandom() الخاص بـ Linux (الحصول على بايتات عشوائية) عبر الدالة الجديدة os.getrandom().

re

أُضيف دعم لمدى المُعدِّلات في التعبيرات النمطية. أمثلة: '(?i:p)ython' يطابق 'python' و'Python' لكن ليس 'PYTHON'؛ '(?i)g(?-i:v)r' يطابق 'GvR' و'gvr' لكن ليس 'GVR'.

يمكن الوصول إلى مجموعات كائن المطابقة عبر __getitem__، وهو ما يكافئ group(). لذا فإن mo['name'] يكافئ الآن mo.group('name').

تدعم كائنات المطابقة الآن الكائنات الشبيهة بالفهارس كفهارس للمجموعات.

socket

تدعم الدالة ioctl() الآن رمز التحكم SIO_LOOPBACK_FAST_PATH.

أصبحت ثوابت getsockopt() وهي SO_DOMAIN وSO_PROTOCOL وSO_PEERSEC وSO_PASSSEC مدعومة الآن.

تدعم setsockopt() الآن الصيغة setsockopt(level, optname, None, optlen: int).

تدعم وحدة socket الآن عائلة العناوين AF_ALG للتفاعل مع واجهة التشفير البرمجية لنواة 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 لتمكين مصادقة ما بعد المصافحة في TLS 1.3 وssl.SSLSocket.verify_client_post_handshake() لبدئها.

struct

تدعم الآن أعداد IEEE 754 ذات الدقة النصفية عبر محدد التنسيق 'e'.

sys

تُعيد الدالة الجديدة getfilesystemencodeerrors() اسم وضع الخطأ المستخدم في التحويل بين أسماء ملفات Unicode وأسماء الملفات الثنائية.

zlib

تقبل الدالتان compress() وdecompress() الآن وسطاء بالكلمات المفتاحية

ملاحظات