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) | |
ملاحظات