تازه‌های پایتون 3.4

نویسنده:

R. David Murray <rdmurray@bitdance.com> (ویراستار)

این مقاله ویژگی‌های جدید پایتون 3.4 را در مقایسه با 3.3 توضیح می‌دهد. پایتون 3.4 در ۱۶ مارس ۲۰۱۴ منتشر شد. برای جزئیات کامل، به فهرست تغییرات مراجعه کنید.

همچنین ملاحظه نمائید

PEP 429 -- زمان‌بندی انتشار پایتون 3.4

خلاصه -- نکات برجسته‌ی انتشار

ویژگی‌های جدید سینتکس:

  • هیچ ویژگی نحوی جدیدی در Python 3.4 اضافه نشد.

سایر قابلیت‌های جدید:

ماژول‌های جدید کتابخانه:

ماژول‌های کتابخانه‌ای با بهبودهای چشمگیر:

بهبودهای امنیتی:

بهبودهای پیاده‌سازی سی‌پایتون:

لطفاً ادامه را بخوانید تا فهرست جامعی از تغییرات قابل مشاهده برای کاربر را ببینید؛ این فهرست شامل بسیاری از بهبودهای کوچک‌تر دیگر، بهینه‌سازی‌های سی‌پایتون، موارد منسوخ‌شده و مسائل احتمالی انتقال است.

قابلیت‌های جدید

PEP 453: بوت‌استرپینگ صریح PIP در نصب‌های پایتون

بوت‌استرپینگ pip به‌صورت پیش‌فرض

ماژول جدید ensurepip (تعریف‌شده در PEP 453) سازوکاری استاندارد و چندسکویی برای بوت‌استرپینگِ نصب‌کننده‌ی pip در نصب‌های پایتون و محیط‌های مجازی فراهم می‌کند. نسخه‌ی pip که همراه Python 3.4.0 ارائه می‌شود، pip 1.5.4 است و نسخه‌های نگهداری 3.4.x در آینده، نسخه‌ی همراه را به آخرین نسخه‌ی pip که در زمان ایجاد نسخه‌ی نامزد انتشار (release candidate) در دسترس است، به‌روزرسانی خواهند کرد.

به‌طور پیش‌فرض، دستورهای pipX و pipX.Y روی همه‌ی پلتفرم‌ها (که در آن X.Y نشان‌دهنده‌ی نسخه‌ی پایتون نصب‌شده است) همراه با بسته‌ی پایتونی pip و وابستگی‌های آن نصب خواهند شد. روی ویندوز و در محیط‌های مجازی روی همه‌ی پلتفرم‌ها، دستور pip بدون نسخه نیز نصب خواهد شد. روی پلتفرم‌های دیگر، دستور pip سراسریِ بدون نسخه معمولاً به نسخه‌ی پایتون 2 اشاره می‌کند که جداگانه نصب‌شده است.

ابزار خط فرمان pyvenv و ماژول venv از ماژول ensurepip استفاده می‌کنند تا pip به‌سادگی در محیط‌های مجازی در دسترس باشد. هنگام استفاده از ابزار خط فرمان، pip به‌صورت پیش‌فرض نصب می‌شود، در حالی که هنگام استفاده از ماژول venv API، نصب pip باید به‌طور صریح درخواست شود.

برای سی‌پایتون، ساخت از کد منبع در سیستم‌های POSIX، دستورهای make install و make altinstall به‌طور پیش‌فرض pip را بوت‌استرپ می‌کنند. این رفتار را می‌توان از طریق گزینه‌های configure کنترل کرد و از طریق گزینه‌های Makefile بازنویسی کرد.

در ویندوز و مک او اس ایکس، نصب‌کننده‌های سی‌پایتون اکنون به‌طور پیش‌فرض pip را همراه با خود سی‌پایتون نصب می‌کنند (کاربران می‌توانند در طول فرایند نصب از نصب آن انصراف دهند). کاربران ویندوز باید تغییرات خودکار PATH را فعال کنند تا pip به‌طور پیش‌فرض از خط فرمان در دسترس باشد؛ در غیر این صورت، همچنان می‌توان از طریق راه‌انداز پایتون برای ویندوز با py -m pip به آن دسترسی داشت.

همان‌طور که در PEP بحث شده است، بسته‌سازهای پلتفرم ممکن است انتخاب کنند که این دستورات را به‌طور پیش‌فرض نصب نکنند، به شرط آنکه هنگام فراخوانی، دستورالعمل‌های روشن و ساده‌ای درباره‌ی نحوه نصب آن‌ها در آن پلتفرم ارائه دهند (معمولاً با استفاده از مدیر بسته‌ی سیستم).

توجه

برای پرهیز از تداخل میان نصب‌های موازی Python 2 و Python 3، هنگامی که ensurepip مستقیماً فراخوانی می‌شود، به‌طور پیش‌فرض تنها فرمان‌های نسخه‌دار pip3 و pip3.4 بوت‌استرپ می‌شوند؛ برای درخواست فرمان pip بدون نسخه نیز به گزینه‌ی --default-pip نیاز است. pyvenv و نصب‌کننده‌ی ویندوز اطمینان می‌دهند که فرمان pip بدون مشخص‌کننده در آن محیط‌ها در دسترس قرار گیرد، و pip را می‌توان همیشه به‌جای فراخوانی مستقیم، از طریق سوییچ -m فراخوانی کرد تا در سیستم‌هایی که چند نصب پایتون دارند، از ابهام پرهیز شود.

تغییرات مستندات

به‌عنوان بخشی از این تغییر، بخش‌های نصب ماژول‌های پایتون و توزیع ماژول‌های پایتون مستندات به‌طور کامل در قالب مستندات کوتاه «شروع کار» و «پرسش‌های متداول» بازطراحی شده‌اند. بیشتر مستندات بسته‌بندی اکنون به راهنمای کاربری بسته‌بندی پایتون که توسط Python Packaging Authority نگهداری می‌شود و مستندات پروژه‌های جداگانه منتقل شده‌اند.

با این حال، از آنجا که این مهاجرت در حال حاضر هنوز ناقص است، نسخه‌های قدیمی آن راهنماها همچنان به‌عنوان ساخت توسعه‌های C و C++ با setuptools و ساخت توسعه‌های C و C++ با setuptools در دسترس هستند.

همچنین ملاحظه نمائید

PEP 453 -- بوت‌استرپینگ صریح pip در نصب‌های پایتون

PEP نوشته‌شده توسط Donald Stufft و Nick Coghlan و پیاده‌سازی‌شده توسط Donald Stufft، Nick Coghlan، Martin von Löwis و Ned Deily.

PEP 446: توصیف‌گرهای پرونده‌ی تازه‌ایجادشده غیرقابل ارث‌بری هستند

PEP 446 توصیف‌گرهای پرونده‌ی تازه‌ایجادشده را غیرقابل ارث‌بری می‌کند. به‌طور کلی، این همان رفتاری است که یک برنامه می‌خواهد: هنگام راه‌اندازی یک فرایند جدید، اینکه پرونده‌هایی که هم‌اکنون باز هستند در فرایند جدید نیز باز باشند، می‌تواند به انواع و اقسام اشکال‌هایی که یافتنشان دشوار است و بالقوه به مسائل امنیتی منجر شود.

با این حال، مواردی وجود دارد که وراثت مطلوب است. برای پشتیبانی از این موارد، توابع و متد‌های جدید زیر در دسترس هستند:

همچنین ملاحظه نمائید

PEP 446 -- غیرقابل ارث‌بری کردن توصیف‌گرهای پرونده‌ی به‌تازگی ایجادشده

PEP نوشته و پیاده‌سازی شده توسط ویکتور استینر.

بهبودهای مدیریت کدک

از زمانی که برای نخستین بار معرفی شد، ماژول codecs همواره در نظر گرفته شده است که به‌عنوان یک سیستم پویا و مستقل از نوع برای کدگذاری و کدگشایی عمل کند. با این حال، پیوند نزدیک آن با مدل متنی پایتون، به‌ویژه متدهای کمکی محدود به نوع روی انواع توکار str، bytes و bytearray، این واقعیت را به‌طور تاریخی پنهان کرده است.

به‌عنوان گامی کلیدی در شفاف‌سازی این وضعیت، توابع کمکی (convenience functions) codecs.encode() و codecs.decode() اکنون به‌درستی در پایتون 2.7، 3.3 و 3.4 مستند شده‌اند. این توابع از پایتون 2.4 در ماژول codecs وجود داشته‌اند (و توسط بدنه آزمون‌های رگرسیون پوشش داده شده‌اند)، اما پیش‌تر تنها از طریق بازرسی در زمان اجرا (runtime introspection) قابل کشف بودند.

برخلاف متدهای کمکی روی str، bytes و bytearray، توابع کمکی ماژول codecs در هر دو پایتون 2 و پایتون 3 از کدک‌های دلخواه پشتیبانی می‌کنند، نه اینکه محدود به کدگذاری‌های متنی یونیکد (در پایتون 3) یا تبدیل‌های basestring <-> basestring (در پایتون 2) باشند.

در پایتون 3.4، مفسر می‌تواند کدگذاری‌های غیرمتنی شناخته‌شده‌ای را که در کتابخانه استاندارد ارائه شده‌اند شناسایی کند و در موارد مناسب، کاربران را به‌سوی این توابع کمکی همه‌منظوره هدایت کند:

>>> b"abcdef".decode("hex")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: 'hex' is not a text encoding; use codecs.decode() to handle arbitrary codecs

>>> "hello".encode("rot13")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: 'rot13' is not a text encoding; use codecs.encode() to handle arbitrary codecs

>>> open("foo.txt", encoding="hex")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: 'hex' is not a text encoding; use codecs.open() to handle arbitrary codecs

در تغییری مرتبط، هر زمان که این کار بدون شکستن سازگاری با نسخه‌های پیشین امکان‌پذیر باشد، استثناهایی که در طول عملیات کدگذاری و کدگشایی ایجاد می‌شوند، در یک استثنای زنجیره‌شده از همان نوع پوشش داده می‌شوند که نام کدک مسئول تولید خطا را ذکر می‌کند:

>>> import codecs

>>> codecs.decode(b"abcdefgh", "hex")
Traceback (most recent call last):
  File "/usr/lib/python3.4/encings/hex_codec.py", line 20, in hex_decode
    return (binascii.a2b_hex(input), len(input))
binascii.Error: Non-hexadecimal digit found

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
binascii.Error: decoding with 'hex' codec failed (Error: Non-hexadecimal digit found)

>>> codecs.encode("hello", "bz2")
Traceback (most recent call last):
  File "/usr/lib/python3.4/encodings/bz2_codec.py", line 17, in bz2_encode
    return (bz2.compress(input), len(input))
  File "/usr/lib/python3.4/bz2.py", line 498, in compress
    return comp.compress(data) + comp.flush()
TypeError: 'str' does not support the buffer interface

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: encoding with 'bz2' codec failed (TypeError: 'str' does not support the buffer interface)

در نهایت، همان‌طور که مثال‌های بالا نشان می‌دهند، این بهبودها اجازه داده‌اند تا نام‌های مستعار کمکی برای کدک‌های غیر یونیکد — که خودشان در پایتون 3.2 بازگردانی شده بودند — بازگردانی شوند. این بدان معناست که (برای مثال) کدگذاری داده‌های دودویی به نمایش مبنای شانزده‌ی آن و برعکس، اکنون می‌تواند به این صورت نوشته شود:

>>> from codecs import encode, decode
>>> encode(b"hello", "hex")
b'68656c6c6f'
>>> decode(b"68656c6c6f", "hex")
b'hello'

تبدیل‌های دودویی و متنی که در کتابخانه استاندارد ارائه‌شده‌اند، در تبدیل‌های دودویی و تبدیل‌های متن به‌تفصیل شرح داده شده‌اند.

(مشارکت‌شده توسط Nick Coghlan در bpo-7475، bpo-17827، bpo-17828 و bpo-19619.)

PEP 451: نوع ModuleSpec برای سیستم ایمپورت

PEP 451 کپسوله‌سازی اطلاعاتی درباره‌ی ماژول را ارائه می‌دهد که سازوکار ایمپورت برای بارگذاری آن به کار خواهد گرفت (یعنی، مشخصه ماژول). این امر به ساده‌سازی هم پیاده‌سازی ایمپورت و هم چندین API مرتبط با ایمپورت کمک می‌کند. این تغییر همچنین گامی مقدماتی برای چندین بهبود آتی مرتبط با ایمپورت است.

تغییرات عمومی حاصل از این PEP به‌طور کامل با نسخه‌های قبلی سازگار هستند. به‌علاوه، این تغییرات باید برای همه به‌جز نویسندگان ایمپورت‌کننده (importer) نا‌محسوس باشند. متدهای کلیدی یابنده و بارگذار منسوخ شده‌اند، اما همچنان کار خواهند کرد. ایمپورت‌کننده‌های جدید باید از متدهای جدید توصیف‌شده در این PEP استفاده کنند. ایمپورت‌کننده‌های موجود باید به‌روزرسانی شوند تا متدهای جدید را پیاده‌سازی کنند. برای فهرست متدهایی که باید جایگزین شوند و جایگزین‌های آن‌ها، به بخش منسوخ مراجعه کنید.

سایر تغییرات زبان

برخی تغییرات کوچک‌تر اعمال‌شده در هسته‌ی زبان پایتون عبارت‌اند از:

  • پایگاه داده یونیکد به نسخه 6.3 از UCD به‌روزرسانی شد.

  • min() و max() اکنون یک آرگومان فقط‌کلیدواژه‌ای default می‌پذیرند که می‌توان با آن مشخص کرد اگر پیمایش‌پذیری که در حال ارزیابی آن هستند هیچ عنصری نداشته باشد، چه مقداری برگردانند. (مشارکت‌شده توسط جولیان برمن در bpo-18111.)

  • اشیای ماژول اکنون قابل ارجاع ضعیف هستند.

  • ویژگی‌های __file__ ماژول (و مقادیر مرتبط) اکنون باید به‌صورت پیش‌فرض همیشه شامل مسیرهای مطلق باشند، با تنها استثنای __main__.__file__ زمانی که یک اسکریپت مستقیماً با استفاده از مسیر نسبی اجرا شده باشد. (مشارکت‌شده توسط Brett Cannon در bpo-18416.)

  • همه‌ی کدک‌های UTF-* (به‌جز UTF-7) اکنون در هر دو حالت کدگذاری و کدگشایی، جانشین‌ها را رد می‌کنند، مگر اینکه از هندلر خطای surrogatepass استفاده شود؛ به استثنای کدگشای UTF-16 (که جفت‌های جانشین معتبر را می‌پذیرد) و کدگذار UTF-16 (که هنگام کدگذاری نویسه‌های خارج از BMP آن‌ها را تولید می‌کند). (مشارکت‌شده توسط Victor Stinner، Kang-Hao (Kenny) Lu و Serhiy Storchaka در bpo-12892.)

  • کدک جدید EBCDIC آلمانی cp273. (مشارکت‌شده توسط Michael Bierenfeld و Andrew Kuchling در bpo-1097797.)

  • کدک جدید اوکراینی cp1125. (ارائه‌شده توسط Serhiy Storchaka در bpo-19668.)

  • bytes.join() و bytearray.join() اکنون شیءهای بافر دلخواه را به‌عنوان آرگومان می‌پذیرند. (مشارکت آنتوان پی‌ترو در bpo-15958.)

  • سازنده‌ی int اکنون هر شیء‌ای را که متد __index__ داشته باشد، برای آرگومان base خود می‌پذیرد. (مشارکت Mark Dickinson در bpo-16772.)

  • شیءهای فریم اکنون متد clear() را دارند که تمام ارجاع‌ها به متغیرهای محلی را از فریم پاک می‌کند. (مشارکت توسط آنتوان پی‌ترو در bpo-17934.)

  • memoryview اکنون به‌عنوان یک Sequence ثبت شده است و از تابع توکار reversed() پشتیبانی می‌کند. (مشارکت Nick Coghlan و Claudiu Popa در bpo-18690 و bpo-19078.)

  • امضاهای گزارش‌شده توسط help() در چندین مورد در نتیجه‌ی معرفی Argument Clinic و تغییرات دیگر در ماژول‌های inspect و pydoc تغییر کرده و بهبود یافته‌اند.

  • __length_hint__() اکنون بخشی از مشخصات رسمی زبان است (نگاه کنید به PEP 424). (مشارکت Armin Ronacher در bpo-16148.)

ماژول‌های جدید

asyncio

ماژول جدید asyncio (که در PEP 3156 تعریف شده است) یک مدل استاندارد حلقه رویداد قابل اتصال (pluggable) برای پایتون فراهم می‌کند که پشتیبانی محکمی از IO ناهمگام در کتابخانه استاندارد ارائه می‌دهد و تعامل پیاده‌سازی‌های دیگر حلقه رویداد با کتابخانه استاندارد و با یکدیگر را آسان‌تر می‌سازد.

