این مقاله ویژگیهای جدید پایتون 3.6 را در مقایسه با 3.5 توضیح میدهد. پایتون 3.6 در ۲۳ دسامبر ۲۰۱۶ منتشر شد. برای فهرست کامل تغییرات، تغییرنامه (changelog) را ببینید.
قابلیتهای جدید¶
PEP 498: رشتههای لفظی قالببندیشده¶
PEP 498 نوع جدیدی از مقادیر لفظی رشتهای را معرفی میکند: افاسترینگها یا مقادیر لفظی رشتهای قالببندیشده.
لفظهای رشتهای قالببندیشده دارای پیشوند 'f' هستند و مشابه رشتههای قالب هستند که str.format() میپذیرد. این رشتهها شامل فیلدهای جایگزینی هستند که با آکولادها احاطه شدهاند. فیلدهای جایگزینی عبارتهایی هستند که در زمان اجرا ارزیابی میشوند و سپس با استفاده از پروتکل format() قالببندی میشوند:
>>> name = "Fred"
>>> f"He said his name is {name}."
'He said his name is Fred.'
>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal("12.34567")
>>> f"result: {value:{width}.{precision}}" # nested fields
'result: 12.35'
همچنین ببینید
- PEP 498 -- درونیابی رشته لفظی.
PEP نوشته و پیادهسازیشده توسط Eric V. Smith.
مستندات قابلیت.
PEP 526: سینتکس حاشیهنویسی متغیرها¶
PEP 484 استاندارد حاشیهنویسی نوع برای پارامترهای تابع (که با نام راهنمای نوع نیز شناخته میشود) را معرفی کرد. این PEP نحوی برای حاشیهنویسی انواع متغیرها، از جمله متغیرهای کلاس و متغیرهای نمونه، به پایتون اضافه میکند:
primes: List[int] = []
captain: str # Note: no initial value!
class Starship:
stats: Dict[str, int] = {}
درست مانند حاشیهنویسی توابع، مفسر پایتون هیچ معنای خاصی به حاشیهنویسی متغیرها نسبت نمیدهد و تنها آنها را در ویژگی __annotations__ یک کلاس یا ماژول ذخیره میکند.
برخلاف اعلانهای متغیر در زبانهای با نوعدهی ایستا، هدف سینتکس حاشیهنویسی، فراهم کردن راهی آسان برای مشخص کردن فرادادهی ساختاریافتهی نوع برای ابزارها و کتابخانههای شخص ثالث از طریق درخت سینتکس انتزاعی و ویژگی __annotations__ است.
همچنین ببینید
- PEP 526 -- سینتکس حاشیهنویسی متغیر.
PEP نوشتهشده توسط Ryan Gonzalez، Philip House، Ivan Levkivskyi، Lisa Roach و Guido van Rossum. پیادهسازیشده توسط Ivan Levkivskyi.
ابزارهایی که از سینتکس جدید استفاده میکنند یا خواهند کرد: mypy، pytype، PyCharm و غیره.
PEP 515: زیرسطرها در مقادیر لفظی عددی¶
PEP 515 امکان استفاده از زیرخط در مقادیر لفظی عددی را برای بهبود خوانایی اضافه میکند. برای مثال:
>>> 1_000_000_000_000_000
1000000000000000
>>> 0x_FF_FF_FF_FF
4294967295
زیرسطرهای تکی بین ارقام و پس از هر مشخصکننده مبنای عدد مجاز هستند. زیرخط در ابتدای عدد، در انتهای آن، یا چند زیرخط پشت سر هم مجاز نیست.
زبان قالببندی رشته اکنون نیز از گزینهی '_' برای نشاندادن استفاده از زیرخط بهعنوان جداکنندهی هزارگان برای انواع نمایش ممیز شناور و برای نوع نمایش عدد صحیح 'd' پشتیبانی میکند. برای انواع نمایش عدد صحیح 'b'، 'o'، 'x' و 'X'، هر ۴ رقم یک زیرخط درج میشود:
>>> '{:_}'.format(1000000)
'1_000_000'
>>> '{:_x}'.format(0xFFFFFFFF)
'ffff_ffff'
همچنین ببینید
- PEP 515 -- زیرسطرها در مقادیر لفظی عددی
PEP نوشتهشده توسط Georg Brandl و Serhiy Storchaka.
PEP 525: تولیدگرهای ناهمگام¶
PEP 492 پشتیبانی از همروالهای بومی و سینتکس async / await را در پایتون 3.5 معرفی کرد. یک محدودیت قابلتوجه در پیادهسازی پایتون 3.5 این بود که امکان استفاده از await و yield در همان بدنهی تابع وجود نداشت. در پایتون 3.6 این محدودیت برداشته شده و امکان تعریف تولیدگرهای ناهمگام فراهم شده است:
async def ticker(delay, to):
"""اعداد از ۰ تا *to* را هر *delay* ثانیه تولید میکند."""
for i in range(to):
yield i
await asyncio.sleep(delay)
سینتکس جدید امکان نوشتن کد سریعتر و مختصرتر را فراهم میکند.
همچنین ببینید
- PEP 525 -- تولیدگرهای ناهمگام
PEP نوشته و پیادهسازی شده توسط یوری سلیوانوف.
PEP 530: درکهای ناهمگام¶
PEP 530 پشتیبانی از استفاده از async for در درکهای فهرست، مجموعه و دیکشنری و عبارتهای تولیدگر را اضافه میکند:
result = [i async for i in aiter() if i % 2]
علاوه بر این، عبارتهای await در همهی انواع درکها پشتیبانی میشوند:
result = [await fun() for fun in funcs if await condition()]
همچنین ببینید
- PEP 530 -- درکهای ناهمگام
PEP نوشته و پیادهسازی شده توسط یوری سلیوانوف.
PEP 487: سفارشیسازی سادهتر ایجاد کلاس¶
اکنون میتوان ایجاد زیرکلاس را بدون استفاده از فراکلاس سفارشیسازی کرد. classmethod جدید __init_subclass__ هر زمان که زیرکلاس جدیدی ایجاد شود، روی کلاس پایه فراخوانی میشود:
class PluginBase:
subclasses = []
def __init_subclass__(cls, **kwargs):
super().__init_subclass__(**kwargs)
cls.subclasses.append(cls)
class Plugin1(PluginBase):
pass
class Plugin2(PluginBase):
pass
بهمنظور اینکه فراخوانیهای بدون آرگومان super() از پیادهسازیهای __init_subclass__() بهدرستی کار کنند، فراکلاسهای سفارشی باید اطمینان حاصل کنند که ورودی جدید فضای نام __classcell__ به type.__new__ منتقل میشود (همانطور که در ایجاد شیء کلاس توضیح داده شده است).
همچنین ببینید
- PEP 487 -- سفارشیسازی سادهتر ایجاد کلاس
PEP نوشته و پیادهسازیشده توسط مارتین تایشمان.
مستندات قابلیت
PEP 487: بهبودهای پروتکل توصیفگر¶
PEP 487 پروتکل توصیفگر را گسترش میدهد تا متد اختیاری جدید __set_name__() را نیز در بر بگیرد. هرگاه کلاس جدیدی تعریف شود، متد جدید بر روی تمام توصیفگرهای گنجاندهشده در تعریف فراخوانی میشود و ارجاعی به کلاسی که در حال تعریف است و نامی که به توصیفگر در فضای نام کلاس داده شده است را در اختیار آنها قرار میدهد. به عبارت دیگر، نمونههای توصیفگرها اکنون میتوانند نام ویژگی توصیفگر را در کلاس مالک بدانند:
class IntField:
def __get__(self, instance, owner):
return instance.__dict__[self.name]
def __set__(self, instance, value):
if not isinstance(value, int):
raise ValueError(f'expecting integer in {self.name}')
instance.__dict__[self.name] = value
# this is the new initializer:
def __set_name__(self, owner, name):
self.name = name
class Model:
int_field = IntField()
همچنین ببینید
- PEP 487 -- سفارشیسازی سادهتر ایجاد کلاس
PEP نوشته و پیادهسازیشده توسط مارتین تایشمان.
مستندات ویژگی
PEP 519: افزودن پروتکل مسیر سامانه فایلبندی¶
مسیرهای سامانه فایلبندی بهطور تاریخی بهصورت اشیای str یا bytes نمایش داده شدهاند. این امر باعث شده است افرادی که کدی مینویسند که روی مسیرهای سامانه فایلبندی کار میکند، فرض کنند که چنین اشیایی تنها یکی از آن دو نوع هستند (یک int که نمایانگر توصیفگر پرونده است به حساب نمیآید، زیرا مسیر پرونده نیست). متأسفانه این فرض مانع از آن میشود که نمایشهای جایگزین مسیرهای سامانه فایلبندی بهصورت شیء، مانند pathlib، با کدهای از پیش موجود، از جمله کتابخانه استاندارد پایتون، کار کنند.
برای رفع این وضعیت، رابط جدیدی که با os.PathLike نمایندگی میشود تعریف شده است. با پیادهسازی متد __fspath__()، یک شیء اعلام میکند که نمایندهی یک مسیر است. در این صورت، یک شیء میتواند نمایش سطح پایین یک مسیر سامانه فایلبندی را بهصورت یک شیء str یا bytes ارائه کند. این بدان معناست که یک شیء در صورتی شبهمسیر محسوب میشود که os.PathLike را پیادهسازی کند یا شیءای از نوع str یا bytes باشد که نمایندهی یک مسیر سامانه فایلبندی است. کد میتواند از os.fspath()، os.fsdecode() یا os.fsencode() استفاده کند تا بهطور صریح نمایش str و/یا bytes یک شیء شبهمسیر را به دست آورد.
تابع توکار open() بهروزرسانی شده است تا اشیاء os.PathLike را بپذیرد؛ تمام توابع مرتبط در ماژولهای os و os.path و همچنین بیشتر توابع و کلاسهای دیگر در کتابخانه استاندارد نیز بهروزرسانی شدهاند. کلاس os.DirEntry و کلاسهای مرتبط در pathlib نیز برای پیادهسازی os.PathLike بهروزرسانی شدهاند.
امید است که بهروزرسانی توابع بنیادی برای کار با مسیرهای سامانه فایلبندی باعث شود کدهای شخص ثالث بدون هیچ تغییری در کد، یا دستکم با تغییرات بسیار ناچیز (مثلاً فراخوانی os.fspath() در ابتدای کد پیش از کار با یک شیء شبهمسیر)، بهطور ضمنی از همهی اشیاء شبهمسیر پشتیبانی کنند.
در ادامه چند نمونه از اینکه رابط جدید چگونه امکان میدهد pathlib.Path آسانتر و شفافتر با کدِ از پیش موجود استفاده شود، آمده است:
>>> import pathlib
>>> with open(pathlib.Path("README")) as f:
... contents = f.read()
...
>>> import os.path
>>> os.path.splitext(pathlib.Path("some_file.txt"))
('some_file', '.txt')
>>> os.path.join("/a/b", pathlib.Path("c"))
'/a/b/c'
>>> import os
>>> os.fspath(pathlib.Path("some_file.txt"))
'some_file.txt'
(پیادهسازیشده توسط Brett Cannon، Ethan Furman، Dusty Phillips و Jelle Zijlstra.)
همچنین ببینید
- PEP 519 -- افزودن یک پروتکل مسیر سامانه فایلبندی
PEP نوشتهشده توسط Brett Cannon و Koos Zevenhoven.
PEP 495: رفع ابهام زمان محلی¶
در بیشتر مکانهای جهان، زمانهایی وجود داشته و خواهد داشت که در آنها ساعتهای محلی به عقب کشیده میشوند. در چنین زمانهایی، بازههایی پدید میآیند که در آنها ساعتهای محلی یک زمان واحد را دو بار در همان روز نشان میدهند. در این وضعیتها، اطلاعات نمایشدادهشده روی یک ساعت محلی (یا ذخیرهشده در یک نمونهی datetime پایتون) برای شناسایی یک لحظهی مشخص در زمان کافی نیست.
PEP 495 ویژگی جدید fold را به نمونههای کلاسهای datetime.datetime و datetime.time اضافه میکند تا بین دو لحظه در زمان که زمانهای محلیشان یکسان است، تمایز قائل شود:
>>> u0 = datetime(2016, 11, 6, 4, tzinfo=timezone.utc)
>>> for i in range(4):
... u = u0 + i*HOUR
... t = u.astimezone(Eastern)
... print(u.time(), 'UTC =', t.time(), t.tzname(), t.fold)
...
04:00:00 UTC = 00:00:00 EDT 0
05:00:00 UTC = 01:00:00 EDT 0
06:00:00 UTC = 01:00:00 EST 1
07:00:00 UTC = 02:00:00 EST 0
مقادیر ویژگی fold برای همهی نمونهها 0 است، بهجز نمونههایی که در یک حالت مبهم، لحظهی دوم (از نظر ترتیب زمانی) را نشان میدهند.
همچنین ببینید
- PEP 495 -- ابهامزدایی زمان محلی
PEP توسط الکساندر بلوپولسکی و تیم پیترز نوشته شده و پیادهسازی آن توسط الکساندر بلوپولسکی انجام شده است.
PEP 529: تغییر کدگذاری سامانه فایلبندی ویندوز به UTF-8¶
بهترین روش برای نمایش مسیرهای سامانه فایلبندی، استفاده از str (یونیکد) به جای bytes است. با این حال، موقعیتهایی وجود دارد که در آنها استفاده از bytes کافی و صحیح است.
پیش از پایتون 3.6، استفاده از مسیرهای بایتی در ویندوز میتوانست به از دست رفتن دادهها منجر شود. با این تغییر، استفاده از بایتها برای نمایش مسیرها اکنون در ویندوز پشتیبانی میشود، به شرط آنکه این بایتها با کدگذاری بازگرداندهشده توسط sys.getfilesystemencoding() کدگذاریشده باشند که اکنون به طور پیشفرض 'utf-8' است.
برنامههایی که از str برای نمایش مسیرها استفاده نمیکنند، باید از os.fsencode() و os.fsdecode() استفاده کنند تا مطمئن شوند بایتهایشان بهدرستی کدگذاری شدهاند. برای بازگشت به رفتار پیشین، PYTHONLEGACYWINDOWSFSENCODING را تنظیم کنید یا sys._enablelegacywindowsfsencoding() را فراخوانی کنید.
برای اطلاعات بیشتر و بحث دربارهی تغییراتی که ممکن است در کد لازم باشد، PEP 529 را ببینید.
PEP 528: تغییر کدگذاری کنسول ویندوز به UTF-8¶
کنسول پیشفرض در ویندوز اکنون تمام نویسههای یونیکد را میپذیرد و شیءهای str بهدرستی خواندهشده را به کد پایتون ارائه میدهد. sys.stdin، sys.stdout و sys.stderr اکنون بهطور پیشفرض از کدگذاری utf-8 استفاده میکنند.
این تغییر فقط هنگام استفاده از کنسول تعاملی اعمال میشود، نه هنگام تغییر مسیر پروندهها یا پایپها. برای بازگشت به رفتار قبلی هنگام استفاده از کنسول تعاملی، PYTHONLEGACYWINDOWSSTDIO را تنظیم کنید.
همچنین ببینید
- PEP 528 -- تغییر کدگذاری کنسول ویندوز به UTF-8
PEP (پیشنهاد بهبود پایتون) توسط استیو داور نوشته و پیادهسازی شده است.
PEP 520: حفظ ترتیب تعریف ویژگیهای کلاس¶
ویژگیها در بدنه تعریف کلاس ترتیبی طبیعی دارند: همان ترتیبی که نامها در کد منبع ظاهر میشوند. این ترتیب اکنون در ویژگی __dict__ کلاس جدید حفظ میشود.
همچنین، فضای نام مؤثرِ پیشفرضِ اجرای کلاس (که از type.__prepare__() برگردانده میشود) اکنون یک نگاشت حفظکنندهی ترتیب درج است.
همچنین ببینید
- PEP 520 -- حفظ ترتیب تعریف ویژگیهای کلاس
PEP نوشته و پیادهسازیشده توسط اریک اسنو.
PEP 468: حفظ ترتیب آرگومانهای کلیدواژهای¶
**kwargs در امضای یک تابع اکنون تضمین شده است که نگاشتی باشد که ترتیب درج را حفظ میکند.
همچنین ببینید
- PEP 468 -- حفظ ترتیب آرگومانهای کلیدواژهای
PEP نوشته و پیادهسازیشده توسط اریک اسنو.
پیادهسازی جدید dict¶
نوع dict اکنون از نمایشی «فشرده» استفاده میکند که بر پایهی پیشنهاد ریموند هتینگر است؛ پیشنهادی که نخستینبار در PyPy پیادهسازی شد. مصرف حافظهی dict() جدید نسبت به پایتون 3.5 بین ۲۰٪ و ۲۵٪ کمتر است.
جنبه حفظ ترتیب در این پیادهسازی جدید جزئیات پیادهسازی محسوب میشود و نباید به آن تکیه کرد (این ممکن است در آینده تغییر کند، اما مطلوب است که این پیادهسازی جدید dict برای چند نسخه در زبان وجود داشته باشد پیش از آنکه مشخصات زبان بهگونهای تغییر کند که معناشناسی حفظ ترتیب را برای تمام پیادهسازیهای کنونی و آینده پایتون الزامی سازد؛ این همچنین به حفظ سازگاری با نسخههای قدیمیتر زبان کمک میکند که در آنها ترتیب پیمایش تصادفی همچنان برقرار است، مثلاً Python 3.5).
(مشارکتشده توسط INADA Naoki در bpo-27350. ایده در اصل توسط Raymond Hettinger پیشنهاد شده.)
PEP 523: افزودن API ارزیابی فریم (frame evaluation) به سیپایتون¶
در حالی که پایتون پشتیبانی گستردهای برای سفارشیسازی نحوهی اجرای کد فراهم میکند، ارزیابی اشیاء فریم یکی از جاهایی است که چنین پشتیبانیای در آن فراهم نشده است. اگر میخواستید راهی برای رهگیری ارزیابی فریم در پایتون داشته باشید، در واقع هیچ راهی وجود نداشت مگر با دستکاری مستقیم اشارهگرهای تابع برای توابع تعریفشده.
PEP 523 با فراهم کردن یک API که ارزیابی فریم را در سطح C قابل اتصال میکند، این وضعیت را تغییر میدهد. این امر به ابزارهایی مانند اشکالزداها و JITها اجازه میدهد تا ارزیابی فریم را پیش از آغاز اجرای کد پایتون رهگیری کنند. این امر استفاده از پیادهسازیهای ارزیابی جایگزین برای کد پایتون، پیگیری ارزیابی فریم و غیره را ممکن میسازد.
این API بخشی از API محدود C نیست و بهعنوان خصوصی علامتگذاری شده است تا نشان دهد که انتظار میرود استفاده از این API محدود باشد و فقط برای موارد استفادهی بسیار خاص و سطحپایین کاربرد داشته باشد. معناشناسی این API در صورت نیاز همراه با پایتون تغییر خواهد کرد.
همچنین ببینید
- PEP 523 -- افزودن API ارزیابی فریم به سیپایتون
PEP نوشتهشده توسط Brett Cannon و Dino Viehland.
متغیر محیطی PYTHONMALLOC¶
متغیر محیطی جدید PYTHONMALLOC امکان تنظیم تخصیصدهندههای حافظهی پایتون و نصب قلابهای اشکالزدایی را فراهم میکند.
اکنون با استفاده از PYTHONMALLOC=debug، میتوان قلابهای اشکالزدایی را روی تخصیصدهندههای حافظهی پایتونی که در حالت انتشار کامپایل شده است نصب کرد. اثرات قلابهای اشکالزدایی:
بررسی اینکه آیا قفل مفسر سراسری (GIL) نگه داشته شده است نیز ویژگی جدیدی در پایتون 3.6 است.
برای قلابهای اشکالزدایی در تخصیصدهندههای حافظه پایتون، به تابع PyMem_SetupDebugHooks() مراجعه کنید.
اکنون همچنین میتوان با استفاده از PYTHONMALLOC=malloc، بهکارگیری تخصیصدهندهی malloc() کتابخانهی C را برای تمام تخصیصهای حافظهی پایتون اجباری کرد. این کار هنگام استفاده از اشکالزداهای حافظهی خارجی مانند Valgrind روی پایتونی که در حالت انتشار کامپایل شده است، سودمند است.
در صورت وقوع خطا، قلابهای اشکالزدایی روی تخصیصدهندههای حافظه پایتون اکنون از ماژول tracemalloc برای بهدستآوردن ردگیری محل تخصیص یک بلوک حافظه استفاده میکنند.
مثالی از خطای مهلک هنگام سرریز بافر با استفاده از python3.6 -X tracemalloc=5 (ذخیرهی ۵ فریم در ردگیریها):
Debug memory block at address p=0x7fbcd41666f8: API 'o'
4 bytes originally requested
The 7 pad bytes at p-7 are FORBIDDENBYTE, as expected.
The 8 pad bytes at tail=0x7fbcd41666fc are not all FORBIDDENBYTE (0xfb):
at tail+0: 0x02 *** OUCH
at tail+1: 0xfb
at tail+2: 0xfb
at tail+3: 0xfb
at tail+4: 0xfb
at tail+5: 0xfb
at tail+6: 0xfb
at tail+7: 0xfb
The block was made by call #1233329 to debug malloc/realloc.
Data at p: 1a 2b 30 00
Memory block allocated at (most recent call first):
File "test/test_bytes.py", line 323
File "unittest/case.py", line 600
File "unittest/case.py", line 648
File "unittest/suite.py", line 122
File "unittest/suite.py", line 84
Fatal Python error: bad trailing pad byte
Current thread 0x00007fbcdbd32700 (most recent call first):
File "test/test_bytes.py", line 323 in test_hex
File "unittest/case.py", line 600 in run
File "unittest/case.py", line 648 in __call__
File "unittest/suite.py", line 122 in run
File "unittest/suite.py", line 84 in __call__
File "unittest/suite.py", line 122 in run
File "unittest/suite.py", line 84 in __call__
...
(مشارکتشده توسط Victor Stinner در bpo-26516 و bpo-26564.)
پشتیبانی از کاوشگری (probing) با DTrace و SystemTap¶
پایتون اکنون میتواند با --with-dtrace ساخته شود که نشانگرهای ایستا را برای رویدادهای زیر در مفسر فعال میکند:
فراخوانی/بازگشت تابع
آغاز/پایان زبالهروبی
سطر کد اجراشده.
این میتواند برای ابزاردهی (instrument) مفسرهای در حال اجرا در محیط عملیاتی استفاده شود، بدون نیاز به کامپایل مجدد ساختهای اشکالزدایی خاص یا فراهم کردن کد پروفایلگیری/اشکالزدایی اختصاصی برنامه.
جزئیات بیشتر در ابزارسازی CPython با DTrace و SystemTap.
پیادهسازی فعلی روی لینوکس و macOS آزموده شده است. ممکن است در آینده نشانگرهای بیشتری افزوده شوند.
(مشارکتشده توسط Łukasz Langa در bpo-21590، بر اساس وصلهای Jesús Cea Avión، David Malcolm و Nikhil Benesch.)
ماژولهای بهبودیافته¶
array¶
پیمایشگرهای تخلیهشدهی array.array اکنون حتی اگر آرایهی مورد پیمایش گسترش یابد، تخلیهشده باقی میمانند. این رفتار با رفتار سایر دنبالههای تغییرپذیر سازگار است.
ارائهشده توسط Serhiy Storchaka در bpo-26492.
ast¶
گره AST جدید ast.Constant افزوده شده است. این گره میتواند توسط بهینهسازهای خارجی AST به منظور تاشدگی ثابت (constant folding) استفاده شود.
مشارکتشده توسط ویکتور استینر در bpo-26146.
asyncio¶
از پایتون 3.6 به بعد، ماژول asyncio دیگر آزمایشی نیست و API آن پایدار در نظر گرفته میشود.
تغییرات قابل توجه در ماژول asyncio از زمان پایتون 3.5.0 (همگی به دلیل وضعیت آزمایشی، به 3.5.x بکپورت شدهاند):
تابع get_event_loop() بهگونهای تغییر کرده است که هنگام فراخوانی از همروالها و کالبکها، همیشه حلقهی در حال اجرا را بازگرداند. (مشارکتشده توسط یوری سلیوانوف در bpo-28613.)
تابع ensure_future() و همهی توابعی که از آن استفاده میکنند، مانند loop.run_until_complete()، اکنون همهی انواع اشیاء انتظارپذیر را میپذیرند. (مشارکت از طرف یوری سلیوانوف.)
تابع جدید run_coroutine_threadsafe() برای ارسال همروالها به حلقههای رویداد از نخهای دیگر. (ارائهشده توسط وینسنت میشل.)
متد جدید Transport.is_closing() برای بررسی اینکه آیا ترنسپورت در حال بستهشدن است یا بسته است. (با همکاری یوری سلیوانوف.)
متد loop.create_server() اکنون میتواند فهرستی از میزبانها را بپذیرد. (مشارکتشده توسط Yann Sionneau.)
متد جدید loop.create_future() برای ایجاد اشیاء Future. این اجازه میدهد پیادهسازیهای جایگزین حلقه رویداد، مانند uvloop، پیادهسازی سریعتری از asyncio.Future ارائه کنند. (مشارکتشده توسط Yury Selivanov در bpo-27041.)
متد جدید loop.get_exception_handler() برای دریافت هندلر استثنای جاری. (با مشارکت Yury Selivanov در bpo-27040.)
متد جدید StreamReader.readuntil() برای خواندن دادهها از جریان تا زمانی که دنباله بایت جداکنندهای ظاهر شود. (با مشارکت Mark Korenberg.)
کارایی StreamReader.readexactly() بهبود یافته است. (مشارکت Mark Korenberg در bpo-28370.)
متد loop.getaddrinfo() بهگونهای بهینهسازی شده است که اگر نشانی از قبل حل شده باشد، از فراخوانی تابع سیستمی getaddrinfo خودداری کند. (مشارکتشده توسط A. Jesse Jiryu Davis.)
متد loop.stop() بهگونهای تغییر کرده است که حلقه را بلافاصله پس از پیمایش جاری متوقف میکند. هر کالبک جدیدی که در نتیجهی آخرین پیمایش زمانبندی شده باشد، دور ریخته خواهد شد. (مشارکتشده توسط Guido van Rossum در bpo-25593.)
Future.set_exception اکنون هنگامی که نمونهای از استثنای StopIteration به آن داده شود، TypeError ایجاد میکند. (مشارکتشده توسط Chris Angelico در bpo-26221.)
متد جدید loop.connect_accepted_socket() برای استفاده توسط سرورهایی که اتصالات را خارج از asyncio میپذیرند، اما از asyncio برای مدیریت آنها استفاده میکنند. (ارائهشده توسط Jim Fulton در bpo-27392.)
پرچم TCP_NODELAY اکنون بهطور پیشفرض برای همهی انتقالدهندههای (transport) TCP تنظیم میشود. (با مشارکت Yury Selivanov در bpo-27456.)
متد جدید loop.shutdown_asyncgens() که تولیدگرهای ناهمگام در انتظار را پیش از بستن حلقه بهدرستی میبندد. (مشارکت Yury Selivanov در bpo-28003.)
کلاسهای Future و Task اکنون یک پیادهسازی بهینهشده به زبان C دارند که کد asyncio را تا ۳۰ درصد سریعتر میکند. (ارائهشده توسط Yury Selivanov و INADA Naoki در bpo-26081 و bpo-28544.)
binascii¶
تابع b2a_base64() اکنون یک آرگومان کلیدواژهای اختیاری newline را میپذیرد تا کنترل کند که آیا نویسه سطر جدید به مقدار بازگشتی افزوده میشود یا خیر. (ارائهشده توسط Victor Stinner در bpo-25357.)
collections¶
کلاس پایه انتزاعی جدید Collection برای نمایش کلاسهای ظرف پیمایشپذیرِ اندازهدار افزوده شده است. (با مشارکت Ivan Levkivskyi و مستندسازی Neil Girdhar در bpo-27598.)
کلاس پایه انتزاعی جدید Reversible نمایندهی کلاسهای پیمایشپذیری است که متد __reversed__() را نیز ارائه میکنند. (مشارکتشده توسط Ivan Levkivskyi در bpo-25987.)
کلاس پایه انتزاعی جدید AsyncGenerator تولیدگرهای ناهمگام را نمایش میدهد. (با مشارکت Yury Selivanov در bpo-28720.)
تابع namedtuple() اکنون یک آرگومان کلیدواژهای اختیاری به نام module را میپذیرد که در صورت تعیین شدن، برای ویژگی __module__ کلاس تاپل نامدار بازگرداندهشده استفاده میشود. (مشارکت Raymond Hettinger در bpo-17941.)
آرگومانهای verbose و rename برای namedtuple() اکنون فقط کلیدواژهای هستند. (مشارکتشده توسط Raymond Hettinger در bpo-25628.)
نمونههای بازگشتی collections.deque را اکنون میتوان پیکل کرد. (با مشارکت Serhiy Storchaka در bpo-26482.)
concurrent.futures¶
سازندهی کلاس ThreadPoolExecutor اکنون یک آرگومان اختیاری thread_name_prefix را میپذیرد تا امکان سفارشیسازی نام نخهایی که توسط استخر ایجاد میشوند فراهم شود. (مشارکتشده توسط Gregory P. Smith در bpo-27664.)
contextlib¶
کلاس contextlib.AbstractContextManager برای فراهم کردن یک کلاس پایه انتزاعی برای مدیرهای زمینه اضافه شده است. این کلاس یک پیادهسازی پیشفرض منطقی برای __enter__() فراهم میکند که self را برمیگرداند و __exit__() را بهعنوان یک متد انتزاعی باقی میگذارد. یک کلاس منطبق نیز با نام typing.ContextManager به ماژول typing اضافه شده است. (مشارکت Brett Cannon در bpo-25609.)
datetime¶
کلاسهای datetime و time ویژگی جدید fold را دارند که در صورت نیاز برای رفع ابهام زمان محلی استفاده میشود. بسیاری از توابع در datetime برای پشتیبانی از رفع ابهام زمان محلی بهروزرسانی شدهاند. برای اطلاعات بیشتر، بخش رفع ابهام زمان محلی را ببینید. (ارائهشده توسط Alexander Belopolsky در bpo-24773.)
متدهای datetime.strftime() و date.strftime() اکنون از دایرکتیوهای تاریخ ISO 8601 شامل %G، %u و %V پشتیبانی میکنند. (مشارکتشده توسط Ashley Anderson در bpo-12006.)
تابع datetime.isoformat() اکنون آرگومان اختیاری timespec را میپذیرد که مشخص میکند چه تعداد جزء اضافی از مقدار زمان باید گنجانده شود. (مشارکت Alessandro Cucci و Alexander Belopolsky در bpo-19475.)
متد datetime.combine() اکنون یک آرگومان اختیاری tzinfo میپذیرد. (مشارکت الکساندر بلوپولسکی در bpo-27661.)
decimal¶
متد جدید Decimal.as_integer_ratio() که جفت (n, d) از اعداد صحیح را برمیگرداند که نمونهی دادهشدهی Decimal را بهصورت یک کسر، به سادهترین شکل و با مخرج مثبت نشان میدهد:
>>> Decimal('-3.14').as_integer_ratio()
(-157, 50)
(مشارکتشده توسط Stefan Krah و Mark Dickinson در bpo-25928.)
distutils¶
ویژگی default_format از distutils.command.sdist.sdist حذف شده است و ویژگی formats به طور پیشفرض ['gztar'] است. هرچند این مورد پیشبینی نشده بود، ممکن است هر کدی که به وجود default_format متکی است نیاز به تطبیق داشته باشد. برای جزئیات بیشتر به bpo-27819 مراجعه کنید.
email¶
API جدید ایمیل، که با ارسال کلیدواژهی policy به سازندههای گوناگون فعال میشود، دیگر آزمایشی نیست. مستندات email بازسازماندهی و بازنویسی شده است تا بر API جدید تمرکز کند، در حالی که مستندات قدیمی مربوط به API میراثی نیز حفظ شده است. (مشارکتشده توسط R. David Murray در bpo-24277.)
کلاسهای email.mime اکنون همگی یک کلیدواژهی اختیاری policy را میپذیرند. (مشارکتشده توسط برکر پکساگ در bpo-27331.)
DecodedGenerator اکنون از کلیدواژهی policy پشتیبانی میکند.
یک ویژگی جدید در policy وجود دارد، message_factory، که کنترل میکند پارسر هنگام ساخت اشیاء پیام جدید بهطور پیشفرض از کدام کلاس استفاده کند. برای سیاست email.policy.compat32 این کلاس Message است و برای سیاستهای جدید EmailMessage است. (ارائهشده توسط R. David Murray در bpo-20476.)
encodings¶
در ویندوز، کدگذاری 'oem' برای استفاده از CP_OEMCP و نام مستعار 'ansi' برای کدگذاری موجود 'mbcs' که از صفحهی کد CP_ACP استفاده میکند، افزوده شد. (مشارکتشده توسط استیو داور در bpo-27959.)
enum¶
دو کلاس پایه enum جدید به ماژول enum اضافه شدهاند: Flag و IntFlag. هر دو برای تعریف ثابتهایی به کار میروند که میتوان آنها را با استفاده از عملگرهای بیتی ترکیب کرد. (مشارکتشده توسط Ethan Furman در bpo-23591.)
بسیاری از ماژولهای کتابخانه استاندارد بهروزرسانی شدهاند تا از کلاس IntFlag برای ثابتهای خود استفاده کنند.
مقدار جدید enum.auto را میتوان برای انتساب خودکار مقادیر به اعضای enum به کار برد:
>>> from enum import Enum, auto
>>> class Color(Enum):
... red = auto()
... blue = auto()
... green = auto()
...
>>> list(Color)
[<Color.red: 1>, <Color.blue: 2>, <Color.green: 3>]
hashlib¶
hashlib از OpenSSL 1.1.0 پشتیبانی میکند. حداقل نسخهی توصیهشده 1.0.2 است. (مشارکتشده توسط Christian Heimes در bpo-26470.)
توابع هش BLAKE2 به ماژول افزوده شدند. blake2b() و blake2s() همیشه دسترسپذیر هستند و از مجموعه کامل قابلیتهای BLAKE2 پشتیبانی میکنند. (ارائهشده توسط Christian Heimes در bpo-26798 بر پایه کدی از Dmitry Chestnykh و Samuel Neves. مستندات نوشتهشده توسط Dmitry Chestnykh.)
توابع هش SHA-3 یعنی sha3_224()، sha3_256()، sha3_384()، sha3_512() و همچنین توابع هش SHAKE یعنی shake_128() و shake_256() افزوده شدند. (مشارکتشده توسط Christian Heimes در bpo-16113. Keccak Code Package توسط Guido Bertoni، Joan Daemen، Michaël Peeters، Gilles Van Assche و Ronny Van Keer.)
تابع استخراج کلید مبتنی بر گذرواژه scrypt() اکنون با OpenSSL 1.1.0 و نسخههای جدیدتر دسترسپذیر است. (مشارکتشده توسط Christian Heimes در bpo-27928.)
idlelib و IDLE¶
بستهی idlelib در حال نوسازی و بازآرایی است تا ظاهر و عملکرد IDLE بهتر شود و فهمیدن، آزمودن و بهبود دادن کد آسانتر باشد. بخشی از بهتر کردن ظاهر IDLE، بهویژه در لینوکس و مک، استفاده از ابزارکهای ttk است که عمدتاً در کادرهای گفتوگو به کار میروند. در نتیجه، IDLE دیگر با tcl/tk 8.4 اجرا نمیشود و اکنون به tcl/tk 8.5 یا 8.6 نیاز دارد. توصیه میکنیم آخرین نسخهی هرکدام را اجرا کنید.
«نوسازی» شامل تغییر نام و تجمیع ماژولهای idlelib است. تغییر نام پروندههایی که نامهایشان تا حدی با حروف بزرگ است، مشابه تغییر نام Tkinter و TkFont، برای مثال، به tkinter و tkinter.font در 3.0 است. در نتیجه، ایمپورتهای پروندههای idlelib که در 3.5 کار میکردند، معمولاً در 3.6 کار نخواهند کرد. حداقل یک تغییر نام ماژول لازم خواهد بود (به idlelib/README.txt مراجعه کنید)، گاهی بیشتر. (تغییرات نام با مشارکت Al Swiegart و Terry Reedy در bpo-24225 انجام شده است. بیشتر پچهای idlelib از آن زمان بخشی از این فرایند بودهاند و خواهند بود.)
در جبران، نتیجه نهایی این خواهد بود که استفاده از برخی کلاسهای idlelib آسانتر خواهد شد، همراه با APIهای بهتر و رشتههای مستندی که آنها را توضیح میدهند. اطلاعات مفید دیگری نیز هر زمان که در دسترس باشد به idlelib افزوده خواهد شد.
جدید در 3.6.2:
چندین اصلاح برای تکمیل خودکار. (مشارکتشده توسط Louie Lu در bpo-15786.)
افزودهشده در نسخه 3.6.3:
مرورگر ماژول (در منوی File، که پیشتر مرورگر کلاس نامیده میشد)، اکنون علاوه بر توابع و کلاسهای سطح بالا، توابع و کلاسهای تودرتو را نیز نمایش میدهد. (مشارکتشده توسط Guilherme Polo، Cheryl Sabella و Terry Jan Reedy در bpo-1612262.)
قابلیتهای IDLE که پیشتر بهصورت افزونه پیادهسازی شده بودند، بهعنوان قابلیتهای عادی بازپیادهسازی شدهاند. تنظیمات آنها از زبانهی Extensions به زبانههای دیگر پنجرهی گفتوگو منتقل شده است. (با مشارکت Charles Wohlganger و Terry Jan Reedy در bpo-27099.)
گفتوگوی تنظیمات (Options، Configure IDLE) برای بهبود هم ظاهر و هم عملکرد آن، تا حدی بازنویسی شده است. (مشارکتشده توسط Cheryl Sabella و Terry Jan Reedy در چندین مورد .)
جدید در 3.6.4:
نمونه قلم اکنون گزیدهای از نویسههای غیرلاتین را در بر میگیرد تا کاربران بتوانند اثر انتخاب یک قلم خاص را بهتر ببینند. (مشارکتشده توسط Terry Jan Reedy در bpo-13802.) نمونه را میتوان ویرایش کرد تا نویسههای دیگر را در بر بگیرد. (مشارکتشده توسط Serhiy Storchaka در bpo-31860.)
جدید در نسخه 3.6.6:
گزینهی زمینه کد در ویرایشگر بازبینی شد. جعبه تمام سطرهای زمینه را تا maxlines نمایش میدهد. با کلیک روی یک سطر زمینه، ویرایشگر به آن سطر پرش میکند. رنگهای زمینه برای تمهای سفارشی به زبانهی برجستهسازی (Highlights) در گفتوگوی تنظیمات اضافه شد. (مشارکتشده توسط Cheryl Sabella و Terry Jan Reedy در bpo-33642، bpo-33768 و bpo-33679.)
در ویندوز، یک فراخوانی API جدید به ویندوز میگوید که tk برای DPI مقیاسبندی میکند. در ویندوز 8.1+ یا 10، در صورتی که ویژگیهای سازگاری DPI پرونده دودویی پایتون بدون تغییر باشد و وضوح نمایشگر بیش از ۹۶ DPI باشد، این باید متن و سطرها را واضحتر کند. در غیر این صورت، نباید هیچ تأثیری داشته باشد. (مشارکتشده توسط Terry Jan Reedy در bpo-33656.)
جدید در نسخهی 3.6.7:
خروجی بیش از N سطر (بهطور پیشفرض ۵۰) به یک دکمه فشرده (squeeze) میشود. مقدار N را میتوان در بخش PyShell از صفحهی General در پنجرهی تنظیمات تغییر داد. سطرهای کمتر، اما احتمالاً بسیار بلند، را میتوان با راستکلیک کردن روی خروجی فشرده کرد. خروجی فشردهشده را میتوان با دوبار کلیک کردن روی دکمه، در همانجا گسترش داد، یا با راستکلیک کردن روی دکمه، به کلیپبورد یا یک پنجرهی جداگانه گسترش داد. (مشارکتشده توسط Tal Einat در bpo-1529353.)
inspect¶
تابع inspect.signature() اکنون پارامترهای ضمنی .0 تولیدشده توسط کامپایلر برای محدودههای درک و عبارت تولیدگر را بهگونهای گزارش میکند که گویی پارامترهایی صرفاً جایگاهی به نام implicit0 هستند. (مشارکتشده توسط Jelle Zijlstra در bpo-19611.)
برای کاهش تغییرات مکرر کد (code churn) هنگام ارتقا از Python 2.7 و API قدیمی inspect.getargspec()، منسوخشدنی که پیشتر برای inspect.getfullargspec() مستند شده بود، واگردانی شده است. هرچند این تابع برای پایههای کد تکمنبعی Python 2/3 سودمند است، رابط غنیتر inspect.signature() همچنان رویکرد توصیهشده برای کد جدید است. (با مشارکت Nick Coghlan در bpo-27172)
json¶
json.load() و json.loads() اکنون از ورودی دودویی پشتیبانی میکنند. JSON کدگذاریشده باید با استفاده از یکی از UTF-8، UTF-16 یا UTF-32 نمایش داده شود. (با مشارکت Serhiy Storchaka در bpo-17909.)
math¶
ثابت تاو (τ) به ماژولهای math و cmath افزوده شده است. (ارائهشده توسط Lisa Roach در bpo-12345؛ برای جزئیات به PEP 628 مراجعه کنید.)
برای جزئیات دربارهی اینکه چگونه ماژولهای os و os.path اکنون از اشیاء شبهمسیر پشتیبانی میکنند، به خلاصهی PEP 519 مراجعه کنید.
scandir() اکنون از مسیرهای bytes در ویندوز پشتیبانی میکند.
متد جدید close() اجازه میدهد که پیمایشگر scandir() را بهطور صریح ببندید. پیمایشگر scandir() اکنون از پروتکل مدیر زمینه پشتیبانی میکند. اگر پیمایشگر scandir() نه به پایان رسیده باشد و نه بهطور صریح بسته باشد، ResourceWarning در مخرب آن منتشر خواهد شد. (ارائهشده توسط Serhiy Storchaka در bpo-25994.)
در لینوکس، os.urandom() اکنون برای افزایش امنیت، تا زمانی که استخر آنتروپی urandom سیستم مقداردهی اولیه شود، مسدود میشود. برای اطلاع از دلایل این تغییر، PEP 524 را ببینید.
فراخوانی سیستمی getrandom() در لینوکس (دریافت بایتهای تصادفی) اکنون بهعنوان تابع جدید os.getrandom() در دسترس قرار گرفته است. (مشارکتشده توسط Victor Stinner، بخشی از PEP 524)
pdb¶
سازندهی کلاس Pdb یک آرگومان اختیاری جدید readrc دارد که کنترل میکند آیا پروندههای .pdbrc باید خوانده شوند یا خیر.
pickle¶
اشیایی که نیاز دارند __new__ آنها با آرگومانهای کلیدواژهای فراخوانی شود، اکنون میتوانند با استفاده از پروتکلهای پیکل قدیمیتر از نسخه 4 پروتکل پیکل شوند. نسخه 4 پروتکل از قبل از این حالت پشتیبانی میکند. (مشارکت Serhiy Storchaka در bpo-24164.)
pickletools¶
pickletools.dis() اکنون اندیس ضمنی ممو (memo) را برای آپکد MEMOIZE خروجی میدهد. (مشارکتشده توسط Serhiy Storchaka در bpo-25382.)
pydoc¶
ماژول pydoc یاد گرفته است که متغیر محیطی MANPAGER را رعایت کند. (مشارکت Matthias Klose در bpo-8637.)
help() و pydoc اکنون میتوانند فیلدهای تاپل نامدار را به ترتیبی که تعریف شدهاند فهرست کنند، نه به ترتیب الفبایی. (مشارکت Raymond Hettinger در bpo-24879.)
random¶
تابع جدید choices() فهرستی از عناصر با اندازهی مشخص را از جمعیت دادهشده با وزنهای اختیاری برمیگرداند. (با مشارکت Raymond Hettinger در bpo-18844.)
پشتیبانی از گسترههای تغییردهنده (modifier spans) در عبارتهای باقاعده افزوده شد. مثالها: '(?i:p)ython' با 'python' و 'Python' تطبیق میکند، اما با 'PYTHON' تطبیق نمیکند؛ '(?i)g(?-i:v)r' با 'GvR' و 'gvr' تطبیق میکند، اما با 'GVR' تطبیق نمیکند. (مشارکتشده توسط Serhiy Storchaka در bpo-433028.)
به گروههای شیء تطبیق میتوان با __getitem__، که معادل group() است، دسترسی داشت. بنابراین mo['name'] اکنون معادل mo.group('name') است. (مشارکتشده توسط اریک اسمیت در bpo-24454.)
اشیای Match اکنون از اشیای شبهاندیس بهعنوان اندیسهای گروه پشتیبانی میکنند. (ارائهشده توسط Jeroen Demeyer و Xiang Zhang در bpo-27177.)
readline¶
تابع set_auto_history() برای فعال یا غیرفعال کردن افزودن خودکار ورودی به فهرست تاریخچه افزوده شد. (مشارکتشده توسط Tyler Crompton در bpo-26870.)
rlcompleter¶
نامهای ویژگیهای خصوصی و ویژه اکنون حذف میشوند، مگر آنکه پیشوند با زیرخط آغاز شود. پس از برخی کلیدواژههای تکمیلشده، یک فاصله یا دونقطه افزوده میشود. (مشارکتشده توسط Serhiy Storchaka در bpo-25011 و bpo-25209.)
site¶
هنگام مشخص کردن مسیرهایی برای افزودن به sys.path در یک پروندهی .pth، اکنون میتوانید علاوه بر پوشهها، مسیرهای پرونده را نیز مشخص کنید (مثلاً پروندههای zip). (ارائهشده توسط Wolfgang Langner در bpo-26587).
socket¶
تابع ioctl() اکنون از کد کنترل SIO_LOOPBACK_FAST_PATH پشتیبانی میکند. (نوشتهشده توسط Daniel Stokes در bpo-26536.)
ثابتهای getsockopt() شامل SO_DOMAIN، SO_PROTOCOL، SO_PEERSEC و SO_PASSSEC اکنون پشتیبانی میشوند. (مشارکتشده توسط Christian Heimes در bpo-26907.)
setsockopt() اکنون از شکل setsockopt(level, optname, None, optlen: int) پشتیبانی میکند. (مشارکتشده توسط Christian Heimes در bpo-27744.)
ماژول socket اکنون از خانواده آدرس AF_ALG برای تعامل با API رمزنگاری کرنل لینوکس پشتیبانی میکند. ALG_*، SOL_ALG و sendmsg_afalg() افزوده شدند. (با مشارکت Christian Heimes در bpo-27744 و با پشتیبانی از Victor Stinner.)
ثابتهای جدید لینوکس TCP_USER_TIMEOUT و TCP_CONGESTION افزوده شدند. (مشارکت: Omar Sandoval، bpo-26273).
ssl¶
ssl از OpenSSL 1.1.0 پشتیبانی میکند. حداقل نسخهی توصیهشده 1.0.2 است. (مشارکتشده توسط Christian Heimes در bpo-26470.)
3DES از مجموعههای رمز پیشفرض حذف شده است و مجموعههای رمز ChaCha20 Poly1305 افزوده شدهاند. (مشارکتشده توسط Christian Heimes در bpo-27850 و bpo-27766.)
SSLContext پیکربندی پیشفرض بهتری برای گزینهها و رمزها دارد. (ارائهشده توسط Christian Heimes در bpo-28043.)
نشست SSL را میتوان با کلاس جدید SSLSession از یک اتصال سمت کلاینت به اتصال دیگری کپی کرد. ازسرگیری نشست TLS میتواند دستدهی اولیه را تسریع کند، تأخیر را کاهش دهد و کارایی را بهبود بخشد (مشارکتشده توسط Christian Heimes در bpo-19500 بر اساس پیشنویسی از Alex Warhawk.)
از متد جدید get_ciphers() میتوان برای دریافت فهرستی از رمزهای فعالشده به ترتیب اولویت رمز استفاده کرد.
همهی ثابتها و پرچمها به IntEnum و IntFlag تبدیل شدهاند. (با مشارکت کریستین هایمز در bpo-28025.)
پروتکلهای TLS اختصاصی سمت سرور و کلاینت برای SSLContext افزوده شدند. (مشارکتشده توسط Christian Heimes در bpo-28085.)
ssl.SSLContext.post_handshake_auth برای فعالسازی و ssl.SSLSocket.verify_client_post_handshake() برای آغاز احراز هویت پس از دستدهی TLS 1.3 افزوده شدند. (مشارکتشده توسط Christian Heimes در gh-78851.)
struct¶
struct اکنون از اعداد ممیز شناور با دقت نصف IEEE 754 از طریق مشخصکننده قالب 'e' پشتیبانی میکند. (مشارکتشده توسط Eli Stevens و Mark Dickinson در bpo-11734.)
subprocess¶
مخرب subprocess.Popen اکنون در صورتی که فرایند فرزند همچنان در حال اجرا باشد، هشدار ResourceWarning منتشر میکند. برای خواندن وضعیت خروج فرایند فرزند، از پروتکل مدیر زمینه (with proc: ...) استفاده کنید یا متد wait() را بهطور صریح فراخوانی کنید. (ارائهشده توسط Victor Stinner در bpo-26741.)
سازندهی subprocess.Popen و تمام توابعی که آرگومانها را به آن منتقل میکنند، اکنون آرگومانهای encoding و errors را میپذیرند. مشخص کردن هر یک از این دو، حالت متنی را برای جریانهای stdin، stdout و stderr فعال میکند. (مشارکتشده توسط Steve Dower در bpo-6135.)
sys¶
تابع جدید getfilesystemencodeerrors() نام حالت خطای استفادهشده برای تبدیل میان نام پروندههای یونیکد و نام پروندههای بایتی را برمیگرداند. (ارائهشده توسط Steve Dower در bpo-27781.)
در ویندوز، مقدار بازگشتی تابع getwindowsversion() اکنون شامل فیلد platform_version است که نسخهی اصلی، نسخهی فرعی و شمارهی ساخت دقیق سیستمعامل فعلی را در بر میگیرد، نه نسخهای که برای فرایند شبیهسازی میشود (مشارکت توسط Steve Dower در bpo-27932.)
telnetlib¶
telnetlib.Telnet اکنون یک مدیر زمینه است (مشارکتشده توسط Stéphane Wirtel در bpo-25485).
time¶
ویژگیهای tm_gmtoff و tm_zone در struct_time اکنون در تمام پلتفرمها در دسترس هستند.
timeit¶
متد کاربردی جدید Timer.autorange() افزوده شده است تا Timer.timeit() را بهطور مکرر فراخوانی کند، بهگونهای که زمان اجرای کل بزرگتر یا مساوی ۲۰۰ میلیثانیه باشد. (مشارکتشده توسط استیون دآپرانو در bpo-6422.)
timeit اکنون هشدار میدهد زمانی که واریانس قابلتوجهی (۴ برابر) بین بهترین و بدترین زمانها وجود داشته باشد. (ارائهشده توسط Serhiy Storchaka در bpo-23552.)
tkinter¶
متدهای Variable.trace_add()، Variable.trace_remove() و trace_info() به کلاس tkinter.Variable اضافه شدند. این متدها جایگزین متدهای قدیمی trace_variable()، trace()، trace_vdelete() و trace_vinfo() میشوند که از دستورهای منسوخ Tcl استفاده میکنند و ممکن است در نسخههای آینده Tcl کار نکنند. (مشارکتشده توسط Serhiy Storchaka در bpo-22115).
traceback¶
هم ماژول traceback و هم نمایش توکار استثنا در مفسر، اکنون دنبالههای طولانی سطرهای تکراری را در ردگیریهای پشته خلاصه میکنند، همانطور که در مثال زیر نشان داده شده است:
>>> def f(): f()
...
>>> f()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in f
File "<stdin>", line 1, in f
File "<stdin>", line 1, in f
[Previous line repeated 995 more times]
RecursionError: maximum recursion depth exceeded
(مشارکت Emanuel Barry در bpo-26823.)
tracemalloc¶
ماژول tracemalloc اکنون از ردگیری تخصیصهای حافظه در چندین فضای آدرس متفاوت پشتیبانی میکند.
کلاس فیلتر جدید DomainFilter برای فیلتر کردن ردگیریهای بلوک بر اساس فضای آدرس (دامنه) آنها افزوده شده است.
(مشارکتشده توسط Victor Stinner در bpo-26588.)
typing¶
از آنجا که ماژول typing آزمایشی است، تمام تغییرات معرفیشده در Python 3.6 به Python 3.5.x نیز بکپورت شدهاند.
ماژول typing پشتیبانی بسیار بهبودیافتهای از مستعارهای نوع عام دارد. برای مثال، Dict[str, Tuple[S, T]] اکنون یک حاشیهنویسی نوع معتبر است. (مشارکتشده توسط گیدو ون روسوم در Github #195.)
کلاس typing.ContextManager برای نمایش contextlib.AbstractContextManager افزوده شده است. (مشارکتشده توسط Brett Cannon در bpo-25609.)
کلاس typing.Collection برای نمایش collections.abc.Collection افزوده شده است. (مشارکتشده توسط Ivan Levkivskyi در bpo-27598.)
سازهی نوع typing.ClassVar برای نشانهگذاری متغیرهای کلاس افزوده شده است. همانطور که در PEP 526 معرفی شد، حاشیهنویسی متغیری که در ClassVar دربرگرفته شده است، نشان میدهد که ویژگی مورد نظر قرار است بهعنوان یک متغیر کلاس استفاده شود و نباید روی نمونههای آن کلاس تنظیم شود. (مشارکتشده توسط Ivan Levkivskyi در Github #280.)
ثابت جدید TYPE_CHECKING که بررسیگرهای نوع ایستا آن را True فرض میکنند، اما در رانتایم False است. (مشارکتشده توسط Guido van Rossum در Github #230.)
تابع کمکی جدید NewType() برای ایجاد نوعهای متمایزِ سبکوزن برای حاشیهنویسی افزوده شده است:
from typing import NewType
UserId = NewType('UserId', int)
some_id = UserId(524313)
بررسیگر نوع ایستا نوع جدید را طوری در نظر خواهد گرفت که گویی زیرکلاسی از نوع اصلی است. (مشارکت Ivan Levkivskyi در Github #189.)
unittest.mock¶
کلاس Mock بهبودهای زیر را دارد:
urllib.request¶
اگر درخواست HTTP بدنهای از نوع پرونده یا شیء پیمایشپذیر (بهجز شیء بایت) داشته باشد ولی سرآیند Content-Length نداشته باشد، AbstractHTTPHandler به جای خطا دادن، اکنون به استفاده از کدگذاری انتقال بخشبندیشده روی میآورد. (مشارکتشده توسط Demian Brecht و Rolf Krahl در bpo-12319.)
urllib.robotparser¶
RobotFileParser اکنون از افزونههای Crawl-delay و Request-rate پشتیبانی میکند. (با مشارکت Nikolay Bogoychev در bpo-16099.)
venv¶
ماژول venv پارامتر جدید --prompt را میپذیرد. این پارامتر پیشوندی جایگزین برای محیط مجازی فراهم میکند. (پیشنهادشده از سوی Łukasz Balcerzak و منتقلشده به 3.6 توسط Stéphane Wirtel در bpo-22829.)
warnings¶
پارامتر اختیاری جدید source به تابع warnings.warn_explicit() افزوده شده است: شیء نابودشدهای که ResourceWarning را منتشر کرده است. ویژگی source نیز به warnings.WarningMessage افزوده شده است (با مشارکت ویکتور استینر در bpo-26568 و bpo-26567).
هنگامی که هشدار ResourceWarning ثبت میشود، اکنون از ماژول tracemalloc برای تلاش در بازیابی ردگیری مربوط به جایی که شیء تخریبشده در آن تخصیص یافته بود، استفاده میشود.
مثالی با اسکریپت example.py:
import warnings
def func():
return open(__file__)
f = func()
f = None
خروجی فرمان python3.6 -Wd -X tracemalloc=5 example.py:
example.py:7: ResourceWarning: unclosed file <_io.TextIOWrapper name='example.py' mode='r' encoding='UTF-8'>
f = None
Object allocated at (most recent call first):
File "example.py", lineno 4
return open(__file__)
File "example.py", lineno 6
f = func()
ردگیری «Object allocated at» جدید است و تنها در صورتی نمایش داده میشود که tracemalloc در حال ردگیری تخصیصهای حافظه پایتون باشد و ماژول warnings از پیش ایمپورت شده باشد.
winreg¶
نوع عدد صحیح ۶۴ بیتی REG_QWORD اضافه شد. (ارائهشده توسط Clement Rouault در bpo-23026.)
xmlrpc.client¶
ماژول xmlrpc.client اکنون از مارشالگشایی نوعهای دادهی اضافی استفادهشده توسط پیادهسازی Apache XML-RPC برای اعداد و None پشتیبانی میکند. (با مشارکت Serhiy Storchaka در bpo-26885.)
zipfile¶
یک متد کلاس جدید ZipInfo.from_file() امکان ساختن یک نمونهی ZipInfo از یک پروندهی سامانه فایلبندی را فراهم میکند. یک متد جدید ZipInfo.is_dir() را میتوان برای بررسی اینکه آیا نمونهی ZipInfo یک پوشه را نشان میدهد یا نه، به کار برد. (مشارکتشده توسط Thomas Kluyver در bpo-26039.)
از متد ZipFile.open() اکنون میتوان برای نوشتن دادهها در یک پروندهی ZIP و همچنین برای استخراج دادهها استفاده کرد. (ارائهشده توسط Thomas Kluyver در bpo-26039.)