این مقاله ویژگیهای جدید پایتون 3.4 را در مقایسه با 3.3 توضیح میدهد. پایتون 3.4 در ۱۶ مارس ۲۰۱۴ منتشر شد. برای جزئیات کامل، به فهرست تغییرات مراجعه کنید.
ماژولهای بهبودیافته¶
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.)
دکوراتور جدید @singledispatch پشتیبانی از توابع عام ارسال تکگانه را به کتابخانه استاندارد پایتون میآورد. در حالی که برنامهنویسی شیءگرا بر گروهبندی چندین عملیات روی یک مجموعه داده مشترک در یک کلاس تمرکز میکند، تابع عام بر گروهبندی چندین پیادهسازی از یک عملیات تمرکز میکند که به آن امکان میدهد با انواع متفاوت داده کار کند.
همچنین ببینید
- PEP 443 -- توابع عام با ارسال تکگانه
PEP نوشته و پیادهسازی شده توسط ووکاش لانگا.
@total_ordering اکنون از مقدار بازگشتی NotImplemented در تابع مقایسه زیرین پشتیبانی میکند. (مشارکتشده توسط کیتی میلر در bpo-10042.)
نسخهی خالص پایتونی از تابع partial() اکنون در کتابخانه استاندارد قرار دارد؛ در سیپایتون، این نسخه توسط نسخهی شتابیافته با C جایگزین میشود، اما برای استفادهی پیادهسازیهای دیگر در دسترس است. (مشارکت Brian Thorne در bpo-12428.)
تابع جدید 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 در دسترس است.
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.)
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.)
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() نیز تأثیر میگذارند.
تابع جدید fullmatch() و متد جدید Pattern.fullmatch() الگو را در هر دو انتهای رشتهای که باید تطبیق داده شود لنگر میکنند. این کار راهی برای بیان صریح هدف تطبیق فراهم میکند که از دستهای از اشکالهای ظریف جلوگیری میکند؛ اشکالهایی که در آنها نویسههای $ هنگام تغییر کد یا افزودن جایگزینها به یک عبارت باقاعدهی موجود از دست میروند. (مشارکتشده توسط Matthew Barnett در bpo-16203.)
repr اشیاء عبارت باقاعده اکنون الگو و پرچمها را در بر میگیرد؛ repr اشیاء تطبیق اکنون شروع، پایان و بخشی از رشته که تطبیق یافته است را در بر میگیرد. (مشارکتشده توسط Hugo Lopes Tavares و Serhiy Storchaka در bpo-13592 و bpo-17087.)
انتخاب¶
اشیاء 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.)
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.)
weakref¶
کلاس جدید WeakMethod ارجاعهای ضعیف به متدهای مقید را شبیهسازی میکند. (ارائه شده توسط آنتوان پیترو در bpo-14631.)
کلاس جدید finalize این امکان را فراهم میکند که کالبکی برای فراخوانیشدن هنگام زبالهروبی یک شیء ثبت کنید، بدون آنکه لازم باشد چرخه حیات خودِ ارجاع ضعیف را با دقت مدیریت کنید. (ارائهشده توسط Richard Oudkerk در bpo-15528.)
کالبک مرتبط با یک ref (در صورت وجود) اکنون از طریق ویژگی __callback__ در دسترس قرار میگیرد. (مشارکت Mark Dickinson در bpo-17643.)
zipfile¶
متد writepy() از کلاس PyZipFile گزینهی جدید filterfunc دارد که میتوان از آن برای کنترل اینکه کدام پوشهها و پروندهها به آرشیو اضافه میشوند استفاده کرد. برای مثال، میتوان از این گزینه برای مستثنا کردن پروندههای آزمون از آرشیو استفاده کرد. (مشارکتشده توسط Christian Tismer در bpo-19274.)
پارامتر allowZip64 در ZipFile و PyZipFile اکنون بهصورت پیشفرض True است. (با مشارکت William Mallard در bpo-17201.)