برای پایتون 3.4، این ماژول یک provisional API به شمار می‌رود.

همچنین ملاحظه نمائید

PEP 3156 -- بازراه‌اندازی پشتیبانی ورودی/خروجی ناهمگام: ماژول «asyncio»

PEP توسط گیدو ون روسوم نوشته شده و پیاده‌سازی آن نیز توسط وی رهبری شده است.

ensurepip

ماژول جدید ensurepip زیرساخت اصلی پیاده‌سازی PEP 453 است. در جریان عادی امور، کاربران نهایی نیازی به تعامل با این ماژول ندارند، اما در صورتی که بوت‌استرپینگ خودکار در یک نصب یا محیط مجازی رد شده باشد، می‌توان از آن برای بوت‌استرپ کردن pip به‌صورت دستی استفاده کرد.

ensurepip شامل یک نسخه‌ی همراه از pip است که تا نخستین نسخه‌ی کاندید انتشار (release candidate) از نسخه‌ی سی‌پایتونی که همراه آن عرضه می‌شود، به‌روز است (این موضوع هم برای نسخه‌های نگهداری و هم برای نسخه‌های ویژگی صدق می‌کند). ensurepip به اینترنت دسترسی ندارد. اگر نصب دسترسی به اینترنت داشته باشد، پس از اجرای ensurepip می‌توان از pip همراه برای ارتقای pip به نسخه‌ای جدیدتر از نسخه‌ی همراه استفاده کرد. (توجه داشته باشید که چنین نسخه‌ی ارتقایافته‌ای از pip به‌عنوان یک بسته‌ی جداگانه نصب‌شده در نظر گرفته می‌شود و در صورت حذف نصب پایتون، از بین نمی‌رود.)

این ماژول ensurepip نام دارد، زیرا اگر هنگامی که pip از قبل نصب شده باشد فراخوانی شود، هیچ کاری انجام نمی‌دهد. این ماژول همچنین گزینه‌ی --upgrade دارد که در صورتی که نسخه‌ی نصب‌شده‌ی موجود pip قدیمی‌تر از نسخه‌ی همراه باشد، باعث می‌شود نسخه‌ی همراه pip نصب شود.

enum

ماژول جدید enum (تعریف‌شده در PEP 435) پیاده‌سازی استانداردی از نوع‌های شمارشی را فراهم می‌کند و با جایگزین کردن ثابت‌های عدد صحیح مبهم با مقادیر شمارشی سازگار با نسخه‌های پیشین، به ماژول‌های دیگر (مانند socket) اجازه می‌دهد پیام‌های خطای آموزنده‌تر و پشتیبانی بهتری از اشکال‌زدایی ارائه کنند.

همچنین ملاحظه نمائید

PEP 435 -- افزودن نوع Enum به کتابخانه استاندارد پایتون

PEP (پیشنهاد بهبود پایتون) نوشته‌شده توسط Barry Warsaw، Eli Bendersky و Ethan Furman؛ پیاده‌سازی‌شده توسط Ethan Furman.

pathlib

ماژول جدید pathlib کلاس‌هایی را ارائه می‌کند که مسیرهای سامانه فایل‌بندی را با معناشناسی مناسب برای سیستم‌عامل‌های مختلف نمایش می‌دهند. کلاس‌های مسیر به دو دسته تقسیم می‌شوند: مسیرهای خالص که عملیات صرفاً محاسباتی را بدون ورودی/خروجی ارائه می‌دهند، و مسیرهای عینی که از مسیرهای خالص ارث‌بری می‌کنند اما عملیات ورودی/خروجی را نیز فراهم می‌کنند.

برای پایتون 3.4، این ماژول یک provisional API به شمار می‌رود.

همچنین ملاحظه نمائید

PEP 428 -- ماژول pathlib -- مسیرهای شیءگرای سامانه فایل‌بندی

PEP نوشته و پیاده‌سازی‌شده توسط آنتوان پی‌ترو.

selectors

ماژول جدید selectors (که به عنوان بخشی از پیاده‌سازی PEP 3156 ایجاد شده است) امکان چندگانه‌سازی سطح بالا و کارآمد ورودی/خروجی را فراهم می‌کند و بر روی سازه‌های پایه‌ی ماژول select بنا شده است.

statistics

ماژول جدید statistics (تعریف‌شده در PEP 450) برخی از قابلیت‌های آماری پایه را مستقیماً در کتابخانه استاندارد ارائه می‌کند. این ماژول از محاسبه میانگین، میانه، مد، واریانس و انحراف معیار یک سری داده پشتیبانی می‌کند.

همچنین ملاحظه نمائید

PEP 450 -- افزودن ماژول آمار به کتابخانه استاندارد

PEP توسط استیون دآپرانو نوشته و پیاده‌سازی شده است

tracemalloc

ماژول جدید tracemalloc (تعریف‌شده در PEP 454) یک ابزار اشکال‌زدایی برای ردگیری بلوک‌های حافظه است که توسط پایتون تخصیص داده شده‌اند. این ماژول اطلاعات زیر را فراهم می‌کند:

  • ردگیری کنید که یک شیء در کجا تخصیص یافته است

  • آمار بلوک‌های حافظه‌ی تخصیص‌یافته به تفکیک نام پرونده و شماره سطر: اندازه‌ی کل، تعداد و اندازه‌ی میانگین بلوک‌های حافظه‌ی تخصیص‌یافته

  • برای تشخیص نشت حافظه، تفاوت‌های بین دو تصویر لحظه‌ای را محاسبه کنید

همچنین ملاحظه نمائید

PEP 454 -- افزودن یک ماژول جدید tracemalloc برای ردگیری تخصیص‌های حافظه پایتون

PEP نوشته و پیاده‌سازی‌شده توسط Victor Stinner

ماژول‌های بهبودیافته

abc

تابع جدید abc.get_cache_token() را می‌توان برای دانستن اینکه چه زمانی باید نهانگاه‌های متأثر از تغییرات در گراف اشیاء را باطل کرد، استفاده کرد. (مشارکت‌شده توسط Łukasz Langa در bpo-16832.)

کلاس جدید ABC دارای ABCMeta به‌عنوان فراکلاس خود است. استفاده از ABC به‌عنوان کلاس پایه اساساً همان اثر مشخص‌کردن metaclass=abc.ABCMeta را دارد، اما تایپ آن ساده‌تر و خواندن آن آسان‌تر است. (مشارکت‌شده توسط Bruno Dupuis در bpo-16049.)

aifc

متد getparams() اکنون به‌جای یک تاپل ساده، یک تاپل نام‌دار برمی‌گرداند. (مشارکت‌شده توسط Claudiu Popa در bpo-17818.)

aifc.open() اکنون از پروتکل مدیریت زمینه پشتیبانی می‌کند: وقتی در یک بلوک with استفاده شود، متد close() از شیء بازگردانده‌شده به‌طور خودکار در پایان بلوک فراخوانی خواهد شد. (مشارکت‌شده توسط Serhiy Storchacha در bpo-16486.)

متدهای writeframesraw() و writeframes() اکنون هر شیء شبه‌بایت را می‌پذیرند. (مشارکت Serhiy Storchaka در bpo-8311.)

argparse

کلاس FileType اکنون آرگومان‌های encoding و errors را می‌پذیرد که به open() ارسال می‌شوند. (مشارکت‌شده توسط لوکاس مایستر در bpo-11175.)

audioop

audioop اکنون از نمونه‌های ۲۴-بیتی پشتیبانی می‌کند. (ارائه‌شده توسط Serhiy Storchaka در bpo-12866.)

تابع جدید byteswap() نمونه‌های بزرگ‌اندیان را به کوچک‌اندیان و برعکس تبدیل می‌کند. (مشارکت‌شده توسط Serhiy Storchaka در bpo-19641.)

تمام توابع audioop اکنون هر شیء شبه‌بایت را می‌پذیرند. رشته‌ها پذیرفته نمی‌شوند: پیش‌تر کار نمی‌کردند و اکنون بلافاصله خطا ایجاد می‌کنند. (مشارکت‌شده توسط Serhiy Storchaka در bpo-16685.)

base64

توابع کدگذاری و کدگشایی در base64 اکنون در مواردی که پیش‌تر به نمونه‌ای از bytes یا bytearray نیاز داشتند، هر شیء شبه‌بایت را می‌پذیرند. (مشارکت‌شده توسط Nick Coghlan در bpo-17839.)

توابع جدید a85encode()، a85decode()، b85encode()، و b85decode() به‌ترتیب امکان کدگذاری و کدگشایی داده‌های دودویی از و به Ascii85 و قالب‌های Base85 مربوط به git/mercurial را فراهم می‌کنند. توابع a85 گزینه‌هایی دارند که می‌توان از آن‌ها برای سازگار کردن این توابع با گونه‌های کدگذاری Ascii85، از جمله گونه‌ی Adobe، استفاده کرد. (با مشارکت Martin Morrison، پروژه‌ی Mercurial، Serhiy Storchaka و Antoine Pitrou در bpo-17618.)

collections

متد ChainMap.new_child() اکنون آرگومان m را می‌پذیرد که نگاشت فرزندی را که باید به زنجیره اضافه شود مشخص می‌کند. این امکان را فراهم می‌کند که از یک نگاشت موجود و/یا یک نوع نگاشت سفارشی برای فرزند استفاده شود. (مشارکت‌شده توسط Vinay Sajip در bpo-16613.)

colorsys

تعداد ارقام در ضرایب تبدیل‌های RGB --- YIQ افزایش یافته است تا با نسخه‌های FCC NTSC مطابقت داشته باشند. تغییر در نتایج باید کمتر از ۱ درصد باشد و ممکن است با نتایجی که در جای‌های دیگر یافت می‌شوند مطابقت بهتری داشته باشد. (مشارکت‌شده توسط برایان لندرز و سرهی استورچاکا در bpo-14323.)

contextlib

مدیر زمینه‌ی جدید contextlib.suppress به شفاف‌سازی منظور کدی کمک می‌کند که عمداً استثناهای ناشی از یک دستور واحد را سرکوب می‌کند. (مشارکت‌شده توسط Raymond Hettinger در bpo-15806 و Zero Piraeus در bpo-19266.)

مدیر زمینه‌ی جدید contextlib.redirect_stdout() کار با APIهای انعطاف‌ناپذیر را برای اسکریپت‌های ابزاری آسان‌تر می‌کند؛ APIهایی که خروجی خود را به sys.stdout می‌نویسند و هیچ گزینه‌ای برای بازهدایت آن ارائه نمی‌دهند. با استفاده از این مدیر زمینه، خروجی sys.stdout را می‌توان به هر جریان دیگری یا، به‌همراه io.StringIO، به یک رشته بازهدایت کرد. حالت دوم به‌ویژه می‌تواند مفید باشد، مثلاً برای گرفتن خروجی از تابعی که برای پیاده‌سازی یک رابط خط فرمان نوشته شده است. استفاده از آن فقط برای اسکریپت‌های ابزاری توصیه می‌شود، زیرا بر وضعیت سراسری sys.stdout اثر می‌گذارد. (مشارکت Raymond Hettinger در bpo-15805.)

مستندات contextlib نیز به‌روزرسانی شده است تا بحثی درباره‌ی تفاوت‌های میان مدیرهای زمینه‌ی یک‌بارمصرف، بازاستفاده‌پذیر و بازورودپذیر را در بر بگیرد.

dbm

اشیاء dbm.open() اکنون از پروتکل مدیریت زمینه پشتیبانی می‌کنند. هنگامی که در دستور with استفاده شوند، متد close شیء پایگاه داده به‌طور خودکار در پایان بلوک فراخوانی می‌شود. (مشارکت‌شده توسط Claudiu Popa و Nick Coghlan در bpo-19282.)

dis

توابع show_code()، dis()، distb() و disassemble() اکنون یک آرگومان فقط‌کلیدواژه‌ای file را می‌پذیرند که کنترل می‌کند خروجی خود را کجا بنویسند.

ماژول dis اکنون حول کلاس Instruction ساخته شده است که دسترسی شیءگرا به جزئیات تک‌تک عملیات‌های بایت‌کد را فراهم می‌کند.

یک متد جدید، get_instructions()، پیمایش‌گری را فراهم می‌کند که جریان Instruction را برای قطعه‌ای معین از کد پایتون تولید می‌کند. بنابراین اکنون می‌توان برنامه‌ای نوشت که شیء بایت‌کد را به روش‌هایی متفاوت از روش‌های ارائه‌شده توسط خود ماژول dis بازرسی و دستکاری کند. برای مثال:

>>> import dis
>>> for instr in dis.get_instructions(lambda x: x + 1):
...     print(instr.opname)
LOAD_FAST
LOAD_CONST
BINARY_ADD
RETURN_VALUE

ابزارهای نمایش مختلف در ماژول dis بازنویسی شده‌اند تا از این کامپوننت‌های جدید استفاده کنند.

علاوه بر این، کلاس جدید Bytecode که مناسب برای برنامه‌هاست، یک API شیءگرا فراهم می‌کند که هم برای بررسی بایت‌کد به شکل خوانا برای انسان و هم برای پیمایش روی دستورالعمل‌ها به کار می‌رود. سازنده‌ی Bytecode همان آرگومان‌هایی را می‌گیرد که get_instructions() می‌گیرد (به‌علاوه‌ی یک current_offset اختیاری)، و شیء حاصل را می‌توان پیمایش کرد تا اشیاء Instruction تولید شوند. اما این کلاس همچنین یک متد dis دارد که معادل با فراخوانی dis روی آرگومان سازنده است، ولی نتیجه به‌صورت یک رشته چندسطری بازگردانده می‌شود:

>>> bytecode = dis.Bytecode(lambda x: x + 1, current_offset=3)
>>> for instr in bytecode:
...     print('{} ({})'.format(instr.opname, instr.opcode))
LOAD_FAST (124)
LOAD_CONST (100)
BINARY_ADD (23)
RETURN_VALUE (83)
>>> bytecode.dis().splitlines()
['  1           0 LOAD_FAST                0 (x)',
 '      -->     3 LOAD_CONST               1 (1)',
 '              6 BINARY_ADD',
 '              7 RETURN_VALUE']

Bytecode همچنین یک متد کلاس، from_traceback()، دارد که امکان دستکاری یک ردگیری را فراهم می‌کند (یعنی print(Bytecode.from_traceback(tb).dis()) معادل distb(tb) است).

(مشارکت‌شده توسط Nick Coghlan، Ryan Kelly و Thomas Kluyver در bpo-11816 و Claudiu Popa در bpo-17916.)

تابع جدید stack_effect() اثر یک آپ‌کد و آرگومان داده‌شده بر پشته‌ی پایتون را محاسبه می‌کند؛ اطلاعاتی که به روش دیگری در دسترس نیست. (با مشارکت Larry Hastings در bpo-19722.)

doctest

پرچم گزینه جدید FAIL_FAST اجرای آزمون‌ها را به محض تشخیص نخستین شکست متوقف می‌کند. (مشارکت‌شده توسط R. David Murray و Daniel Urban در bpo-16522.)

رابط خط فرمان doctest اکنون از argparse استفاده می‌کند و دو گزینه‌ی جدید، -o و -f دارد. -o اجازه می‌دهد گزینه‌های doctest در خط فرمان مشخص شوند، و -f شکل مختصر -o FAIL_FAST است (برای هم‌راستا شدن با گزینه‌ی مشابهی که رابط خط فرمان unittest از آن پشتیبانی می‌کند). (مشارکت‌شده توسط R. David Murray در bpo-11390.)

doctest اکنون داک‌تست‌ها (doctest) را در رشته‌های __doc__ ماژول‌های توسعه‌ای می‌یابد. (مشارکت‌شده توسط Zachary Ware در bpo-3158.)

email

as_string() اکنون یک آرگومان سیاست را می‌پذیرد تا هنگام تولید بازنمایی رشته‌ای از پیام، سیاست پیش‌فرض آن بازنویسی شود. این بدان معناست که as_string اکنون می‌تواند در موقعیت‌های بیشتری به کار رود، به‌جای آنکه مجبور باشید یک generator ایجاد کرده و از آن استفاده کنید تا بتوانید پارامترهای قالب‌بندی را به متد flatten آن پاس دهید. (مشارکت R. David Murray در bpo-18600.)

متد جدید as_bytes() برای تولید نمایش بایتی از پیام افزوده شده است، به شکلی مشابه با روشی که as_string نمایش رشته‌ای تولید می‌کند. این متد آرگومان maxheaderlen را نمی‌پذیرد، اما آرگومان‌های unixfrom و policy را می‌پذیرد. متد __bytes__() در Message آن را فراخوانی می‌کند، به این معنا که bytes(mymsg) اکنون نتیجه‌ی شهودی تولید خواهد کرد: یک شیء بایت حاوی پیام کاملاً قالب‌بندی‌شده. (مشارکت‌شده توسط R. David Murray در bpo-18600.)

