انتشار زبان برنامه نویسی پایتون 3.10

پس از یک سال توسعه، نسخه قابل توجه زبان برنامه نویسی Python 3.10 ارائه شده است. شعبه جدید به مدت یک سال و نیم پشتیبانی می شود و پس از آن برای سه سال و نیم دیگر، اصلاحاتی برای رفع آسیب پذیری ها برای آن ایجاد می شود.

همزمان، تست آلفای شاخه پایتون 3.11 آغاز شد (طبق برنامه توسعه جدید، کار بر روی شاخه جدید پنج ماه قبل از انتشار شاخه قبلی شروع می شود و تا زمان انتشار بعدی به مرحله تست آلفا می رسد. ). شعبه Python 3.11 به مدت هفت ماه در نسخه آلفا منتشر خواهد شد و در طی آن ویژگی های جدید اضافه شده و باگ ها برطرف خواهند شد. پس از این، نسخه‌های بتا به مدت سه ماه تست می‌شوند و در این مدت افزودن ویژگی‌های جدید ممنوع و تمام توجه به رفع باگ‌ها معطوف خواهد شد. در دو ماه آخر قبل از انتشار، شعبه در مرحله کاندید آزادی خواهد بود که در آن تثبیت نهایی انجام خواهد شد.

موارد اضافه شده جدید به Python 3.10 عبارتند از:

  • عملگرهای "Match" و "case" برای تطبیق الگو، که خوانایی کد را بهبود می بخشد، تطبیق اشیاء دلخواه پایتون را ساده می کند و قابلیت اطمینان کد را از طریق بررسی پیشرفته نوع استاتیک افزایش می دهد. پیاده سازی بسیار شبیه عملگر "Match" ارائه شده در Scala، Rust و F# است که نتیجه یک عبارت مشخص شده را با لیستی از الگوهای فهرست شده در بلوک ها بر اساس عملگر "case" مقایسه می کند.

    def http_error(وضعیت): وضعیت مطابقت: مورد 400: بازگشت "درخواست بد" مورد 401|403|404: بازگشت "مجاز نیست" مورد 418: بازگشت "من یک قوری هستم" مورد _: بازگشت "چیز دیگری"

    باز کردن بسته بندی اشیا، تاپل ها، لیست ها و دنباله های دلخواه برای اتصال متغیرها بر اساس مقادیر موجود امکان پذیر است. مجاز به تعریف الگوهای تو در تو، استفاده از شرایط "if" اضافی در الگو، استفاده از ماسک ("[x, y، *rest]")، نگاشت کلید/مقدار (به عنوان مثال، {"پهنای باند": b، "تأخیر" ”: l} برای استخراج مقادیر "پهنای باند" و "تأخیر" از یک فرهنگ لغت)، الگوهای فرعی را استخراج کنید (اپراتور":=")، از ثابت های نامگذاری شده در یک الگو استفاده کنید. در کلاس‌ها، می‌توان رفتار تطبیق را با استفاده از روش "__match__()" سفارشی کرد.

    از کلاس های داده وارد کلاس داده می شود @dataclass class نقطه: x: int y: int def whereis(point): match point: case Point(0, 0): print("Origin") case Point(0, y): print(f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Somewhere") case _: print("Not a point") مطابقت دارد نقطه: case Point(x, y) if x == y: print(f"Y=X at {x}") case Point(x, y): print(f"نه روی مورب") قرمز، سبز، آبی = 0، 1، 2 رنگ مطابقت: حروف قرمز: چاپ ("من قرمز می بینم!") حروف سبز: چاپ ("علف سبز است") حروف BLUE: چاپ ("من آبی را احساس می کنم :(")

  • اکنون می توان از پرانتز در عبارت with برای تقسیم تعریف مجموعه ای از مدیران زمینه در چندین خط استفاده کرد. همچنین مجاز است که یک کاما بعد از مدیر زمینه نهایی در گروه بگذارید: با (CtxManager1() به عنوان example1، CtxManager2() به عنوان example2، CtxManager3() به عنوان example3، ): ...
  • گزارش بهبود یافته از محل کد خطاهای مربوط به مهاربندهای بسته نشده و نقل قول در حروف رشته ای. به عنوان مثال، هنگامی که یک بریس بسته نشده وجود دارد، به جای گزارش یک خطای نحوی در ساختار زیر، نشانگر اکنون بریس باز را برجسته می‌کند و نشان می‌دهد که هیچ بلوک بسته شدنی وجود ندارد. فایل "example.py"، خط 1 مورد انتظار = {9:1، 18:2، 19:2، 27:3، 28:3، 29:3، 36:4، 37:4، ^SyntaxError: '{' هرگز بسته نشد

    پیام‌های خطای نحو تخصصی اضافی اضافه شده است: از دست دادن نماد ":" قبل از بلوک و در فرهنگ‌های لغت، عدم جداسازی یک تاپل با پرانتز، از دست دادن کاما در لیست‌ها، مشخص کردن بلوک "try" بدون "جز" و "در نهایت"، با استفاده از "= " به جای "= =" در مقایسه، مشخص کردن *-عبارات در رشته های f. علاوه بر این، تضمین می‌کند که کل عبارت مشکل‌ساز برجسته می‌شود، نه فقط ابتدا، و اطلاعات واضح‌تر در مورد زمینه خطاهای مرتبط با تورفتگی نادرست. >>> def foo(): ... اگر lel: ... x = 2 فایل " "، خط 3 x = 2 ^ IndentationError: انتظار می رود یک بلوک تورفتگی بعد از عبارت "if" در خط 2 وجود داشته باشد.

    در خطاهای ناشی از اشتباهات تایپی در نام ویژگی ها و نام متغیرها در یک تابع، توصیه ای با نام صحیح خروجی می شود. >>>collections.namedtoplo Traceback (آخرین تماس اخیر): فایل « "، خط 1، در AttributeError: ماژول 'collections' هیچ ویژگی 'namedtoplo' ندارد. منظورت این بود که: namedtuple؟

  • برای ابزارهای اشکال زدایی و نمایه سازها، رویدادهای ردیابی با شماره خطوط دقیق کد اجرا شده ارائه می شوند.
  • تنظیم sys.flags.warn_default_encoding را برای نمایش اخطاری در مورد خطاهای احتمالی مرتبط با TextIOWrapper و open() در پردازش فایل‌های رمزگذاری‌شده UTF-8 بدون مشخص کردن صریح گزینه «encoding=»utf-8» اضافه کرد (رمزگذاری ASCII به طور پیش‌فرض استفاده می‌شود) . نسخه جدید همچنین امکان تعیین یک مقدار "encoding="locale" را برای تنظیم رمزگذاری بر اساس منطقه فعلی فراهم می کند.
  • یک عملگر جدید به ماژول تایپ اضافه شده است که ابزارهایی را برای تعیین حاشیه نویسی نوع ارائه می دهد و امکان استفاده از نحو "X | Y" برای انتخاب یکی از انواع (نوع X یا نوع Y). def square(شماره: int | float) -> int | float: شماره بازگشت ** 2 معادل ساختار پشتیبانی شده قبلی است: def square(شماره: Union[int, float]) -> Union[int, float]: شماره بازگشت ** 2
  • عملگر Concatenate و متغیر ParamSpec به ماژول تایپ اضافه شده است که به شما امکان می دهد هنگام استفاده از Callable اطلاعات بیشتری را برای بررسی نوع استاتیک ارسال کنید. ماژول تایپ همچنین مقادیر ویژه‌ای TypeGuard را برای حاشیه‌نویسی توابع حفاظت از نوع و TypeAlias ​​را برای تعریف صریح یک نوع مستعار اضافه می‌کند. StrCache: TypeAlias ​​= 'Cache[str]' # یک نوع نام مستعار
  • تابع zip() یک پرچم اختیاری "strict" را پیاده سازی می کند، که وقتی مشخص شد بررسی می کند که آیا آرگومان هایی که تکرار می شوند طول یکسانی دارند یا خیر. >>> لیست(zip(('a', 'b', 'c'), (1, 2, 3), strict=true)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True)) Traceback (آخرین تماس اخیر ): … ValueError: آرگومان zip() 2 طولانی تر از آرگومان 1 است
  • توابع داخلی جدید aiter() و anext() با اجرای آنالوگ های ناهمزمان برای توابع iter() و next() پیشنهاد شده اند.
  • کار سازنده های str()، bytes() و bytearray() هنگام کار با اشیاء کوچک 30 تا 40 درصد تسریع شده است.
  • تعداد عملیات واردات در ماژول runpy را کاهش داد. دستور "python3 -m module_name" به دلیل کاهش ماژول های وارد شده از 1.4 به 69، اکنون به طور متوسط ​​51 برابر سریعتر اجرا می شود.
  • دستورالعمل LOAD_ATTR از مکانیزم ذخیره سازی برای کدهای عملیاتی فردی استفاده می کند که سرعت کار با ویژگی های معمولی را تا 36٪ و با اسلات ها تا 44٪ ممکن می کند.
  • هنگام ساخت پایتون با گزینه «--enable-optimizations»، حالت «-fno-semantic-interposition» اکنون فعال است، که امکان افزایش سرعت مفسر را تا 30 درصد در مقایسه با ساخت با «--enable-shared» فراهم می کند. " گزینه.
  • ماژول‌های hashlib و ssl از OpenSSL 3.0.0 پشتیبانی می‌کنند و از نسخه‌های OpenSSL قدیمی‌تر از 1.1.1 پشتیبانی نمی‌کنند.
  • تجزیه کننده قدیمی حذف شده است که در شاخه قبلی توسط تجزیه کننده PEG (Parsing Expression Grammar) جایگزین شد. ماژول فرمت کننده حذف شده است. پارامتر حلقه از API asyncio حذف شده است. روش هایی که قبلا منسوخ شده بودند حذف شده اند. توابع Py_UNICODE_str* که رشته های Py_UNICODE* را دستکاری می کنند حذف شده اند.
  • ماژول distutils منسوخ شده است و برای حذف در Python 3.12 برنامه ریزی شده است. به جای دیستوتیل ها، توصیه می شود از ماژول های setuptools، packaging، platform، shutil، subprocess و sysconfig استفاده کنید. ساختار wstr در PyUnicodeObject منسوخ شده و برای حذف برنامه ریزی شده است.

منبع: opennet.ru

اضافه کردن نظر