
إنها مجموعة جديدة من النصائح والحيل حول Python والبرمجة من خلال Telegram-channelpythonetc.
مديري السياق متعددة
في بعض الأحيان تريد تشغيل كتلة تعليمات برمجية مع مدراء سياق متعددين:
with open('f') as f: with open('g') as g: with open('h') as h: pass 
منذ Python 2.7 و 3.1 ، يمكنك القيام بذلك باستخدام مفردة 
with تعبير:
 o = open with o('f') as f, o('g') as g, o('h') as h: pass 
قبل ذلك ، يمكنك استخدام دالة contextlib.nested:
 with nested(o('f'), o('g'), o('h')) as (f, g, h): pass 
إذا كنت تعمل مع العدد غير المعروف من مدير السياق ، فإن الأداة الأكثر تقدمًا تناسبك جيدًا. 
contextlib.ExitStack يسمح لك بإدخال أي عدد من السياقات في الوقت التعسفي لكنه يضمن الخروج منها في النهاية:
 with ExitStack() as stack: f = stack.enter_context(o('f')) g = stack.enter_context(o('g')) other = [ stack.enter_context(o(filename)) for filename in filenames ] 
كائنات في ذاكرة المترجم
يمكن الوصول إلى جميع الكائنات الموجودة حاليًا في ذاكرة المترجم عبر 
gc.get_objects() :
 In : class A: ...: def __init__(self, x): ...: self._x = x ...: ...: def __repr__(self): ...: class_name = type(self).__name__ ...: x = self._x ...: return f'{class_name}({x!r})' ...: In : A(1) Out: A(1) In : A(2) Out: A(2) In : A(3) Out: A(3) In : [x for x in gc.get_objects() if isinstance(x, A)] Out: [A(1), A(2), A(3)] 
رموز الأرقام
 In : int('୧৬༣') Out: 163 
0 1 2 3 4 5 6 7 8 9 - ليست الأحرف الوحيدة التي تعتبر أرقامًا. تتبع Python قواعد Unicode وتعامل عدة مئات من الرموز كأرقام ، وهنا القائمة الكاملة (http://www.fileformat.info/info/unicode/category/Nd/list.htm).
يؤثر على وظائف مثل 
int و 
re.match وحتى 
re.match :
 In : int('෯') Out: 9 In : '٢'.isdecimal() Out: True In : bool(re.match('\d', '౫')) Out: True 
UTC منتصف الليل
 >>> bool(datetime(2018, 1, 1).time()) False >>> bool(datetime(2018, 1, 1, 13, 12, 11).time()) True 
قبل Python 3.5 ، تم اعتبار كائنات 
datetime.time() خاطئة إذا كانت تمثل UTC منتصف الليل. يمكن أن يؤدي إلى أخطاء غامضة. في الأمثلة التالية ، 
if not يعمل ، لأن 
create_time هو 
create_time ، ولكن لأن منتصف الليل.
 def create(created_time=None) -> None: if not created_time: created_time = datetime.now().time() 
يمكنك إصلاح ذلك عن طريق الاختبار الصريح لـ 
None : 
if created_time is None .
عمليات الملفات غير المتزامنة
لا يوجد أي دعم في Python لعمليات الملفات غير المتزامنة. لجعلها غير محظورة ، عليك استخدام مؤشرات ترابط منفصلة.
لتشغيل التعليمات البرمجية بشكل غير متزامن في مؤشر الترابط ، يجب عليك استخدام الأسلوب 
loop.run_in_executor .
تقوم وحدة 
aiofiles الخارجية 
aiofiles كله لتوفير واجهة جميلة وبسيطة:
 async with aiofiles.open('filename', mode='r') as f: contents = await f.read() 
المصدر: 
habr.com/ru/company/mailru/blog/436322