متد Message.set_param() اکنون آرگومان کلیدواژه‌ای replace را می‌پذیرد. هنگامی که مشخص شود، سرآیند مرتبط بدون تغییر مکان آن در فهرست سرآیندها به‌روزرسانی خواهد شد. برای سازگاری با نسخه‌های قبلی، مقدار پیش‌فرض False است. (ارائه‌شده توسط R. David Murray در bpo-18891.)

دو زیرکلاس جدید از Message اضافه شده‌اند (EmailMessage و MIMEPart)، همراه با یک زیرماژول جدید، contentmanager و یک ویژگی جدید در policy به نام content_manager. تمام مستندات در حال حاضر در ماژول جدید قرار دارد که به عنوان بخشی از API آزمایشی جدید email افزوده می‌شود. این کلاس‌ها تعدادی متد جدید فراهم می‌کنند که استخراج محتوا از پیام‌های ایمیل و درج محتوا در آن‌ها را بسیار آسان‌تر می‌سازند. برای جزئیات، به مستندات contentmanager و email: مثال‌ها مراجعه کنید. این افزوده‌های API بخش عمده‌ی کاری را که به عنوان بخشی از پروژه‌ی email6 برنامه‌ریزی شده بود، تکمیل می‌کنند. API آزمایشی فعلی قرار است در پایتون 3.5 نهایی شود (احتمالاً با چند افزوده‌ی جزئی در حوزه‌ی مدیریت خطا). (مشارکت‌شده توسط R. David Murray در bpo-18891.)

filecmp

تابع جدید clear_cache() امکان پاک کردن نهانگاه مقایسه‌ی filecmp را فراهم می‌کند؛ نهانگاهی که از اطلاعات os.stat() برای تعیین اینکه آیا پرونده از زمان آخرین مقایسه تغییر کرده است یا خیر استفاده می‌کند. این قابلیت می‌تواند، برای مثال، زمانی به کار رود که پرونده ممکن است در زمانی کوتاه‌تر از دقت فیلد زمان تغییر پرونده در یک سامانه فایل‌بندی خاص تغییر کرده و دوباره بررسی شده باشد. (مشارکت Mark Levitt در bpo-18149.)

ویژگی جدید ماژول DEFAULT_IGNORES فهرست پوشه‌هایی را فراهم می‌کند که به‌عنوان مقدار پیش‌فرض برای پارامتر ignore تابع dircmp() استفاده می‌شوند. (مشارکت‌شده توسط Eli Bendersky در bpo-15442.)

functools

توصیف‌گر جدید partialmethod() اعمال جزئی آرگومان‌ها را به توصیف‌گرها می‌آورد، همان‌طور که partial() آن را برای فراخوانی‌پذیرهای معمولی فراهم می‌کند. توصیف‌گر جدید همچنین کار را آسان‌تر می‌کند که فراخوانی‌پذیرهای دلخواه (از جمله نمونه‌های partial()) هنگام گنجانده‌شدن در تعریف کلاس، مانند متدهای نمونه‌ی معمولی رفتار کنند. (مشارکت‌شده توسط Alon Horev و Nick Coghlan در bpo-4331.)

دکوراتور جدید @~functools.singledispatch پشتیبانی از توابع عام ارسال تک‌گانه را به کتابخانه استاندارد پایتون می‌آورد. در حالی که برنامه‌نویسی شیءگرا بر گروه‌بندی چندین عملیات روی یک مجموعه داده مشترک در یک کلاس تمرکز می‌کند، تابع عام بر گروه‌بندی چندین پیاده‌سازی از یک عملیات تمرکز می‌کند که به آن امکان می‌دهد با انواع متفاوت داده کار کند.

همچنین ملاحظه نمائید

PEP 443 -- توابع عام با ارسال تک‌گانه

PEP نوشته و پیاده‌سازی شده توسط ووکاش لانگا.

@~functools.total_ordering اکنون از مقدار بازگشتی NotImplemented در تابع مقایسه زیرین پشتیبانی می‌کند. (مشارکت‌شده توسط کیتی میلر در bpo-10042.)

نسخه‌ی خالص پایتونی از تابع partial() اکنون در کتابخانه استاندارد قرار دارد؛ در سی‌پایتون، این نسخه توسط نسخه‌ی شتاب‌یافته با C جایگزین می‌شود، اما برای استفاده‌ی پیاده‌سازی‌های دیگر در دسترس است. (مشارکت Brian Thorne در bpo-12428.)

gc

تابع جدید get_stats() فهرستی از سه دیکشنری مربوط به هر نسل را برمی‌گرداند که آمار جمع‌آوری‌ها را از زمان راه‌اندازی مفسر در بر دارند. (مشارکت‌شده توسط آنتوان پی‌ترو در bpo-16351.)

glob

تابع جدید escape() راهی برای خنثی کردن نویسه‌های خاص در نام پرونده فراهم می‌کند تا این نویسه‌ها بخشی از بسط الگو (globbing) نشوند، بلکه به‌طور لفظی تطبیق داده شوند. (مشارکت‌شده توسط Serhiy Storchaka در bpo-8402.)

hashlib

تابع جدید hashlib.pbkdf2_hmac()، تابع ۲ استخراج کلید مبتنی بر رمز عبور PKCS#5 را فراهم می‌کند. (با مشارکت Christian Heimes در bpo-18582.)

ویژگی name از اشیاء هش hashlib اکنون به‌طور رسمی یک رابط پشتیبانی‌شده است. این ویژگی همیشه در hashlib سی‌پایتون وجود داشته است (هرچند نام‌های با حروف کوچک را برای همه‌ی هش‌های پشتیبانی‌شده برنمی‌گرداند)، اما یک رابط عمومی نبود و به همین دلیل برخی از پیاده‌سازی‌های دیگر پایتون پیش‌تر از آن پشتیبانی نمی‌کردند. (مشارکت‌شده توسط Jason R. Coombs در bpo-18532.)

hmac

ماژول hmac اکنون علاوه بر bytes، bytearray را نیز برای آرگومان key تابع new() می‌پذیرد و پارامتر msg در هر دو تابع new() و متد update() اکنون هر نوعی را که ماژول hashlib پشتیبانی می‌کند، می‌پذیرد. (مشارکت‌شده توسط Jonas Borgström در bpo-18240.)

آرگومان digestmod در تابع hmac.new() اکنون می‌تواند هر نام چکیده‌ی هش (hash digest) باشد که توسط hashlib شناخته می‌شود. علاوه بر این، رفتار فعلی که در آن مقدار digestmod به طور پیش‌فرض MD5 است، منسوخ شده است: در یکی از نسخه‌های آینده‌ی پایتون هیچ مقدار پیش‌فرضی وجود نخواهد داشت. (مشارکت Christian Heimes در bpo-17276.)

با افزودن ویژگی‌های block_size و name (و مستندسازی رسمی ویژگی digest_size)، ماژول hmac اکنون به‌طور کامل با API PEP 247 مطابقت دارد. (با مشارکت Christian Heimes در bpo-18775.)

html

تابع جدید unescape() ارجاع‌های نویسه‌ی HTML5 را به نویسه‌های یونیکد متناظر تبدیل می‌کند. (ارائه شده توسط ازیو ملتی در bpo-2927.)

HTMLParser آرگومان کلیدواژه‌ای جدید convert_charrefs را می‌پذیرد که هنگامی که True باشد، تمام ارجاع‌های نویسه را به‌طور خودکار تبدیل می‌کند. برای سازگاری با نسخه‌های پیشین، مقدار پیش‌فرض آن False است، اما در نسخه‌ی آینده‌ی پایتون به True تغییر خواهد کرد؛ بنابراین به شما پیشنهاد می‌شود آن را به‌طور صریح تنظیم کنید و کد خود را برای استفاده از این قابلیت جدید به‌روزرسانی کنید. (ارائه‌شده توسط Ezio Melotti در bpo-13633.)

آرگومان strict در HTMLParser اکنون منسوخ شده است. (ارائه‌شده توسط Ezio Melotti در bpo-15114.)

http

send_error() اکنون یک پارامتر اختیاری اضافی explain را می‌پذیرد که می‌تواند برای ارائه‌ی شرح گسترده‌ی خطا استفاده شود و در صورت وجود، پیش‌فرض هاردکد‌شده (hardcoded) را بازنویسی کند. این شرح گسترده‌ی خطا با استفاده از ویژگی error_message_format قالب‌بندی و به‌عنوان بدنه‌ی پاسخ خطا ارسال می‌شود. (مشارکت‌شده توسط Karl Cow در bpo-12921.)

رابط خط فرمان http.server اکنون گزینه‌ای -b/--bind دارد که باعث می‌شود سرور روی نشانی مشخصی گوش دهد. (مشارکت‌شده توسط Malte Swart در bpo-17764.)

idlelib و IDLE

از آنجا که idlelib پوسته و ویرایشگر IDLE را پیاده‌سازی می‌کند و برای ایمپورت توسط برنامه‌های دیگر در نظر گرفته نشده است، با هر نسخه بهبودهایی دریافت می‌کند. برای فهرست تجمعی تغییرات از نسخه 3.3.0 به بعد و همچنین تغییرات انجام‌شده در نسخه‌های آتی 3.4.x، به Lib/idlelib/NEWS.txt مراجعه کنید. این پرونده همچنین از گفت‌وگوی Help ‣ About IDLE در IDLE در دسترس است.

importlib

کلاس پایه انتزاعی InspectLoader متد جدید source_to_code() را تعریف می‌کند که داده‌های منبع و یک مسیر را می‌پذیرد و یک شیء کد برمی‌گرداند. پیاده‌سازی پیش‌فرض معادل compile(data, path, 'exec', dont_inherit=True) است. (مشارکت‌شده توسط اریک اسنو و برت کانن در bpo-15627.)

InspectLoader اکنون همچنین یک پیاده‌سازی پیش‌فرض برای متد get_code() دارد. با این حال، معمولاً به دلایل کارایی، بازنویسی پیاده‌سازی پیش‌فرض مطلوب خواهد بود. (مشارکت‌شده توسط Brett Cannon در bpo-18072.)

تابع reload() به عنوان بخشی از منسوخ‌شدن ماژول imp، از imp به importlib منتقل شده است. (مشارکت برکر پکساگ در bpo-18193.)

importlib.util اکنون دارای ویژگی MAGIC_NUMBER است که دسترسی به شماره نسخه بایت‌کد را فراهم می‌کند. این جایگزین تابع get_magic() در ماژول منسوخ imp است. (مشارکت‌شده توسط Brett Cannon در bpo-18192.)

توابع جدید importlib.util، cache_from_source() و source_from_cache()، جایگزین توابع هم‌نام در ماژول منسوخ imp می‌شوند. (مشارکت‌شده توسط Brett Cannon در bpo-18194.)

کلاس NamespaceLoader بوت‌استرپ importlib اکنون با کلاس پایه انتزاعی InspectLoader مطابق است، که به این معناست که اکنون می‌توان runpy و python -m را با بسته‌های فضای نام به کار برد. (با مشارکت Brett Cannon در bpo-18058.)

importlib.util تابع جدیدی به نام decode_source() دارد که کد منبع را از بایت‌ها با استفاده از پردازش سطرهای جدید همگانی کدگشایی می‌کند. این تابع برای پیاده‌سازی متدهای InspectLoader.get_source() مفید است.

importlib.machinery.ExtensionFileLoader اکنون دارای متد get_filename() است. این متد به‌طور ناخواسته در پیاده‌سازی اولیه جا افتاده بود. (مشارکت‌شده توسط اریک اسنو در bpo-19152.)

inspect

ماژول inspect اکنون یک رابط خط فرمان پایه ارائه می‌دهد تا کد منبع و سایر اطلاعات ماژول‌ها، کلاس‌ها و توابع را به‌سرعت نمایش دهد. (مشارکت‌شده توسط Claudiu Popa و Nick Coghlan در bpo-18626.)

unwrap() باز کردن زنجیره‌های توابع پوششیِ ایجاد‌شده توسط @functools.wraps (و هر API دیگری که ویژگی __wrapped__ را روی یک تابع پوششی تنظیم می‌کند) را آسان می‌کند. (مشارکت Daniel Urban، Aaron Iles و Nick Coghlan در bpo-13266.)

به عنوان بخشی از پیاده‌سازی ماژول جدید enum، ماژول inspect اکنون پشتیبانی به‌مراتب بهتری از متدهای سفارشی __dir__ و ویژگی‌های پویای کلاسِ ارائه‌شده از طریق فراکلاس‌ها دارد. (مشارکت Ethan Furman در bpo-18929 و bpo-19030.)

getfullargspec() و getargspec() اکنون از API تابع signature() استفاده می‌کنند. این امر به آن‌ها امکان می‌دهد از طیف بسیار گسترده‌تری از فراخوانی‌پذیرها پشتیبانی کنند، از جمله موارد دارای ویژگی‌های __signature__، موارد دارای فراداده‌ی ارائه‌شده توسط argument clinic، شیءهای functools.partial() و موارد دیگر. توجه داشته باشید که برخلاف signature()، این توابع همچنان ویژگی‌های __wrapped__ را نادیده می‌گیرند و برای متدهای مقید، آرگومان اولِ از پیش مقیدشده را گزارش می‌کنند؛ بنابراین اگر به آن قابلیت‌ها نیاز دارید، همچنان لازم است کد خود را به‌روزرسانی کنید تا مستقیماً از signature() استفاده کنید. (مشارکت‌شده توسط Yury Selivanov در bpo-17481.)

signature() اکنون از نوع‌های اردکی توابع سی‌پایتون پشتیبانی می‌کند، که پشتیبانی از توابع کامپایل‌شده با Cython را می‌افزاید. (مشارکت‌شده توسط Stefan Behnel و Yury Selivanov در bpo-17159.)

ipaddress

ipaddress در پایتون 3.3 به‌عنوان یک API آزمایشی به کتابخانه استاندارد افزوده شد. با انتشار پایتون 3.4، این قید برداشته شده است: ipaddress اکنون یک API پایدار به شمار می‌رود که مشمول الزامات معمول کتابخانه استاندارد برای حفظ سازگاری با نسخه‌های پیشین است.

ویژگی جدید is_global در صورتی که یک نشانی به‌صورت سراسری قابل مسیریابی باشد، True است. (ارائه‌شده توسط Peter Moody در bpo-17400.)

گزارش‌گیری

کلاس TimedRotatingFileHandler یک پارامتر جدید atTime دارد که می‌توان از آن برای تعیین ساعت روزی که چرخش باید در آن رخ دهد استفاده کرد. (مشارکت‌شده توسط Ronald Oussoren در bpo-9556.)

SocketHandler و DatagramHandler اکنون از سوکت‌های دامنه‌ی یونیکس پشتیبانی می‌کنند (با تنظیم port به None). (مشارکت‌شده توسط Vinay Sajip در کامیت ce46195b56a9.)

fileConfig() اکنون یک نمونه‌ی زیرکلاس configparser.RawConfigParser را برای پارامتر fname می‌پذیرد. این کار استفاده از پرونده‌ی پیکربندی را در مواردی که پیکربندی گزارش‌گیری تنها بخشی از پیکربندی کلی برنامه است، یا مواردی که برنامه پیکربندی را پیش از ارسال آن به fileConfig() تغییر می‌دهد، تسهیل می‌کند. (ارائه‌شده توسط Vinay Sajip در bpo-16110.)

داده‌های پیکربندی گزارش‌گیری که از طریق تابع logging.config.listen() از یک سوکت دریافت می‌شوند، اکنون می‌توانند پیش از پردازش‌شدن، با فراهم‌کردن یک تابع تأیید به‌عنوان آرگومانِ آرگومان کلیدواژه‌ای جدید verify، اعتبارسنجی شوند. (مشارکت‌شده توسط Vinay Sajip در bpo-15452.)

مارشال‌کردن

نسخه‌ی پیش‌فرض marshal به 3 ارتقا یافته است. کد پیاده‌سازی‌کننده‌ی نسخه‌ی جدید، رفتار Python2 را بازمی‌گرداند که در آن تنها یک کپی از رشته‌های درونی‌سازی‌شده ثبت می‌شود و درون‌سازی (interning) هنگام سریال‌زدایی حفظ می‌شود، و این قابلیت «یک کپی» را به هر نوع شیء گسترش می‌دهد (شامل مدیریت ارجاع‌های بازگشتی). این امر هم اندازه‌ی پرونده‌های .pyc و هم میزان حافظه‌ای را که یک ماژول هنگام بارگذاری از یک پرونده‌ی .pyc (یا .pyo) در حافظه اشغال می‌کند، کاهش می‌دهد. (مشارکت‌شده توسط Kristján Valur Jónsson در bpo-16475، همراه با افزایش‌های سرعتی بیشتر از سوی Antoine Pitrou در bpo-19219.)

