Python 3.9¶
صدرت النسخة Python 3.9.0 (النهائية) في 5 أكتوبر 2020. ميزات الإصدار 3.9 معرّفة في PEP 596 ويمكن العثور على وصف تفصيلي للتغييرات في ما الجديد في Python 3.9
الميزات |
الحالة |
|
وصول سريع إلى حالة الوحدة من طرق أنواع امتدادات C |
غير ذي صلة |
|
إضافة عوامل الاتحاد إلى dict |
مكتمل [1] |
|
تلميحات الأنواع العامة في المجموعات القياسية |
||
توصيفات مرنة للدوال والمتغيرات |
||
يتبنى CPython دورة إصدار سنوية. بدلًا من السنوية، نهدف إلى دورة إصدار كل شهرين |
غير ذي صلة |
|
تخفيف قيود القواعد النحوية على المُزخرِفات (decorators) |
||
أصبحت قاعدة بيانات المناطق الزمنية IANA موجودة الآن في المكتبة القياسية ضمن وحدة zoneinfo |
||
طرق سلاسل نصية لإزالة البادئات واللواحق |
||
يستخدم CPython الآن مُحلِّلًا نحويًا جديدًا قائمًا على PEG |
غير ذي صلة |
تغييرات أخرى في اللغة:
تُطلق الآن __import__() الاستثناء ImportError بدلًا من ValueError |
مكتمل |
يحصل Python الآن على المسار المطلق لاسم ملف البرنامج النصي المحدد في سطر الأوامر (مثال: python3 script.py): أصبحت السمة __file__ للوحدة __main__ مسارًا مطلقًا، بدلًا من مسار نسبي |
|
افتراضيًا، ولأفضل أداء، يُتحقق من الوسيط errors فقط عند أول خطأ في الترميز/فك الترميز، ويُتجاهل أحيانًا الوسيط encoding بالنسبة للسلاسل الفارغة |
|
تُعيد الآن "".replace("", s, n) القيمة s بدلًا من سلسلة فارغة لجميع قيم n غير الصفرية. وأصبحت الآن متسقة مع "".replace("", s) |
|
يمكن الآن استخدام أي تعبير صالح كمُزخرِف (decorator). كانت القواعد النحوية في السابق أكثر تقييدًا بكثير |
|
أصبح التشغيل المتوازي لـ aclose() / asend() / athrow() محظورًا الآن، وتعكس ag_running الآن حالة التشغيل الفعلية للمولّد غير المتزامن |
|
لم تعد الأخطاء غير المتوقعة في استدعاء الطريقة __iter__ تُحجب بواسطة TypeError في العامل in والدوال contains() وindexOf() وcountOf() الخاصة بوحدة operator |
|
لم يعد بإمكان تعبيرات lambda غير المحاطة بأقواس أن تكون الجزء التعبيري في عبارة if ضمن الاستيعابات وتعبيرات المولّدات |
تغييرات على الوحدات المدمجة:
بسبب مخاوف أمنية كبيرة، لم يعد المعامل reuse_address الخاص بـ asyncio.loop.create_datagram_endpoint() مدعومًا |
|
أُضيف كوروتين جديد shutdown_default_executor() يجدول إيقاف تشغيل المنفِّذ الافتراضي الذي ينتظر انتهاء ThreadPoolExecutor من الإغلاق. كما حُدّثت asyncio.run() لاستخدام الكوروتين الجديد. |
|
أُضيفت asyncio.PidfdChildWatcher، وهي تنفيذ مراقب أبناء خاص بـ Linux يستطلع واصفات ملفات العمليات |
|
أُضيف كوروتين جديد coroutine asyncio.to_thread() |
|
عند إلغاء المهمة بسبب انتهاء المهلة، ستنتظر الآن asyncio.wait_for() حتى يكتمل الإلغاء، وذلك أيضًا في حالة كون المهلة <= 0، مثلما تفعل مع المهل الموجبة |
|
تُطلق asyncio الآن TyperError عند استدعاء طرق غير متوافقة مع مقبس ssl.SSLSocket |
|
لا يتوقف جمع المهملات عند الكائنات المُعاد إحياؤها |
|
أُضيفت دالة جديدة gc.is_finalized() للتحقق مما إذا كان الكائن قد جرى إنهاؤه بواسطة جامع المهملات |
|
وُسّعت الدالة math.gcd() للتعامل مع وسطاء متعددة. كانت في السابق تدعم وسيطين فقط |
|
أُضيفت math.lcm(): تُعيد المضاعف المشترك الأصغر للوسطاء المحددة |
|
أُضيفت math.nextafter(): تُعيد قيمة الفاصلة العائمة التالية بعد x باتجاه y |
|
أُضيفت math.ulp(): تُعيد قيمة أقل بت دلالة (least significant bit) لعدد ذي فاصلة عائمة |
|
أُتيحت os.pidfd_open() وos.P_PIDFD الخاصتان بـ Linux |
|
أصبحت الدالة os.unsetenv() متاحة الآن على Windows أيضًا |
مكتمل |
أصبحت الدالتان os.putenv() وos.unsetenv() متاحتين دائمًا الآن |
مكتمل |
أُضيفت دالة os.waitstatus_to_exitcode(): تحوّل حالة الانتظار إلى رمز خروج |
|
أُضيفت طريقة جديدة random.Random.randbytes: تولّد بايتات عشوائية |
|
أُضيفت سمة جديدة sys.platlibdir: اسم دليل المكتبة الخاص بالمنصة |
|
في السابق، كانت sys.stderr مخزّنة على شكل كتل (block-buffered) في الوضع غير التفاعلي. أما الآن فإن stderr تتخذ افتراضيًا التخزين السطري الدائم (line-buffered) |
|
ملاحظات