Python 3.8¶
صدرت النسخة Python 3.8.0 (النهائية) في 14 أكتوبر 2019. ميزات الإصدار 3.8 معرّفة في PEP 569 ويمكن العثور على وصف تفصيلي للتغييرات في ما الجديد في Python 3.8.
الميزات |
الحالة |
|
الوسطاء الموضعية فقط |
||
تعبيرات الإسناد |
مكتمل |
|
بروتوكول pickle رقم 5 مع بيانات خارج النطاق |
||
خطافات التدقيق أثناء التشغيل |
||
تهيئة إعدادات بدء تشغيل Python |
||
Vectorcall: بروتوكول استدعاء سريع لـ CPython |
||
متفرقات |
||
تدعم سلاسل f المساواة = للتعبيرات ذاتية التوثيق وتصحيح الأخطاء |
مكتمل |
|
تغييرات أخرى في اللغة:
كانت عبارة continue غير مسموح بها في عبارة finally بسبب مشكلة في التنفيذ. في Python 3.8 رُفع هذا القيد |
مكتمل |
تمتلك الأنواع bool وint وfractions.Fraction الآن طريقة as_integer_ratio() مثل تلك الموجودة في float وdecimal.Decimal |
|
ستستخدم الآن منشئات int وfloat وcomplex الطريقة الخاصة __index__() إن كانت متاحة وكانت الطريقة المقابلة __int__() أو __float__() أو __complex__() غير متاحة |
|
أُضيف دعم لرموز الهروب N{name} في التعبيرات النمطية |
|
أصبحت dict وعروض dict الآن قابلة للتكرار بترتيب الإدراج العكسي باستخدام reversed() |
|
زاد تقييد بناء الجملة المسموح به لأسماء الكلمات المفتاحية في استدعاءات الدوال. على وجه الخصوص، لم تعد f((keyword)=arg) مسموحًا بها |
|
لم يعد التفكيك المعمَّم للعناصر القابلة للتكرار في عبارتي yield وreturn يتطلب أقواسًا محيطة |
|
عند فقدان فاصلة في كود مثل [(10, 20) (30, 40)]، يعرض المُصرِّف تحذيرًا من نوع SyntaxWarning مع اقتراح مفيد |
|
تُعيد الآن العمليات الحسابية بين الأصناف الفرعية لـ datetime.date أو datetime.datetime وكائنات datetime.timedelta نسخة من الصنف الفرعي، بدلًا من الصنف الأساسي |
|
عند مقاطعة مفسّر Python بواسطة Ctrl-C (SIGINT) وعدم التقاط استثناء KeyboardInterrupt الناتج، تخرج عملية Python الآن عبر إشارة SIGINT أو برمز الخروج الصحيح بحيث تستطيع العملية المُستدعِية اكتشاف أنها انتهت بسبب Ctrl-C |
|
تتطلب بعض الأنماط المتقدمة من البرمجة تحديث كائن types.CodeType لدالة موجودة |
|
بالنسبة للأعداد الصحيحة، تسمح الآن صيغة الوسطاء الثلاثة لدالة pow() بأن يكون الأس سالبًا في الحالة التي يكون فيها الأساس أوليًا نسبيًا بالنسبة إلى المعامل التقسيمي (modulus) |
|
جرت مزامنة استيعابات dict مع dict الحرفية بحيث يُحسب المفتاح أولًا والقيمة ثانيًا |
|
يمكن الآن للطريقة object.__reduce__() أن تُعيد صفًا (tuple) بطول من عنصرين إلى ستة عناصر |
تغييرات على الوحدات المدمجة:
ترقّت asyncio.run() من الواجهة البرمجية المؤقتة إلى المستقرة |
مكتمل |
تشغيل python -m asyncio يُطلق REPL غير متزامن أصليًا |
|
يرث الاستثناء asyncio.CancelledError الآن من BaseException بدلًا من Exception ولم يعد يرث من concurrent.futures.CancelledError |
مكتمل |
أُضيفت asyncio.Task.get_coro() للحصول على الكوروتين المُغلّف داخل asyncio.Task |
|
يمكن الآن تسمية مهام asyncio، إما بتمرير الوسيط بالكلمة المفتاحية name إلى asyncio.create_task() أو طريقة حلقة الأحداث create_task()، أو باستدعاء الطريقة set_name() على كائن المهمة |
|
أُضيف دعم لـ Happy Eyeballs إلى asyncio.loop.create_connection(). لتحديد السلوك، أُضيف معاملان جديدان: happy_eyeballs_delay وinterleave. |
|
يمكن الآن لـ get_objects() أن تستقبل معاملًا اختياريًا للجيل (generation) يشير إلى الجيل الذي تُجلب منه الكائنات. (لاحظ مع ذلك أنه على الرغم من أن gc مدمجة، فإن get_objects() غير منفّذة في MicroPython) |
|
أُضيفت دالة جديدة math.dist() لحساب المسافة الإقليدية بين نقطتين |
|
وُسّعت الدالة math.hypot() للتعامل مع أبعاد متعددة |
|
أُضيفت دالة جديدة math.prod() كدالة مماثلة لـ sum() تُعيد حاصل ضرب قيمة "البداية" (الافتراضية: 1) مضروبة في عناصر قابلة للتكرار من الأعداد |
|
أُضيفت دالتان توافيقيتان جديدتان math.perm() وmath.comb() |
|
أُضيفت دالة جديدة math.isqrt() لحساب الجذور التربيعية الصحيحة الدقيقة دون التحويل إلى الفاصلة العائمة |
|
لم تعد الدالة math.factorial() تقبل وسطاء ليست شبيهة بالأعداد الصحيحة |
مكتمل |
أُضيفت دالة جديدة sys.unraisablehook() التي يمكن تجاوزها للتحكم في كيفية معالجة "الاستثناءات غير القابلة للإطلاق" |
|