mmap

اشیای mmap اکنون قابل ارجاع ضعیف هستند. (مشارکت‌شده توسط والری لامبرت در bpo-4885.)

multiprocessing

در یونیکس دو روش آغاز جدید، spawn و forkserver، برای آغاز فرایندها با استفاده از multiprocessing اضافه شده‌اند. این روش‌ها ترکیب فرایندها با نخ‌ها را مقاوم‌تر می‌کنند و روش spawn با معنایی که ماژول multiprocessing همیشه در ویندوز از آن استفاده کرده است مطابقت دارد. تابع جدید get_all_start_methods() تمام روش‌های آغاز موجود در پلتفرم را گزارش می‌دهد، get_start_method() روش آغاز فعلی را گزارش می‌دهد و set_start_method() روش آغاز را تنظیم می‌کند. (مشارکت‌شده توسط ریچارد اودکرک در bpo-8713.)

multiprocessing نیز اکنون مفهوم context (زمینه) را دارد که تعیین می‌کند فرایندهای فرزند چگونه ایجاد می‌شوند. تابع جدید get_context() زمینه‌ای را برمی‌گرداند که از یک روش آغاز (start method) مشخص استفاده می‌کند. این زمینه API یکسانی با خودِ ماژول multiprocessing دارد، بنابراین می‌توانید از آن برای ایجاد Pools و اشیاء دیگری که در آن زمینه کار خواهند کرد استفاده کنید. این امر به یک چارچوب و یک برنامه، یا بخش‌های مختلف همان برنامه، امکان می‌دهد بدون تداخل با یکدیگر از multiprocessing استفاده کنند. (مشارکت‌شده توسط Richard Oudkerk در bpo-18999.)

مگر هنگام استفاده از روش شروع قدیمی فورک، فرایندهای فرزند دیگر دسته‌ها/توصیف‌گرهای پرونده‌ی غیرضروری را از والدین خود به ارث نمی‌برند (بخشی از bpo-8713).

اکنون multiprocessing به runpy (که سوییچ -m را پیاده‌سازی می‌کند) تکیه می‌کند تا هنگام استفاده از روش‌های شروع spawn یا forkserver، __main__ را به‌درستی در فرایندهای فرزند مقداردهی اولیه کند. این امر برخی حالت‌های حاشیه‌ای را حل می‌کند که در آن‌ها ترکیب multiprocessing، سوییچ خط فرمان -m و ایمپورت‌های نسبی صریح می‌توانست در فرایندهای فرزند خطاهای مبهمی ایجاد کند. (مشارکت‌شده توسط Nick Coghlan در bpo-19946.)

operator

تابع جدید length_hint() پیاده‌سازی مشخصات چگونگی استفاده از متد ویژه‌ی __length_hint__() را فراهم می‌کند، به‌عنوان بخشی از مشخصات رسمی PEP 424 برای این قابلیت زبان. (با مشارکت Armin Ronacher در bpo-16148.)

اکنون نسخه‌ای پایتون‌خالص از ماژول operator به‌عنوان مرجع و برای استفاده‌ی پیاده‌سازی‌های جایگزین پایتون در دسترس است. (ارائه‌شده توسط Zachary Ware در bpo-16694.)

os

توابع جدیدی برای دریافت و تنظیم پرچم به‌ارث‌رسانی یک توصیف‌گر پرونده (os.get_inheritable()، os.set_inheritable()) یا یک دسته ویندوز (os.get_handle_inheritable()، os.set_handle_inheritable()) وجود دارند.

تابع جدید cpu_count() تعداد CPUهای موجود در پلتفرمی که پایتون روی آن اجرا می‌شود را گزارش می‌کند (یا None اگر تعداد قابل تعیین نباشد). تابع multiprocessing.cpu_count() اکنون بر اساس این تابع پیاده‌سازی شده است). (مشارکت‌شده توسط Trent Nelson، Yogesh Chaudhari، Victor Stinner و Charles-François Natali در bpo-17914.)

os.path.samestat() اکنون در پلتفرم ویندوز در دسترس است (و پیاده‌سازی os.path.samefile() اکنون بین یونیکس و ویندوز مشترک است). (ارائه‌شده توسط برایان کرتین در bpo-11939.)

os.path.ismount() اکنون حجم‌های سوارشده در زیر ریشه‌ی درایو در ویندوز را تشخیص می‌دهد. (مشارکت‌شده توسط تیم گلدن در bpo-9035.)

os.open() در پلتفرم‌هایی که این پرچم‌ها را فراهم می‌کنند، از دو پرچم جدید پشتیبانی می‌کند: O_PATH (توصیف‌گر پرونده‌ی باز‌نشده) و O_TMPFILE (پرونده‌ی موقت بی‌نام؛ از زمان انتشار نسخه 3.4.0 فقط در سیستم‌های لینوکس با نسخه‌ی هسته 3.11 یا جدیدتر که سرآیند‌های uapi را دارند در دسترس است). (به ترتیب توسط Christian Heimes در bpo-18673 و Benjamin Peterson ارائه شده است.)

pdb

pdb بهبود یافته است تا تولیدگر‌ها، yield و yield from را به شکلی مفیدتر مدیریت کند. این به‌ویژه هنگام اشکال‌زدایی برنامه‌های مبتنی بر asyncio مفید است. (مشارکت‌شده توسط Andrew Svetlov و Xavier de Gaye در bpo-16596.)

فرمان print از pdb حذف شده است و دسترسی به تابع print() پایتون از خط فرمان pdb بازگردانده می‌شود. pdb پایتون 2 فرمان print نداشت؛ در عوض، وارد کردن print دستور print را اجرا می‌کرد. در پایتون 3، print به اشتباه به نام مستعاری برای فرمان p در pdb تبدیل شده بود. اما p، repr آرگومان خود را چاپ می‌کند، نه str را، همان‌طور که فرمان print پایتون 2 انجام می‌داد. بدتر آنکه فرمان pdb print پایتون 3 تابع print پایتون 3 را می‌پوشاند و آن را در اعلان pdb دسترسی‌ناپذیر می‌کرد. (مشارکت‌کننده: Connor Osborn در bpo-18764.)

pickle

pickle اکنون از یک پروتکل پیکل جدید، یعنی پروتکل ۴، پشتیبانی می‌کند (اما به‌طور پیش‌فرض از آن استفاده نمی‌کند). این پروتکل جدید شماری از مسائل موجود در پروتکل‌های پیشین را برطرف می‌کند، از جمله سریال‌سازی کلاس‌های تودرتو، رشته‌ها و ظرف‌های بسیار بزرگ، و کلاس‌هایی که متد __new__() آن‌ها آرگومان‌های فقط کلیدواژه‌ای می‌پذیرد. همچنین بهبودهایی در کارایی فراهم می‌کند.

همچنین ملاحظه نمائید

PEP 3154 -- پروتکل 4 پیکل

PEP نوشته‌شده توسط Antoine Pitrou و پیاده‌سازی‌شده توسط Alexandre Vassalotti.

plistlib

plistlib اکنون API‌ای مشابه الگوی استاندارد پروتکل‌های سریال‌سازی کتابخانه استاندارد دارد که توابع جدید load()، dump()، loads() و dumps() را در بر می‌گیرد. (API قدیمی‌تر اکنون منسوخ شده است.) علاوه بر قالب plist از نوع XML که از قبل پشتیبانی می‌شد (FMT_XML)، اکنون قالب دودویی plist (FMT_BINARY) نیز پشتیبانی می‌شود. (ارائه‌شده توسط Ronald Oussoren و دیگران در bpo-14455.)

poplib

دو متد جدید به poplib اضافه شده‌اند: capa() که فهرست قابلیت‌های اعلام‌شده توسط سرور POP را برمی‌گرداند، و stls() که در صورتی که سرور POP از آن پشتیبانی کند، یک نشست POP3 رمزنگاری‌نشده را به یک نشست POP3 رمزنگاری‌شده تبدیل می‌کند. (با مشارکت لورنزو کاتوچی در bpo-4473.)

pprint

کلاس PrettyPrinter ماژول pprint و توابع pformat() و pprint() آن، گزینه‌ی جدیدی به نام compact دارند که نحوه‌ی قالب‌بندی خروجی را کنترل می‌کند. در حال حاضر، تنظیم compact به True به این معناست که دنباله‌ها به‌گونه‌ای چاپ می‌شوند که هر سطر (تورفته) شامل هر تعداد از عناصر دنباله باشد که در width جا می‌گیرد. (مشارکت‌شده توسط Serhiy Storchaka در bpo-19132.)

رشته‌های بلند اکنون با استفاده از سینتکس معمول ادامه‌ی سطر پایتون، در چند سطر شکسته می‌شوند. (با مشارکت Antoine Pitrou در bpo-17150.)

pty

pty.spawn() اکنون به‌جای None، مقدار وضعیت را از os.waitpid() روی فرایند فرزند برمی‌گرداند. (مشارکت‌کننده: Gregory P. Smith.)

pydoc

ماژول pydoc اکنون مستقیماً بر API درون‌نگری inspect.signature() مبتنی است و این امر به آن امکان می‌دهد اطلاعات امضا را برای طیف وسیع‌تری از اشیای فراخوانی‌پذیر فراهم کند. این تغییر همچنین به این معناست که ویژگی‌های __wrapped__ اکنون هنگام نمایش اطلاعات راهنما در نظر گرفته می‌شوند. (با مشارکت Larry Hastings در bpo-19674.)

ماژول pydoc دیگر پارامتر self را برای متدهای از پیش مقیدشده نمایش نمی‌دهد. در عوض، هدفش این است که همیشه امضای دقیق فعلی فراخوانی‌پذیر ارائه‌شده را نمایش دهد. (مشارکت‌شده توسط لری هستینگز در bpo-20710.)

علاوه بر تغییراتی که مستقیماً در pydoc ایجاد شده‌اند، برخورد آن با متدهای __dir__ سفارشی و رفتارهای گوناگون توصیف‌گرها نیز توسط تغییرات زیربنایی در ماژول inspect به‌طور چشمگیری بهبود یافته است.

از آنجا که تابع توکار help() بر پایه‌ی pydoc است، تغییرات فوق بر رفتار help() نیز تأثیر می‌گذارند.

re

تابع جدید fullmatch() و متد جدید Pattern.fullmatch() الگو را در هر دو انتهای رشته‌ای که باید تطبیق داده شود لنگر می‌کنند. این کار راهی برای بیان صریح هدف تطبیق فراهم می‌کند که از دسته‌ای از اشکال‌های ظریف جلوگیری می‌کند؛ اشکال‌هایی که در آن‌ها نویسه‌های $ هنگام تغییر کد یا افزودن جایگزین‌ها به یک عبارت باقاعده‌ی موجود از دست می‌روند. (مشارکت‌شده توسط Matthew Barnett در bpo-16203.)

repr اشیاء عبارت باقاعده اکنون الگو و پرچم‌ها را در بر می‌گیرد؛ repr اشیاء تطبیق اکنون شروع، پایان و بخشی از رشته که تطبیق یافته است را در بر می‌گیرد. (مشارکت‌شده توسط Hugo Lopes Tavares و Serhiy Storchaka در bpo-13592 و bpo-17087.)

منبع

تابع جدید prlimit() که در پلتفرم‌های لینوکس با نسخه‌ی هسته‌ی 2.6.36 یا بالاتر و glibc نسخه‌ی 2.13 یا بالاتر در دسترس است، امکان پرس‌وجو یا تنظیم محدودیت‌های منابع برای فرایندهایی غیر از فرایندِ انجام‌دهنده‌ی فراخوانی را فراهم می‌کند. (مشارکت Christian Heimes در bpo-16595.)

در نسخه 2.6.36 هسته لینوکس یا جدیدتر، چند ثابت جدید مخصوص لینوکس نیز وجود دارد: RLIMIT_MSGQUEUE، RLIMIT_NICE، RLIMIT_RTPRIO، RLIMIT_RTTIME و RLIMIT_SIGPENDING. (با مشارکت کریستین هایمز در bpo-19324.)

در FreeBSD نسخه 9 و پس از آن، چند ثابت جدید مخصوص FreeBSD وجود دارد: RLIMIT_SBSIZE، RLIMIT_SWAP و RLIMIT_NPTS. (مشارکت Claudiu Popa در bpo-19343.)

انتخاب

اشیاء epoll اکنون از پروتکل مدیریت زمینه پشتیبانی می‌کنند. هنگامی که در دستور with استفاده شوند، متد close() به‌طور خودکار در پایان بلوک فراخوانی می‌شود. (مشارکت‌شده توسط Serhiy Storchaka در bpo-16488.)

شیءهای devpoll اکنون متدهای fileno() و close() و همچنین یک ویژگی جدید closed را دارند. (مشارکت‌شده توسط Victor Stinner در bpo-18794.)

shelve

نمونه‌های Shelf اکنون می‌توانند در دستورهای with استفاده شوند و در پایان بلوک with به‌طور خودکار بسته خواهند شد. (مشارکت‌شده توسط Filip Gruszczyński در bpo-13896.)

shutil

copyfile() اکنون هنگامی که مبدأ و مقصد یک پرونده واحد باشند، زیرکلاس خاصی از Error به نام SameFileError را مطرح می‌کند، که به یک برنامه اجازه می‌دهد در قبال این خطای خاص اقدام مناسب انجام دهد. (مشارکت‌شده توسط Atsuo Ishimoto و Hynek Schlawack در bpo-1492704.)

smtpd

کلاس‌های SMTPServer و SMTPChannel اکنون یک آرگومان کلیدواژه‌ای map را می‌پذیرند که در صورت مشخص شدن، به asynchat.async_chat به‌عنوان آرگومان map آن پاس داده می‌شود. این به یک برنامه اجازه می‌دهد از تأثیرگذاری بر نگاشت سوکت سراسری اجتناب کند. (مشارکت‌شده توسط Vinay Sajip در bpo-11959.)

smtplib

SMTPException اکنون زیرکلاسی از OSError است، که به کدی که تنها به اینکه آیا خطایی رخ داده است یا خیر اهمیت می‌دهد، اجازه می‌دهد هم خطاهای سطح سوکت و هم خطاهای سطح پروتکل SMTP در یک دستور try/except گرفته شوند. (ارائه‌شده توسط Ned Jackson Lovely در bpo-2118.)

socket

ماژول socket اکنون پروتکل CAN_BCM را روی پلتفرم‌هایی که از آن پشتیبانی می‌کنند، پشتیبانی می‌کند. (با مشارکت Brian Thorne در bpo-15359.)

اشیاء سوکت متدهای جدیدی برای گرفتن یا تنظیم کردن پرچم به‌ارث‌رسانی خود دارند، get_inheritable() و set_inheritable().

ثابت‌های socket.AF_* و socket.SOCK_* اکنون مقادیر enum هستند که از ماژول جدید enum استفاده می‌کنند. این امر اجازه می‌دهد که در حین اشکال‌زدایی، به جای اعداد صحیح «جادویی» (magic numbers)، نام‌های معنادار چاپ شوند.

ثابت AF_LINK اکنون در BSD و OSX در دسترس است.

inet_pton() و inet_ntop() اکنون در ویندوز پشتیبانی می‌شوند. (با مشارکت Atsuo Ishimoto در bpo-7171.)

sqlite3

پارامتر بولی جدیدی برای تابع connect()، یعنی uri، می‌تواند برای نشان دادن اینکه پارامتر database یک uri است استفاده شود (به مستندات URI در SQLite مراجعه کنید). (مشارکت‌شده توسط poq در bpo-13773.)

ssl

PROTOCOL_TLSv1_1 و PROTOCOL_TLSv1_2 (پشتیبانی از TLSv1.1 و TLSv1.2) افزوده شده‌اند؛ پشتیبانی از این پروتکل‌ها تنها زمانی در دسترس است که پایتون با OpenSSL 1.0.1 یا نسخه‌های بعدی پیوند شده باشد. (مشارکت Michele Orrù و Antoine Pitrou در bpo-16692.)

تابع جدید create_default_context() روشی استاندارد برای به‌دست‌آوردن یک SSLContext فراهم می‌کند که تنظیمات آن به‌گونه‌ای در نظر گرفته شده‌اند که تعادلی منطقی میان سازگاری و امنیت باشند. این تنظیمات سخت‌گیرانه‌تر از پیش‌فرض‌هایی هستند که سازنده‌ی SSLContext فراهم می‌کند و ممکن است در آینده، بدون منسوخ‌سازی قبلی، در صورت تغییر الزامات امنیتیِ بهترین شیوه‌ها تعدیل شوند. بهترین شیوه‌ی توصیه‌شده‌ی جدید برای استفاده از کتابخانه‌های استانداردی که از SSL پشتیبانی می‌کنند این است که از create_default_context() برای به‌دست‌آوردن یک شیء SSLContext استفاده کنید، در صورت نیاز آن را تغییر دهید و سپس آن را به‌عنوان آرگومان context در API مناسب کتابخانه استاندارد ارسال کنید. (مشارکت‌شده توسط Christian Heimes در bpo-19689.)

متد SSLContext به نام load_verify_locations() آرگومان اختیاری جدید cadata را می‌پذیرد که می‌توان از آن برای ارائه‌ی مستقیم گواهی‌های کدگذاری‌شده با PEM یا DER، به‌ترتیب از طریق رشته‌ها یا بایت‌ها، استفاده کرد. (با مشارکت کریستین هایمز در bpo-18138.)

تابع جدید get_default_verify_paths() تاپل نام‌داری از مسیرها و متغیرهای محیطی را برمی‌گرداند که متد set_default_verify_paths() از آن‌ها برای تنظیم cafile و capath پیش‌فرض OpenSSL استفاده می‌کند. این می‌تواند در اشکال‌زدایی مسائل تأیید پیش‌فرض کمک‌کننده باشد. (مشارکت‌شده توسط کریستین هایمز در bpo-18143.)

SSLContext متد جدیدی دارد، cert_store_stats()، که تعداد گواهی‌های X.509 بارگذاری‌شده، گواهی‌های X.509 CA و فهرست‌های لغو گواهی (crls) را گزارش می‌کند؛ همچنین متد get_ca_certs() فهرستی از گواهی‌های CA بارگذاری‌شده را برمی‌گرداند. (مشارکت‌شده توسط Christian Heimes در bpo-18147.)

اگر OpenSSL 0.9.8 یا نسخه‌های بعدی آن در دسترس باشد، SSLContext دارای ویژگی جدیدی به نام verify_flags است که می‌توان با تنظیم آن به ترکیبی از ثابت‌های جدید VERIFY_DEFAULT، VERIFY_CRL_CHECK_LEAF، VERIFY_CRL_CHECK_CHAIN یا VERIFY_X509_STRICT، فرایند راستی‌آزمایی گواهی را کنترل کرد. OpenSSL به‌صورت پیش‌فرض هیچ راستی‌آزمایی فهرست لغو گواهی انجام نمی‌دهد. (مشارکت‌شده توسط Christien Heimes در bpo-8813.)

متد جدید load_default_certs() در SSLContext مجموعه‌ای از گواهی‌های پیش‌فرض «مرجع صدور گواهی» (CA) را از مکان‌های پیش‌فرضی که بسته به پلتفرم متفاوت‌اند، بارگذاری می‌کند. این متد می‌تواند هم گواهی‌های احراز هویت سرور وب TLS (purpose=SERVER_AUTH) را برای راستی‌آزمایی سرور توسط کلاینت بارگذاری کند و هم گواهی‌هایی را برای راستی‌آزمایی گواهی‌های کلاینت توسط سرور (purpose=CLIENT_AUTH) بارگذاری کند. (مشارکت‌شده توسط Christian Heimes در bpo-19292.)

دو تابع جدید مخصوص ویندوز، enum_certificates() و enum_crls()، امکان بازیابی گواهی‌ها، اطلاعات گواهی و فهرست‌های لغو گواهی را از مخزن گواهی ویندوز فراهم می‌کنند. (مشارکت‌شده توسط Christian Heimes در bpo-17134.)

پشتیبانی از SNI (نشانگر نام سرور) در سمت سرور با استفاده از متد جدید ssl.SSLContext.set_servername_callback(). (مشارکت Daniel Black در bpo-8109.)

دیکشنری بازگردانده‌شده توسط SSLSocket.getpeercert() شامل آیتم‌های اضافی افزونه X509v3 است: crlDistributionPoints، calIssuers و URI‌های OCSP. (با مشارکت Christian Heimes در bpo-18379.)

stat

ماژول stat اکنون توسط یک پیاده‌سازی C در _stat پشتیبانی می‌شود. پیاده‌سازی C ضروری است، زیرا بیشترِ مقادیر استاندارد نشده‌اند و به پلتفرم وابسته‌اند. (مشارکت‌شده توسط Christian Heimes در bpo-11016.)

این ماژول پرچم‌های جدید ST_MODE، S_IFDOOR، S_IFPORT و S_IFWHT را پشتیبانی می‌کند. (مشارکت‌شده توسط Christian Hiemes در bpo-11016.)

struct

تابع جدید iter_unpack و متد جدید struct.Struct.iter_unpack() روی قالب‌های کامپایل‌شده، واگشایی جریانی یک بافر حاوی نمونه‌های تکرار‌شده از یک قالب داده‌ی مشخص را فراهم می‌کنند. (مشارکت آنتوان پی‌ترو در bpo-17804.)

subprocess

check_output() اکنون آرگومان input را می‌پذیرد که با استفاده از آن می‌توان محتویات stdin را برای فرمانی که اجرا می‌شود فراهم کرد. (مشارکت‌شده توسط Zack Weinberg در bpo-16624.)

getoutput() و getstatusoutput() اکنون در ویندوز کار می‌کنند. این تغییر در واقع به‌طور ناخواسته در نسخه 3.3.4 انجام شد. (مشارکت‌شده توسط Tim Golden در bpo-10197.)

sunau

متد getparams() اکنون به‌جای یک تاپل ساده، یک تاپل نام‌دار برمی‌گرداند. (مشارکت‌شده توسط Claudiu Popa در bpo-18901.)

sunau.open() اکنون از پروتکل مدیریت زمینه پشتیبانی می‌کند: هنگام استفاده در یک بلوک with، متد close شیء بازگردانده‌شده در پایان بلوک به‌طور خودکار فراخوانی خواهد شد. (مشارکت Serhiy Storchaka در bpo-18878.)

متد AU_write.setsampwidth() اکنون از نمونه‌های ۲۴ بیتی پشتیبانی می‌کند و به این ترتیب پشتیبانی از نوشتن نمونه‌های ۲۴ بیتی با استفاده از این ماژول افزوده می‌شود. (مشارکت‌شده توسط Serhiy Storchaka در bpo-19261.)

متدهای writeframesraw() و writeframes() اکنون هر شیء شبه‌بایت را می‌پذیرند. (مشارکت Serhiy Storchaka در bpo-8311.)

sys

تابع جدید sys.getallocatedblocks() تعداد فعلی بلوک‌های تخصیص‌یافته توسط مفسر را برمی‌گرداند. (در سی‌پایتون با تنظیم پیش‌فرض --with-pymalloc، این تخصیص‌هایی است که از طریق API PyObject_Malloc() انجام شده‌اند.) این می‌تواند برای پیگیری نشت حافظه مفید باشد، به‌ویژه اگر از طریق بدنه آزمون به‌صورت خودکار انجام شود. (مشارکت‌شده توسط Antoine Pitrou در bpo-13390.)

وقتی مفسر پایتون در حالت تعاملی راه‌اندازی می‌شود، وجود ویژگی __interactivehook__ در ماژول sys را بررسی می‌کند. اگر این ویژگی وجود داشته باشد، مقدار آن بدون هیچ آرگومانی، درست پیش از آغاز حالت تعاملی فراخوانی می‌شود. این بررسی پس از خوانده‌شدن پرونده‌ی PYTHONSTARTUP انجام می‌شود، بنابراین می‌توان آن را در آنجا تنظیم کرد. ماژول site آن را روی تابعی تنظیم می‌کند که در صورت پشتیبانی پلتفرم از readline، تکمیل با کلید Tab و ذخیره‌سازی تاریخچه (در ~/.python-history) را فعال می‌کند. اگر این رفتار (جدید) را نمی‌خواهید، می‌توانید با حذف این ویژگی از sys (یا تنظیم آن روی فراخوانی‌پذیر دیگری)، آن را در PYTHONSTARTUP، sitecustomize یا usercustomize بازنویسی کنید. (مشارکت‌شده توسط اریک آراوجو و آنتوان پی‌ترو در bpo-5845.)

tarfile

ماژول tarfile اکنون هنگامی که مستقیماً به‌عنوان اسکریپت یا از طریق -m فراخوانی شود، از یک رابط خط فرمان ساده پشتیبانی می‌کند. می‌توان از آن برای ایجاد و استخراج آرشیوهای tarfile استفاده کرد. (مشارکت‌شده توسط Berker Peksag در bpo-13477.)

textwrap

کلاس TextWrapper دو ویژگی/آرگومان سازنده‌ی جدید دارد: max_lines که تعداد سطرهای خروجی را محدود می‌کند، و placeholder که رشته‌ای است که در صورت کوتاه‌شدن خروجی به دلیل max_lines، در انتهای آن ظاهر می‌شود. بر پایه‌ی این قابلیت‌ها، تابع کمکی جدید shorten() تمام فضاهای سفید ورودی را به فاصله‌های تکی فرومی‌فشرد و سطری منفرد با width داده‌شده تولید می‌کند که به placeholder ختم می‌شود (به‌طور پیش‌فرض، [...]). (مشارکت آنتوان پی‌ترو و سرهی استورچاکا در bpo-18585 و bpo-18725.)

threading

می‌توان شیء Thread را که نماینده‌ی نخ اصلی است، از تابع جدید main_thread() به دست آورد. در شرایط عادی، این نخ همان نخی است که مفسر پایتون از آن آغاز به کار کرده است. (با مشارکت Andrew Svetlov در bpo-18882.)

traceback

تابع جدید traceback.clear_frames() یک شیء ردگیری پشته را می‌گیرد و در تمام فریم‌هایی که به آن‌ها ارجاع می‌دهد، متغیرهای محلی را پاک می‌کند و به این ترتیب میزان حافظه‌ی مصرف‌شده را کاهش می‌دهد. (مشارکت‌شده توسط اندرو کاچلینگ در bpo-1565525.)

types

توصیف‌گر جدید DynamicClassAttribute() راهی برای تعریف ویژگی‌ای فراهم می‌کند که هنگام بازیابی از طریق یک شیء نمونه به‌طور عادی عمل می‌کند، اما هنگام بازیابی از طریق کلاس، به __getattr__ کلاس هدایت می‌شود. این امکان را فراهم می‌کند که پراپرتی‌هایی روی یک کلاس فعال باشند و ویژگی‌های مجازی با همان نام روی کلاس وجود داشته باشند (برای مثال به enum مراجعه کنید). (مشارکت‌شده توسط ایتان فورمن در bpo-19030.)

urllib

urllib.request اکنون از URLهای data: به‌واسطه کلاس DataHandler پشتیبانی می‌کند. (ارائه‌شده توسط Mathias Panzenböck در bpo-16423.)

متد HTTP که توسط یک کلاس Request استفاده خواهد شد، اکنون می‌تواند با تنظیم ویژگی کلاسی method روی زیرکلاس مشخص شود. (مشارکت Jason R Coombs در bpo-18978.)

اشیاء Request اکنون قابل استفاده‌ی مجدد هستند: اگر ویژگی‌های full_url یا data تغییر داده شوند، تمام خصوصیات داخلی مربوطه به‌روزرسانی می‌شوند. این بدان معناست که، برای مثال، اکنون می‌توان از همان شیء Request در بیش از یک فراخوانی OpenerDirector.open() با آرگومان‌های data متفاوت استفاده کرد، یا url یک Requestرا به‌جای محاسبه‌ی دوباره‌ی آن از ابتدا تغییر داد. همچنین یک متد جدید remove_header() وجود دارد که می‌توان از آن برای حذف سرآیندها از یک Request استفاده کرد. (مشارکت‌شده توسط Alexey Kachayev در bpo-16464، Daniel Wozniak در bpo-17485، و Damien Brecht و Senthil Kumaran در bpo-17272.)

اشیاء HTTPError اکنون دارای ویژگی headers هستند که دسترسی به سرآیندهای پاسخ HTTP مرتبط با خطا را فراهم می‌کند. (با مشارکت Berker Peksag در bpo-15701.)

unittest

کلاس TestCase متد جدیدی به نام subTest() دارد که یک مدیر زمینه تولید می‌کند که بلوک with آن به یک «زیرآزمون» تبدیل می‌شود. این مدیر زمینه به یک متد آزمون اجازه می‌دهد تا به‌صورت پویا زیرآزمون تولید کند، مثلاً با فراخوانی مدیر زمینه‌ی subTest درون یک حلقه. بدین ترتیب، یک متد آزمون واحد می‌تواند تعداد نامحدودی آزمون تولید کند که هر یک به‌طور جداگانه شناسایی و شمارش می‌شوند و همه‌ی آن‌ها اجرا خواهند شد، حتی اگر یک یا چند مورد از آن‌ها شکست بخورند. برای مثال:

class NumbersTest(unittest.TestCase):
    def test_even(self):
        for i in range(6):
            with self.subTest(i=i):
                self.assertEqual(i % 2, 0)

منجر به شش زیرآزمون می‌شود که هر یک در خروجی مفصل (verbose) unittest با برچسبی متشکل از نام متغیر i و مقدار خاصی برای آن متغیر (i=0، i=1 و غیره) شناسایی می‌شود. برای نسخه‌ی کامل این مثال به تمایز تکرارهای آزمون با استفاده از زیرآزمون‌ها مراجعه کنید. (مشارکت‌شده توسط آنتوان پیترو در bpo-16997.)

unittest.main() اکنون یک پیمایش‌پذیر از نام‌های آزمون را برای defaultTest می‌پذیرد، در حالی که پیش‌تر فقط یک نام آزمون واحد را به‌صورت رشته می‌پذیرفت. (با مشارکت Jyrki Pulliainen در bpo-15132.)

اگر SkipTest در حین کشف آزمون raise شود (یعنی در سطح ماژول در پرونده‌ی آزمون)، اکنون به‌عنوان رد شدن (skip) به‌جای خطا گزارش می‌شود. (مشارکت‌شده توسط Zach Ware در bpo-16935.)

discover() اکنون پرونده‌های کشف‌شده را مرتب می‌کند تا ترتیب سازگار آزمون‌ها فراهم شود. (مشارکت‌شده توسط Martin Melin و Jeff Ramnani در bpo-16709.)

TestSuite اکنون در صورت موفق بودن آزمون، به‌محض اجرا شدن آن ارجاع به آزمون‌ها را حذف می‌کند. در مفسرهای پایتون که زباله‌روبی انجام می‌دهند، این امر اجازه می‌دهد آزمون‌ها در صورتی که هیچ چیز دیگری ارجاعی به آزمون نگه نداشته باشد، زباله‌روبی شوند. می‌توان این رفتار را با ایجاد زیرکلاسی از TestSuite که متد سفارشی _removeTestAtIndex را تعریف می‌کند، بازتعریف کرد. (مشارکت Tom Wardill، Matt McClure و Andrew Svetlov در bpo-11798.)

یک مدیر زمینه‌ی جدید برای ادعای آزمون، assertLogs()، تضمین می‌کند که بلوک معینی از کد، با استفاده از ماژول logging، پیام گزارشی ثبت کند. به‌طور پیش‌فرض، پیام می‌تواند از هر گزارش‌گیری باشد و اولویت INFO یا بالاتر داشته باشد، اما هم نام گزارش‌گیر و هم یک حداقل سطح گزارش‌گیری جایگزین را می‌توان مشخص کرد. می‌توان از شیء بازگردانده‌شده توسط مدیر زمینه، (مشارکت‌شده توسط آنتوان پی‌ترو در :issue:`18937.)

کشف آزمون اکنون با بسته‌های فضای نام کار می‌کند (مشارکت‌شده توسط Claudiu Popa در bpo-17457.)

اشیاء unittest.mock اکنون هنگام تطبیق فراخوانی‌ها، امضاهای مشخصه‌ی خود را بازرسی می‌کنند؛ یعنی یک آرگومان اکنون می‌تواند بر اساس جایگاه یا نام تطبیق داده شود، نه فقط بر اساس جایگاه. (مشارکت‌شده توسط آنتوان پی‌ترو در bpo-17015.)

اشیاء mock_open() اکنون متدهای readline و readlines دارند. (مشارکت‌شده توسط Toshio Kuratomi در bpo-17467.)

venv

venv اکنون شامل اسکریپت‌های فعال‌سازی برای پوسته‌های csh و fish است. (مشارکت‌شده توسط Andrew Svetlov در bpo-15417.)

کلاس EnvBuilder و تابع کمکی create() آرگومان کلیدواژه‌ای جدیدی به نام with_pip می‌گیرند که مقدار پیش‌فرض آن False است و کنترل می‌کند که EnvBuilder اطمینان حاصل کند که pip در محیط مجازی نصب‌شده است یا نه. (مشارکت از نیک کاگلان در bpo-19552 به‌عنوان بخشی از پیاده‌سازی PEP 453.)

موج

متد getparams() اکنون به‌جای یک تاپل ساده، یک تاپل نام‌دار برمی‌گرداند. (مشارکت‌شده توسط Claudiu Popa در bpo-17487.)

wave.open() اکنون از پروتکل مدیریت زمینه پشتیبانی می‌کند. (با مشارکت Claudiu Popa در bpo-17616.)

wave اکنون می‌تواند خروجی را در پرونده‌های غیرقابل مکان‌یابی بنویسد. (با مشارکت David Jones، Guilherme Polo و Serhiy Storchaka در bpo-5202.)

متدهای writeframesraw() و writeframes() اکنون هر bytes-like object را می‌پذیرند. (مشارکت‌شده توسط Serhiy Storchaka در bpo-8311.)

weakref

کلاس جدید WeakMethod ارجاع‌های ضعیف به متدهای مقید را شبیه‌سازی می‌کند. (ارائه شده توسط آنتوان پی‌ترو در bpo-14631.)

کلاس جدید finalize این امکان را فراهم می‌کند که کال‌بکی برای فراخوانی‌شدن هنگام زباله‌روبی یک شیء ثبت کنید، بدون آنکه لازم باشد چرخه حیات خودِ ارجاع ضعیف را با دقت مدیریت کنید. (ارائه‌شده توسط Richard Oudkerk در bpo-15528.)

کال‌بک مرتبط با یک ref (در صورت وجود) اکنون از طریق ویژگی __callback__ در دسترس قرار می‌گیرد. (مشارکت Mark Dickinson در bpo-17643.)

xml.etree

پارسر جدید، XMLPullParser، به برنامه‌های غیرمسدودکننده (non-blocking) اجازه می‌دهد اسناد XML را تجزیه کنند. نمونه‌ای از آن را می‌توان در API کششی (Pull API) برای تجزیه‌ی غیرمسدودکننده مشاهده کرد. (مشارکت آنتوان پی‌ترو در bpo-17741.)

توابع tostring() و tostringlist() ماژول xml.etree.ElementTree و متد write() کلاس ElementTree، اکنون یک پارامتر فقط‌کلیدواژه‌ای به نام short_empty_elements دارند که کنترل می‌کند که المان‌های بدون محتوا به شکل مختصر (<tag />) یا گسترش‌یافته (<tag></tag>) نوشته شوند. (مشارکت‌شده توسط آریل پولیاک و سرهی استورچاکا در bpo-14377.)

zipfile

متد writepy() از کلاس PyZipFile گزینه‌ی جدید filterfunc دارد که می‌توان از آن برای کنترل اینکه کدام پوشه‌ها و پرونده‌ها به آرشیو اضافه می‌شوند استفاده کرد. برای مثال، می‌توان از این گزینه برای مستثنا کردن پرونده‌های آزمون از آرشیو استفاده کرد. (مشارکت‌شده توسط Christian Tismer در bpo-19274.)

پارامتر allowZip64 در ZipFile و PyZipFile اکنون به‌صورت پیش‌فرض True است. (با مشارکت William Mallard در bpo-17201.)

تغییرات پیاده‌سازی سی‌پایتون

PEP 445: سفارشی‌سازی تخصیص‌دهنده‌های حافظه‌ی سی‌پایتون

PEP 445 رابط‌های جدیدی در سطح C برای سفارشی‌سازی تخصیص حافظه در مفسر سی‌پایتون اضافه می‌کند.

همچنین ملاحظه نمائید

PEP 445 -- افزودن APIهای جدید برای سفارشی‌سازی تخصیص‌دهنده‌های حافظه پایتون

PEP نوشته و پیاده‌سازی شده توسط ویکتور استینر.

PEP 442: نهایی‌سازی ایمن شیء

PEP 442 محدودیت‌ها و رفتارهای عجیب فعلی نهایی‌سازی شیء در سی‌پایتون را حذف می‌کند. با آن، اشیایی که متدهای __del__() دارند و همچنین تولیدگرهایی که بندهای finally دارند، می‌توانند هنگامی که بخشی از یک چرخه ارجاع هستند، نهایی‌سازی شوند.

به عنوان بخشی از این تغییر، متغیرهای سراسری ماژول در بیشتر موارد دیگر به‌طور اجباری روی None تنظیم نمی‌شوند و در عوض به عملکرد عادی زباله‌روب چرخه‌ای تکیه می‌شود. این کار از دسته‌ای کامل از خطاهای زمان خاموشی مفسر جلوگیری می‌کند؛ خطاهایی که معمولاً متدهای __del__ را درگیر می‌کنند و از زمانی که زباله‌روب چرخه‌ای برای نخستین بار معرفی شد، پایتون را آزار داده‌اند.

همچنین ملاحظه نمائید

PEP 442 -- نهایی‌سازی ایمن شیء

PEP نوشته و پیاده‌سازی‌شده توسط آنتوان پی‌ترو.

PEP 456: الگوریتم هش امن و قابل تعویض

PEP 456 ادامه‌ی کارهای اصلاح امنیتی پیشین است که روی الگوریتم هش پایتون برای مقابله با برخی حملات انکار سرویس (DOS) انجام شده‌اند؛ حملاتی که ممکن است APIهای عمومیِ مبتنی بر جستجوهای دیکشنری در معرض آن‌ها قرار گیرند. (برای آغاز دور فعلی بهبودها، به bpo-14621 مراجعه کنید.) این PEP کد هش سی‌پایتون را یکپارچه می‌کند تا جایگزینی یک الگوریتم هش متفاوت برای بسته‌ساز آسان‌تر شود، و پیاده‌سازی پیش‌فرض پایتون را روی پلتفرم‌هایی که نوع داده ۶۴ بیتی دارند به پیاده‌سازی SipHash تغییر می‌دهد. هرگونه تفاوت کارایی در مقایسه با الگوریتم قدیمی‌تر FNV ناچیز است.

این PEP فیلدهای بیشتری به تاپل نام‌دار sys.hash_info اضافه می‌کند تا الگوریتم هش مورد استفاده در پرونده دودویی در حال اجرا را توصیف کند. در غیر این صورت، این PEP هیچ‌یک از APIهای موجود سی‌پایتون را تغییر نمی‌دهد.

PEP 436: کلینیک آرگومان (Argument Clinic)

«Argument Clinic» (PEP 436) اکنون بخشی از فرایند ساخت سی‌پایتون است و می‌توان از آن برای ساده‌سازی فرایند تعریف و نگهداری امضاهای دقیق توکار‌ها و ماژول‌های توسعه‌ای کتابخانه استاندارد که در C پیاده‌سازی شده‌اند، استفاده کرد.

برخی از ماژول‌های توسعه‌ای کتابخانه استاندارد در پایتون 3.4 به استفاده از Argument Clinic تبدیل شده‌اند و pydoc و inspect نیز مطابق با آن به‌روزرسانی شده‌اند.

انتظار می‌رود که به‌عنوان بخشی از نسخه‌های نگهداری پایتون 3.4، فراداده‌های امضا برای درون‌نگری برنامه‌ای به فراخوانی‌پذیرهای بیشتری که در C پیاده‌سازی شده‌اند افزوده شوند.

توجه

PEP مربوط به Argument Clinic به‌طور کامل با وضعیت پیاده‌سازی به‌روز نیست. این امر در این مورد توسط مدیر انتشار و تیم توسعه‌ی هسته قابل قبول دانسته شده است، زیرا Argument Clinic در پایتون 3.4 به‌عنوان یک API عمومی برای استفاده‌ی اشخاص ثالث در دسترس قرار نخواهد گرفت.

همچنین ملاحظه نمائید

PEP 436 -- زبان اختصاصی دامنه‌ی Argument Clinic

PEP نوشته و پیاده‌سازی‌شده توسط لری هستینگز.

سایر تغییرات ساخت و API زبان C

  • تابع جدید PyType_GetSlot() به رابط دودویی پایدار افزوده شده است که امکان بازیابی اشاره‌گرهای تابع از جایگاه‌های نام‌دار نوع را هنگام استفاده از API محدود فراهم می‌کند. (با مشارکت Martin von Löwis در bpo-17162.)

  • API جدیدِ پیش‌مقداردهی اولیه‌ی Py_SetStandardStreamEncoding() به برنامه‌هایی که مفسر سی‌پایتون را تعبیه می‌کنند اجازه می‌دهد تا به‌طور قابل اطمینان یک کدگذاری و هندلر خطای خاص را برای جریان‌های استاندارد اعمال کنند. (با مشارکت Bastien Montagne و Nick Coghlan در bpo-16129.)

  • بیشتر APIهای C پایتون که آرگومان‌های رشته‌ای را تغییر نمی‌دهند، اکنون به‌درستی به‌عنوان پذیرنده‌ی const char * به‌جای char * نشانه‌گذاری شده‌اند. (نوشته‌ی سرهی استورچاکا در bpo-1772673.)

  • نسخه‌ی پوسته‌ای جدید از python-config حتی زمانی که مفسر پایتون در دسترس نباشد (برای مثال، در سناریوهای کامپایل متقاطع) قابل استفاده است.

  • PyUnicode_FromFormat() اکنون مشخصات عرض و دقت را برای %s، %A، %U، %V، %S و %R پشتیبانی می‌کند. (مشارکت‌شده توسط Ysj Ray و Victor Stinner در bpo-7330.)

  • تابع جدید PyStructSequence_InitType2() مکمل تابع موجود PyStructSequence_InitType() است. تفاوت آن این است که در صورت موفقیت 0 و در صورت شکست -1 برمی‌گرداند.

  • اکنون می‌توان کد منبع سی‌پایتون را با استفاده از قابلیت‌های بررسی سلامت آدرس (address sanity checking) در نسخه‌های اخیر GCC و clang کامپایل کرد: هشدارهای کاذب در تخصیص‌دهنده اشیاء کوچک ساکت شده‌اند. (مشارکت‌شده توسط Dhiru Kholia در bpo-18596.)

  • نسخه‌ی ویندوزی اکنون از تصادفی‌سازی چیدمان فضای آدرس (Address Space Layout Randomization) و جلوگیری از اجرای داده (Data Execution Prevention) استفاده می‌کند. (با مشارکت Christian Heimes در bpo-16632.)

  • تابع جدید PyObject_LengthHint() معادل operator.length_hint() در C API است. (مشارکت‌شده توسط Armin Ronacher در bpo-16148.)

بهبود‌های دیگر

  • دستور python یک گزینه جدید، -I، دارد که باعث می‌شود در «حالت ایزوله» اجرا شود؛ به این معنا که sys.path نه پوشه‌ی اسکریپت را در بر می‌گیرد و نه پوشه‌ی site-packages کاربر را، و همه‌ی متغیرهای محیطی PYTHON* نادیده گرفته می‌شوند (این گزینه به‌طور ضمنی شامل هر دو گزینه‌ی -s و -E است). ممکن است در آینده محدودیت‌های دیگری نیز اعمال شود؛ هدف این است که اجرای یک اسکریپت از محیط کاربر ایزوله شود. این حالت برای مثال زمانی مناسب است که پایتون برای اجرای یک اسکریپت سیستمی به کار می‌رود. در بیشتر سیستم‌های POSIX می‌توان و باید از آن در سطر #! اسکریپت‌های سیستمی استفاده کرد. (مشارکت‌شده توسط Christian Heimes در bpo-16499.)

  • تکمیل با Tab اکنون به‌صورت پیش‌فرض در مفسر تعاملی سیستم‌هایی که از readline پشتیبانی می‌کنند فعال است. تاریخچه نیز به‌صورت پیش‌فرض فعال است و در پرونده‌ی ~/.python-history نوشته می‌شود (و از آن خوانده می‌شود). (مشارکت‌شده توسط آنتوان پی‌ترو و اریک آراوجو در bpo-5845.)

  • فراخوانی مفسر پایتون با --version اکنون نسخه را به جای خطای استاندارد، به خروجی استاندارد خروجی می‌دهد (bpo-18338). تغییرات مشابهی در argparse (bpo-18920) و سایر ماژول‌هایی که قابلیت‌های فراخوانی شبیه اسکریپت دارند، اعمال شد (bpo-18922).

  • نصاب ویندوزی سی‌پایتون اکنون هنگام ثبت پسوندها، .py را به متغیر PATHEXT اضافه می‌کند و به کاربران امکان می‌دهد یک اسکریپت پایتون را در خط فرمان ویندوز فقط با تایپ کردن نام آن بدون پسوند .py اجرا کنند. (مشارکت از Paul Moore در bpo-18569.)

  • هدف جدید make به نام coverage-report پایتون را می‌سازد، بدنه آزمون‌ها را اجرا می‌کند و با استفاده از gcov و lcov یک گزارش پوشش HTML برای کدبیس C تولید می‌کند.

  • گزینه‌ی -R در بدنه آزمون رگرسیون پایتون اکنون با استفاده از sys.getallocatedblocks()، نشت‌های تخصیص حافظه را نیز بررسی می‌کند. (مشارکت‌شده توسط آنتوان پی‌ترو در bpo-13390.)

  • python -m اکنون با بسته‌های فضای نام کار می‌کند.

  • ماژول stat اکنون به زبان C پیاده‌سازی شده است؛ بدین معنا که مقادیر ثابت‌های خود را از پرونده‌های سرآیند C دریافت می‌کند، نه اینکه این مقادیر، همان‌طور که قبلاً چنین بود، به‌صورت هاردکد (hard-coded) در ماژول پایتون نوشته شده باشند.

  • بارگذاری چندین ماژول پایتون از یک ماژول سیستم‌عامل واحد (.so، .dll) اکنون به‌درستی کار می‌کند (پیش‌تر، اولین ماژول پایتون در پرونده را بی‌صدا بازمی‌گرداند). (مشارکت‌شده توسط واتسلاو شمیلاور در bpo-16421.)

  • آپ‌کد جدیدی با نام LOAD_CLASSDEREF برای رفع اشکالی در بارگذاری متغیرهای آزاد در بدنه کلاس‌ها اضافه شده است که می‌توانست با استفاده‌های خاصی از __prepare__ فعال شود. (مشارکت Benjamin Peterson در bpo-17853.)

  • تعدادی از فروپاشی‌های مرتبط با MemoryError توسط ویکتور استینر و با استفاده از ابزار pyfailmalloc او که مبتنی بر PEP 445 بود، شناسایی و رفع شدند (bpo-18408، bpo-18520).

  • فرمان pyvenv اکنون گزینه‌ی --copies را می‌پذیرد تا حتی در سیستم‌هایی که پیوندهای نمادین در آن‌ها پیش‌فرض هستند، از کپی به جای پیوند نمادین استفاده شود. (مشارکت‌شده توسط Vinay Sajip در bpo-18807.)

  • دستور pyvenv همچنین گزینه‌ی --without-pip را می‌پذیرد تا از بوت‌استرپینگ pip در محیط مجازی که در غیر این صورت به‌طور خودکار انجام می‌شود، جلوگیری کند. (مشارکت‌شده توسط نیک کافلان در bpo-19552 به عنوان بخشی از پیاده‌سازی PEP 453.)

  • نام کدگذاری اکنون در مقدار تنظیم‌شده برای متغیر محیطی PYTHONIOENCODING اختیاری است. این امر امکان می‌دهد بدون تغییر کدگذاری پیش‌فرض، تنها هندلر خطا را تنظیم کنید. (مشارکت‌شده توسط Serhiy Storchaka در bpo-18818.)

  • توابع open ماژول‌های bz2، lzma و gzip اکنون از حالت x (ایجاد انحصاری) پشتیبانی می‌کنند. (مشارکت‌شده توسط Tim Heaney و Vajrasky Kok در bpo-19201، bpo-19222 و bpo-19223.)

بهینه‌سازی‌های چشمگیر

  • کدگشای UTF-32 اکنون ۳ تا ۴ برابر سریع‌تر است. (مشارکت Serhiy Storchaka در bpo-14625.)

  • هزینه‌ی برخوردهای هش برای مجموعه‌ها اکنون کاهش یافته است. هر کاوش جدول هش اکنون پیش از آنکه به کاوش‌های تصادفی در جدول هش ادامه دهد، مجموعه‌ای از جفت‌های کلید/هش متوالی و مجاور را بررسی می‌کند. این امر از محلیت نهانگاه (cache locality) بهره می‌برد تا حل برخورد کم‌هزینه‌تر شود. طرح‌واره‌ی حل برخورد را می‌توان ترکیبی از کاوش خطی (linear probing) و آدرس‌دهی باز (open addressing) توصیف کرد. تعداد کاوش‌های خطی اضافی به‌طور پیش‌فرض ۹ است. این مقدار را می‌توان در زمان کامپایل با تعریف کردن LINEAR_PROBES به هر مقداری تغییر داد. برای غیرفعال کردن کامل کاوش خطی، LINEAR_PROBES=0 را تنظیم کنید. (مشارکت‌شده توسط Raymond Hettinger در bpo-18771.)

  • مفسر حدود ۳۰٪ سریع‌تر راه‌اندازی می‌شود. چند اقدام به این افزایش سرعت منجر شده است. مفسر هنگام راه‌اندازی ماژول‌های کمتری را بارگذاری می‌کند؛ برای مثال، ماژول‌های re، collections و locale و وابستگی‌هایشان دیگر به‌طور پیش‌فرض ایمپورت نمی‌شوند. ماژول marshal برای بارگذاری سریع‌تر کد کامپایل‌شده‌ی پایتون بهبود یافته است. (مشارکت‌شده توسط Antoine Pitrou، Christian Heimes و Victor Stinner در bpo-19219، bpo-19218، bpo-19209، bpo-19205 و bpo-9548.)

  • bz2.BZ2File اکنون در بیشتر موارد به اندازه‌ی نسخه‌ی Python2 سریع یا سریع‌تر از آن است. lzma.LZMAFile نیز بهینه‌سازی‌شده است. (مشارکت‌شده توسط Serhiy Storchaka و Nadeem Vawda در bpo-16034.)

  • random.getrandbits() برای اعداد صحیح کوچک (رایج‌ترین مورد استفاده) ۲۰٪ تا ۴۰٪ سریع‌تر است. (مشارکت‌شده توسط Serhiy Storchaka در bpo-16674.)

  • با بهره‌گیری از قالب ذخیره‌سازی جدید رشته‌ها، پیکل‌سازی رشته‌ها اکنون به‌طور چشمگیری سریع‌تر شده است. (مشارکت‌شده توسط Victor Stinner و Antoine Pitrou در bpo-15596.)

  • یک مشکل کارایی در io.FileIO.readall() حل شد. این مورد به‌ویژه ویندوز را تحت تأثیر قرار می‌دهد و سرعت پایپ کردن حجم قابل توجهی از داده‌ها از طریق subprocess را به‌طور چشمگیری افزایش می‌دهد. (مشارکت‌شده توسط Richard Oudkerk در bpo-15758.)

  • html.escape() اکنون ۱۰ برابر سریع‌تر است. (مشارکت‌شده توسط مت برایانت در bpo-18020.)

  • در ویندوز، اکنون در obmalloc به‌جای malloc مربوط به CRT از VirtualAlloc بومی استفاده می‌شود. بنچمارک‌های مصنوعی حدود ۳٪ صرفه‌جویی در حافظه را نشان می‌دهند.

  • os.urandom() اکنون از یک توصیف‌گر پرونده‌ی پایا که به‌صورت تنبل گشوده می‌شود استفاده می‌کند تا هنگام اجرای موازی از چندین نخ، از به‌کارگیری توصیف‌گرهای پرونده‌ی فراوان اجتناب کند. (مشارکت‌شده توسط آنتوان پی‌ترو در bpo-18756.)

منسوخ

این بخش به API‌های گوناگون و سایر قابلیت‌هایی می‌پردازد که در پایتون 3.4 منسوخ شده‌اند و در پایتون 3.5 یا بعد از آن حذف خواهند شد. در بیشتر موارد (اما نه همه‌ی موارد)، استفاده از API‌های منسوخ باعث تولید DeprecationWarning می‌شود، هنگامی که مفسر با فعال بودن هشدارهای منسوخ‌شدگی اجرا شود (برای مثال، با استفاده از -Wd).

منسوخ‌شدگی‌ها در API پایتون

  • همان‌طور که در PEP 451: نوع ModuleSpec برای سیستم ایمپورت ذکر شد، تعدادی از متدها و توابع importlib منسوخ شده‌اند: importlib.find_loader() با importlib.util.find_spec() جایگزین شده است؛ importlib.machinery.PathFinder.find_module() با importlib.machinery.PathFinder.find_spec() جایگزین شده است؛ importlib.abc.MetaPathFinder.find_module() با importlib.abc.MetaPathFinder.find_spec() جایگزین شده است؛ importlib.abc.PathEntryFinder.find_loader() و find_module() با importlib.abc.PathEntryFinder.find_spec() جایگزین شده‌اند؛ همه متدهای load_module کلاس‌های پایه انتزاعی xxxLoader (importlib.abc.Loader.load_module()، importlib.abc.InspectLoader.load_module()، importlib.abc.FileLoader.load_module()، importlib.abc.SourceLoader.load_module()) دیگر نباید پیاده‌سازی شوند؛ در عوض، بارگذارها باید یک متد exec_module پیاده‌سازی کنند (importlib.abc.Loader.exec_module()، importlib.abc.InspectLoader.exec_module()، importlib.abc.SourceLoader.exec_module()) و بگذارند سیستم ایمپورت بقیه کارها را انجام دهد؛ و importlib.abc.Loader.module_repr()، importlib.util.module_for_loader()، importlib.util.set_loader() و importlib.util.set_package() دیگر مورد نیاز نیستند، زیرا کارکردهای آن‌ها اکنون به‌طور خودکار توسط سیستم ایمپورت مدیریت می‌شوند.

  • ماژول imp در آستانه‌ی منسوخ شدن است. برای حفظ سازگاری با کدبیس‌های Python 2/3، حذف این ماژول در حال حاضر برنامه‌ریزی نشده است.

  • ماژول formatter در انتظار منسوخ شدن است و برای حذف در پایتون 3.6 برنامه‌ریزی شده است.

  • استفاده از MD5 به‌عنوان digestmod پیش‌فرض برای تابع hmac.new() منسوخ شده است. پایتون 3.6 مستلزم آن خواهد بود که نام چکیده یا سازنده به‌صورت صریح به‌عنوان آرگومان digestmod ارائه شود.

  • کلاس داخلی Netrc در ماژول ftplib از مدت‌ها پیش در رشته مستند خود به‌عنوان منسوخ مستند شده است. این کلاس اکنون یک DeprecationWarning صادر می‌کند و در پایتون 3.5 به‌طور کامل حذف خواهد شد.

  • آرگومان مستندنشده‌ی endtime در subprocess.Popen.wait() نباید افشا می‌شد و امیدواریم استفاده نشده باشد؛ این آرگومان منسوخ شده است و به احتمال زیاد در پایتون 3.5 حذف خواهد شد.

  • آرگومان strict در HTMLParser منسوخ شده است.

  • توابع readPlist()، writePlist()، readPlistFromBytes() و writePlistToBytes() در ماژول plistlib به نفع توابع جدید متناظر load()، dump()، loads() و dumps() منسوخ شده‌اند. Data() منسوخ شده است و به جای آن، صرفاً از سازنده‌ی bytes استفاده می‌شود.

  • کلید SO در sysconfig منسوخ شده است و با EXT_SUFFIX جایگزین شده است.

  • حالت U که توسط توابع مختلف open پذیرفته می‌شود، منسوخ شده است. در Python3 این حالت هیچ کاربرد مفیدی ندارد و باید با استفاده‌های مناسب از io.TextIOWrapper (در صورت نیاز) و آرگومان newline آن جایگزین شود.

  • آرگومان parser در xml.etree.ElementTree.iterparse() منسوخ شده است، همان‌طور که آرگومان html در XMLParser() نیز منسوخ شده است. به منظور آماده شدن برای حذف مورد دوم، تمام آرگومان‌های XMLParser باید به‌صورت کلیدواژه‌ای ارسال شوند.

قابلیت‌های منسوخ

  • اجرای IDLE --- ویرایشگر و پوسته پایتون با پرچم -n (بدون زیرفرایند) منسوخ شده است. با این حال، این قابلیت تا زمانی که bpo-18823 حل نشود، حذف نخواهد شد.

  • افزودن پوشه‌ی «site-python» به sys.path توسط ماژول site، در صورت وجود آن، منسوخ شده است (bpo-19375).

حذف‌شده

سیستم‌عامل‌هایی که دیگر پشتیبانی نمی‌شوند

پشتیبانی از سیستم‌عامل‌های زیر از کد منبع و ابزارهای ساخت حذف شده است:

  • OS/2 (bpo-16135).

  • ویندوز ۲۰۰۰ (مجموعه تغییرات (changeset) e52df05b496a).

  • سیستم‌های ویندوزی که در آن‌ها COMSPEC به command.com اشاره می‌کند (bpo-14470).

  • VMS (bpo-16136).

حذف APIها و قابلیت‌ها

APIها و قابلیت‌های منسوخ و پیش‌تر از رده خارج‌شده‌ی زیر حذف شده‌اند:

  • پوشه‌های Misc/TextMate و Misc/vim که دیگر نگهداری نمی‌شدند، حذف شده‌اند (برای پیشنهادهایی درباره‌ی اینکه به‌جای آن‌ها از چه استفاده کنید، راهنمای توسعه‌دهنده را ببینید).

  • ماکروی SO در makefile حذف شده است (جای آن را ماکروهای SHLIB_SUFFIX و EXT_SUFFIX گرفته‌اند) (bpo-16754).

  • فیلد PyThreadState.tick_counter حذف شده است؛ مقدار آن از زمانی که «قفل مفسر سراسری جدید» در پایتون 3.2 معرفی شد، بی‌معنا بوده است (bpo-19199).

  • PyLoader و PyPycLoader از importlib حذف شده‌اند. (مشارکت Taras Lyapun در bpo-15641.)

  • آرگومان strict در HTTPConnection و HTTPSConnection حذف شده است. «پاسخ‌های ساده» (Simple Responses) به سبک HTTP 0.9 دیگر پشتیبانی نمی‌شوند.

  • متدهای getter و setter منسوخ‌شده‌ی urllib.request.Request شامل add_data، has_data، get_data، get_type، get_host، get_selector، set_proxy، get_origin_req_host و is_unverifiable حذف شده‌اند (به‌جای آن‌ها از دسترسی مستقیم به ویژگی استفاده کنید).

  • پشتیبانی از بارگذاری TYPE_INT64 منسوخ از ماژول marshal حذف شده است. (مشارکت‌شده توسط Dan Riti در bpo-15480.)

  • inspect.Signature: پارامترهای صرفاً جایگاهی اکنون باید نام معتبری داشته باشند.

  • object.__format__() دیگر رشته‌های قالب‌بندی غیرخالی را نمی‌پذیرد و به جای آن اکنون یک TypeError ایجاد می‌کند. استفاده از رشته غیرخالی از پایتون 3.2 منسوخ شده است. این تغییر برای جلوگیری از وضعیتی انجام شده است که در آن، اگر شیئی متد __format__ به دست می‌آورد، کدی که پیش‌تر کار می‌کرد (اما نادرست بود) شروع به از کار افتادن می‌کرد؛ این بدان معناست که اگر از کد قالب‌بندی 's' با اشیائی که متد __format__ برای مدیریت آن ندارند استفاده می‌کنید، کد شما ممکن است اکنون یک TypeError ایجاد کند. برای اطلاع از پیش‌زمینه به bpo-7994 مراجعه کنید.

  • difflib.SequenceMatcher.isbjunk() و difflib.SequenceMatcher.isbpopular() در نسخه 3.2 منسوخ شدند و اکنون حذف شده‌اند: از x in sm.bjunk و x in sm.bpopular استفاده کنید، که در آن sm یک شیء SequenceMatcher است (bpo-13248).

پاک‌سازی کدها

  • کلاس داخلی Scanner که استفاده نشده و مستند نشده بود، از ماژول pydoc حذف شده است.

  • ماژول خصوصی و عملاً بی‌استفاده _gestalt به همراه توابع خصوصی ماژول platform یعنی _mac_ver_lookup، _mac_ver_gstalt و _bcd2str حذف شده‌اند؛ توابعی که تنها روی سیستم‌های OSX به‌شدت خراب فراخوانی می‌شدند (به bpo-18393 مراجعه کنید).

  • کپی‌های هاردکد‌شده (hardcoded) برخی ثابت‌های stat که در فضای نام ماژول tarfile گنجانده شده بودند، حذف شده‌اند.

انتقال به پایتون 3.4

این بخش، تغییرات پیش‌تر توضیح‌داده‌شده و رفع اشکال‌های دیگر را فهرست می‌کند که ممکن است نیازمند تغییراتی در کد شما باشند.

تغییرات در رفتار دستور «python»

  • در پوسته‌ی posix، تنظیم متغیر محیطی PATH به مقدار خالی معادل این است که اصلاً تنظیم نشده باشد. اما تنظیم PYTHONPATH به مقدار خالی معادل این نبود که اصلاً تنظیم نشده باشد: تنظیم PYTHONPATH به مقدار خالی معادل تنظیم آن به . بود، که همین امر هنگام استدلال از راه قیاس با نحوه‌ی کارکرد PATH منجر به سردرگمی می‌شود. اکنون این رفتار با قرارداد posix برای PATH مطابقت دارد.

  • خروجی [X refs, Y blocks] در ساخت دیباگ (--with-pydebug) مفسر سی‌پایتون اکنون به‌صورت پیش‌فرض غیرفعال است. می‌توان آن را با استفاده از گزینه -X showrefcount دوباره فعال کرد. (مشارکت ازیو ملوتتی در bpo-17323.)

  • دستور python و بیشتر اسکریپت‌های کتابخانه استاندارد (و همچنین argparse) اکنون اطلاعات --version را به stdout به‌جای stderr خروجی می‌دهند (برای فهرست مسائل، به بهبود‌های دیگر در بالا مراجعه کنید).

تغییرات در API پایتون

  • کلاس‌های پایه انتزاعی تعریف‌شده در importlib.abc اکنون به‌جای اینکه کورکورانه NotImplementedError ایجاد کنند، یا استثنای مناسب را ایجاد می‌کنند یا یک مقدار پیش‌فرض را برمی‌گردانند. این فقط بر کدی اثر می‌گذارد که super() را فراخوانی می‌کند و فراخوانی آن تمام مسیر تا کلاس‌های پایه انتزاعی را طی می‌کند. برای سازگاری، در صورت نیاز هر دو NotImplementedError و استثنای مناسب را بگیرید.

  • نوع ماژول اکنون ویژگی‌های __package__ و __loader__ را به‌طور پیش‌فرض با None مقداردهی اولیه می‌کند. برای تعیین اینکه آیا این ویژگی‌ها به شکلی سازگار با نسخه‌های پیشین تنظیم شده‌اند، مثلاً از getattr(module, '__loader__', None) is not None استفاده کنید. (bpo-17115.)

  • importlib.util.module_for_loader() اکنون __loader__ و __package__ را بدون قید و شرط تنظیم می‌کند تا از بارگذاری مجدد به‌درستی پشتیبانی کند. اگر این مورد مطلوب نیست، باید این ویژگی‌ها را به‌صورت دستی تنظیم کنید. برای مدیریت ماژول می‌توانید از importlib.util.module_to_load() استفاده کنید.

  • ایمپورت اکنون هنگام بارگذاری مجدد، ویژگی‌های مربوطه (مانند __name__، __loader__، __package__، __file__، __cached__) را بدون قید و شرط بازنشانی می‌کند. توجه داشته باشید که این کار رفتار پیش از 3.3 را بازمی‌گرداند، بدین معنا که یک ماژول هنگام بارگذاری مجدد دوباره یافته می‌شود (bpo-19413).

  • بسته‌های فریزشده دیگر __path__ را به فهرستی شامل نام بسته تنظیم نمی‌کنند، بلکه اکنون آن را به یک فهرست خالی تنظیم می‌کنند. رفتار قبلی می‌توانست در صورت وجود پوشه‌ای با همان نام بسته‌ی فریزشده، باعث شود سیستم ایمپورت هنگام ایمپورت زیرماژول‌ها کار اشتباهی انجام دهد. روش درست برای تعیین اینکه یک ماژول بسته است یا خیر، استفاده از hasattr(module, '__path__') است (bpo-18065).

  • ماژول‌های فریزشده دیگر ویژگی __file__ را تعریف نمی‌کنند. تنظیم این ویژگی توسط ماژول‌های فریزشده از نظر معنایی نادرست است، زیرا این ماژول‌ها از هیچ مکان صریحی بارگذاری نمی‌شوند. اگر لازم است بدانید که یک ماژول از کد فریزشده می‌آید، می‌توانید ببینید که آیا __spec__.location ماژول روی 'frozen' تنظیم شده است، بررسی کنید که آیا بارگذار زیرکلاسی از importlib.machinery.FrozenImporter است، یا اگر سازگاری با Python 2 ضروری است، می‌توانید از imp.is_frozen() استفاده کنید.

  • py_compile.compile() اکنون در صورتی که مسیر پرونده‌ای که قرار است در آن نوشته شود، یک پیوند نمادین یا پرونده‌ی غیر‌معمولی باشد، FileExistsError ایجاد می‌کند. این کار به‌عنوان هشداری عمل می‌کند که ایمپورت، صرف‌نظر از اینکه مسیر آن پرونده‌ها در اصل از چه نوعی بوده است، آن‌ها را با یک پرونده‌ی معمولی بازنویسی خواهد کرد.

  • importlib.abc.SourceLoader.get_source() دیگر هنگامی که کد منبعِ در حال بارگذاری، SyntaxError یا UnicodeDecodeError را به‌وجود می‌آورد، ImportError ایجاد نمی‌کند. از آنجا که ImportError قرار است تنها زمانی ایجاد شود که کد منبع یافت نشود در حالی که باید یافت شود، این‌طور احساس شد که وقتی کد منبع یافت می‌شود اما ساختار نامناسبی دارد، این کار فراتر رفتن از حدود/سربارگذاری آن معنا محسوب می‌شود. اگر پیش‌تر ImportError را می‌گرفتید و می‌خواهید همچنان مشکلات سینتکس یا کدگشایی را نادیده بگیرید، اکنون هر سه استثنا را بگیرید.

  • functools.update_wrapper() و @functools.wraps اکنون ویژگی __wrapped__ را به‌درستی به تابعی که پوشش داده می‌شود تنظیم می‌کنند، حتی اگر ویژگی __wrapped__ آن تابع نیز تنظیم شده باشد. این بدان معناست که ویژگی‌های __wrapped__ اکنون به‌درستی پشته‌ای از توابع دکوراتور‌شده را به هم پیوند می‌دهند، نه اینکه هر ویژگی __wrapped__ در زنجیره به داخلی‌ترین تابع اشاره کند. کتابخانه‌های درون‌نگری که رفتار پیشین را عمدی فرض می‌کردند، می‌توانند از inspect.unwrap() برای دسترسی به نخستین تابعی در زنجیره که ویژگی __wrapped__ ندارد استفاده کنند.

  • inspect.getfullargspec() بر مبنای inspect.signature() بازپیاده‌سازی شده است و از این رو طیف بسیار گسترده‌تری از اشیاء فراخوانی‌پذیر را نسبت به گذشته مدیریت می‌کند. انتظار می‌رود که فراخوانی‌پذیرهای توکار و فراخوانی‌پذیرهای ماژول‌های توسعه‌ای بیشتری در طول سری Python 3.4 فراداده‌ی امضا (signature) به دست آورند. کدی که فرض می‌کند inspect.getfullargspec() روی فراخوانی‌پذیرهای غیرپایتونی شکست می‌خورد، ممکن است لازم باشد متناسب با این موضوع تعدیل شود.

  • کلاس importlib.machinery.PathFinder اکنون پوشه‌ی کاری جاری را برای رشته‌ی خالی به اشیاء موجود در sys.path_hooks پاس می‌دهد. این کار باعث می‌شود sys.path_importer_cache هرگز شامل '' نباشد، در نتیجه پیمایش sys.path_importer_cache بر اساس sys.path همه‌ی کلیدها را پیدا نخواهد کرد. همچنین __file__ یک ماژول، هنگامی که در پوشه‌ی کاری جاری ایمپورت شود، اکنون مسیری مطلق خواهد داشت، از جمله هنگام استفاده از -m با مفسر (به جز __main__.__file__ هنگامی که یک اسکریپت مستقیماً با استفاده از مسیر نسبی اجرا شده باشد) (نوشته‌ی Brett Cannon در bpo-18416). در خط فرمان مشخص شده باشد) (bpo-18416).

  • حذف آرگومان strict از HTTPConnection و HTTPSConnection در صورتی که آرگومان‌ها را به‌صورت جایگاهی و نه با کلیدواژه مشخص کنید، معنای آرگومان‌های باقی‌مانده را تغییر می‌دهد. اگر به هشدارهای منسوخ‌شدن توجه کرده باشید، کد شما باید از قبل هر آرگومان اضافی را از طریق کلیدواژه‌ها مشخص کرده باشد.

  • رشته‌هایی که بین دستورهای from __future__ import ... قرار می‌گیرند، اکنون همیشه یک SyntaxError ایجاد می‌کنند. پیش‌تر، اگر رشته‌ی مستند ابتدایی وجود نداشت، رشته‌ی بینابینی گاهی نادیده گرفته می‌شد. این امر سی‌پایتون را با مشخصات زبان منطبق می‌کند؛ Jython و PyPy از قبل منطبق بودند. (bpo-17434).

  • ssl.SSLSocket.getpeercert() و ssl.SSLSocket.do_handshake() اکنون هنگامی که SSLSocket متصل نباشد، به‌جای رفتار پیشین که AttributeError ایجاد می‌کرد، استثنای OSError همراه با ENOTCONN ایجاد می‌کنند. علاوه بر این، getpeercert() در صورتی که دست‌دهی هنوز انجام نشده باشد، ValueError ایجاد می‌کند.

  • base64.b32decode() اکنون هنگامی که رشته‌ی ورودی شامل نویسه‌های خارج از الفبای b32 باشد، به‌جای TypeError، binascii.Error ایجاد می‌کند. این TypeError خاص هنگام تبدیل سایر TypeErrors از قلم افتاد. (ارائه‌شده توسط Serhiy Storchaka در bpo-18011.) یادداشت: این تغییر به‌طور ناخواسته در پایتون 3.3.3 نیز اعمال شد.

  • ویژگی file اکنون هنگامی که نمونه‌ی cgi.FieldStorage سازنده‌ی آن مورد زباله‌روبی قرار می‌گیرد، به‌طور خودکار بسته می‌شود. اگر شیء پرونده را به‌صورت جداگانه از نمونه‌ی cgi.FieldStorage بیرون می‌کشیدید و نمونه را زنده نگه نمی‌داشتید، در این صورت باید یا کل نمونه‌ی cgi.FieldStorage را ذخیره کنید یا محتویات پرونده را پیش از آنکه نمونه‌ی cgi.FieldStorage مورد زباله‌روبی قرار گیرد، بخوانید.

  • فراخوانی read یا write روی یک سوکت SSL بسته، اکنون به جای AttributeError مرموزتر قبلی، استثنای گویای ValueError ایجاد می‌کند (bpo-9177).

  • slice.indices() دیگر برای مقادیر بسیار بزرگ OverflowError تولید نمی‌کند. در نتیجه‌ی این اصلاح، slice.indices() اکنون در صورت دریافت طول منفی، ValueError ایجاد می‌کند؛ پیش‌تر مقادیر بی‌معنی بازمی‌گرداند (bpo-14794).

  • سازنده‌ی complex، برخلاف توابع cmath، به‌طور نادرست مقدارهای float را می‌پذیرفت اگر متد ویژه‌ی __complex__ یک شیء یکی از آن‌ها را برمی‌گرداند. اکنون این مورد یک TypeError ایجاد می‌کند. (bpo-16290.)

  • سازنده‌ی int در نسخه‌های 3.2 و 3.3 به‌اشتباه مقادیر float را برای پارامتر base می‌پذیرفت. بعید است کسی این کار را انجام داده باشد، اما در این صورت، اکنون خطای TypeError ایجاد خواهد شد (bpo-16772).

  • مقدارهای پیش‌فرض آرگومان‌های صرفاً کلیدواژه‌ای اکنون پس از مقدارهای پیش‌فرض آرگومان‌های کلیدواژه‌ای معمولی ارزیابی می‌شوند، نه پیش از آن‌ها. امیدواریم هیچ‌کس کدی ننوشته باشد که به رفتار اشکال‌دار قبلی وابسته باشد (bpo-16967).

  • وضعیت‌های کهنه‌ی نخ‌ها اکنون پس از fork() پاک‌سازی می‌شوند. این ممکن است باعث شود برخی منابع سیستمی که پیش‌تر به‌اشتباه برای همیشه زنده نگه داشته می‌شدند، آزاد شوند (برای مثال، اتصالات پایگاه داده که در ذخیره‌سازی نخ‌محلی نگه داشته می‌شدند). (bpo-17094.)

  • نام‌های پارامترها در دیکشنری‌های __annotations__ اکنون به‌درستی تغییر نام می‌یابند (mangled)، مشابه __kwdefaults__. (مشارکت از سوی Yury Selivanov در bpo-20625.)

  • hashlib.hash.name اکنون همیشه شناسه را با حروف کوچک برمی‌گرداند. پیش‌تر برخی هش‌های توکار نام‌هایی با حروف بزرگ داشتند، اما اکنون که این یک رابط عمومی رسمی است، نام‌گذاری یکدست شده است (bpo-18532).

  • از آنجا که unittest.TestSuite اکنون پس از اجرا شدن آزمون‌ها، ارجاع‌های به آن‌ها را حذف می‌کند، ابزارهای اجرای آزمون (test harness) که از یک TestSuite برای اجرای مجدد مجموعه‌ای از آزمون‌ها استفاده مجدد می‌کنند، ممکن است شکست بخورند. مجموعه‌های آزمون نباید به این شیوه استفاده مجدد شوند، زیرا این کار به معنای حفظ شدن وضعیت بین اجراهای آزمون است و مجزاسازی آزمونی را که unittest برای فراهم کردن آن طراحی شده است، از بین می‌برد. با این حال، اگر فقدان مجزاسازی قابل قبول تلقی شود، می‌توان با ایجاد زیرکلاسی از TestSuite که متدی به نام _removeTestAtIndex تعریف می‌کند که هیچ کاری انجام نمی‌دهد، رفتار قدیمی را بازگرداند (نگاه کنید به TestSuite.__iter__()) (bpo-11798).

  • unittest اکنون از argparse برای تجزیه‌ی خط فرمان استفاده می‌کند. برخی از شکل‌های نامعتبر فرمان که پیش‌تر کار می‌کردند، دیگر مجاز نیستند؛ در تئوری این نباید مشکلات سازگاری پس‌رونده ایجاد کند، زیرا شکل‌های فرمانِ غیرمجاز بی‌معنا بودند و بعید است که در حال استفاده باشند.

  • وقتی رشته‌ای که باید تطبیق داده شود یک شیء شبه‌بایت باشد، توابع re.split()، re.findall() و re.sub() و متدهای group() و groups() از اشیاء match اکنون همیشه یک شیء bytes برمی‌گردانند. پیش‌تر نوع بازگشتی با نوع ورودی مطابقت داشت، بنابراین اگر کد شما به این موضوع وابسته بود که مقدار بازگشتی، مثلاً، یک bytearray باشد، لازم است کد خود را تغییر دهید.

  • توابع audioop اکنون در صورت دریافت ورودی رشته‌ای، بلافاصله خطا ایجاد می‌کنند، به جای آنکه بعداً به‌طور تصادفی شکست بخورند (bpo-16685).

  • آرگومان جدید convert_charrefs در HTMLParser در حال حاضر برای سازگاری با نسخه‌های پیشین، به‌طور پیش‌فرض False است، اما سرانجام مقدار پیش‌فرض آن به True تغییر خواهد کرد. توصیه می‌شود این کلیدواژه را با مقدار مناسب، به هر یک از فراخوانی‌های HTMLParser در کد خود اضافه کنید (bpo-13633).

  • از آنجا که آرگومان digestmod در تابع hmac.new() در آینده پیش‌فرضی نخواهد داشت، تمام فراخوانی‌های hmac.new() باید به‌گونه‌ای تغییر داده شوند که digestmod را به‌طور صریح مشخص کنند (bpo-17276).

  • فراخوانی sysconfig.get_config_var() با کلید SO، یا جست‌وجوی SO در نتایج فراخوانی sysconfig.get_config_vars() منسوخ شده است. این کلید باید بسته به زمینه، با EXT_SUFFIX یا SHLIB_SUFFIX جایگزین شود (bpo-19555).

  • تمام فراخوانی‌های توابع open که U را مشخص می‌کنند، باید اصلاح شوند. U در Python3 بی‌اثر است و در صورت استفاده، سرانجام خطا ایجاد خواهد کرد. بسته به تابع، معادل رفتار قدیمی آن در Python2 را می‌توان یا با استفاده از آرگومان newline، یا در صورت نیاز با دربرگرفتن جریان در TextIOWrapper برای استفاده از آرگومان newline آن به دست آورد (bpo-15204).

  • اگر از pyvenv در یک اسکریپت استفاده می‌کنید و مایلید که pip نصب نشود، باید --without-pip را به فراخوانی دستور خود اضافه کنید.

  • رفتار پیش‌فرض json.dump() و json.dumps() هنگامی که تورفتگی مشخص شده باشد تغییر کرده است: دیگر فاصله‌های انتهایی پس از ویرگول‌های جداکننده‌ی آیتم‌ها در انتهای سطرها تولید نمی‌کند. این موضوع تنها زمانی اهمیت دارد که آزمون‌هایی داشته باشید که مقایسه‌های حساس به فضای سفید روی چنین خروجی‌ای انجام می‌دهند (bpo-16333).

  • doctest اکنون در رشته‌های __doc__ ماژول‌های توسعه‌ای به دنبال doctest‌ها می‌گردد، بنابراین اگر کشف آزمون‌های doctest شما شامل ماژول‌های توسعه‌ای باشد که چیزهایی شبیه doctest در آن‌ها وجود دارد، ممکن است هنگام اجرای آزمون‌هایتان شکست‌های آزمونی را ببینید که قبلاً هرگز ندیده‌اید (bpo-3158).

  • ماژول collections.abc به‌عنوان بخشی از بهبودهای راه‌اندازی پایتون، اندکی بازآرایی شده است. در نتیجه‌ی این امر، دیگر این‌گونه نیست که ایمپورت کردن collections به‌طور خودکار collections.abc را ایمپورت کند. اگر برنامه‌ی شما به ایمپورت ضمنی (مستند‌نشده) وابسته بود، لازم است import collections.abc را به‌صورت صریح اضافه کنید (bpo-20784).

تغییرات در API زبان C

  • PyEval_EvalFrameEx()، PyObject_Repr() و PyObject_Str()، همراه با برخی دیگر از API‌های داخلی C، اکنون شامل ادعای اشکال‌زدایی‌ای هستند که تضمین می‌کند که در موقعیت‌هایی که ممکن است استثنای فعال کنونی را به‌طور خاموش دور بیندازند، استفاده نشوند. در مواردی که دور انداختن استثنای فعال مورد انتظار و مطلوب است (برای مثال، به این دلیل که پیش‌تر به‌صورت محلی با PyErr_Fetch() ذخیره شده است یا عمداً با استثنای دیگری جایگزین می‌شود)، برای جلوگیری از فعال شدن این ادعا هنگام فراخوانی این عملیات‌ها (به‌طور مستقیم یا غیرمستقیم) و اجرا روی نسخه‌ای از پایتون که با فعال بودن ادعاها کامپایل شده است، به فراخوانی صریح PyErr_Clear() نیاز خواهد بود.

  • PyErr_SetImportError() اکنون هنگامی که آرگومان msg آن تنظیم نشده باشد، TypeError را تنظیم می‌کند. پیش‌تر تنها NULL بازگردانده می‌شد و هیچ استثنایی تنظیم نمی‌شد.

  • نتیجه‌ی کال‌بک PyOS_ReadlineFunctionPointer اکنون باید رشته‌ای باشد که توسط PyMem_RawMalloc() یا PyMem_RawRealloc() تخصیص‌یافته باشد، یا NULL در صورت وقوع خطا، به‌جای رشته‌ای که توسط PyMem_Malloc() یا PyMem_Realloc() تخصیص‌یافته باشد (bpo-16742)

  • PyThread_set_key_value() اکنون همیشه مقدار را تنظیم می‌کند. در پایتون 3.3، این تابع در صورتی که کلید از قبل وجود داشته باشد، هیچ کاری انجام نمی‌داد (اگر مقدار فعلی اشاره‌گر غیر NULL باشد).

  • فیلد f_tstate (وضعیت نخ) از ساختار PyFrameObject برای رفع یک اشکال حذف شده است؛ برای اطلاع از دلیل این تغییر، bpo-14432 را ببینید.

تغییر کرده در نسخه‌ی 3.4.3

PEP 476: فعال‌سازی راستی‌آزمایی گواهی به‌طور پیش‌فرض برای کلاینت‌های http کتابخانه استاندارد

http.client و ماژول‌هایی که از آن استفاده می‌کنند، مانند urllib.request و xmlrpc.client، اکنون به‌طور پیش‌فرض راستی‌آزمایی می‌کنند که گواهی‌ای که سرور ارائه می‌کند، توسط یک مرجع صدور گواهی در مخزن اعتماد پلتفرم امضا شده باشد و نام میزبان آن با نام میزبان درخواست‌شده مطابقت داشته باشد، که این امر امنیت بسیاری از برنامه‌ها را به‌طور چشمگیری بهبود می‌بخشد.

برنامه‌هایی که به رفتار قبلی قدیمی نیاز دارند، می‌توانند یک زمینه جایگزین ارسال کنند:

import urllib.request
import ssl

# This disables all verification
context = ssl._create_unverified_context()

# This allows using a specific certificate for the host, which doesn't need
# to be in the trust store
context = ssl.create_default_context(cafile="/path/to/file.crt")

urllib.request.urlopen("https://invalid-cert", context=context)