
Ini adalah pilihan baru tips dan trik tentang Python dan pemrograman dari saluran-Telegram saya @pythonetc.
Manajer konteks ganda
Terkadang Anda ingin menjalankan blok kode dengan beberapa manajer konteks:
with open('f') as f: with open('g') as g: with open('h') as h: pass 
Karena Python 2.7 dan 3.1, Anda bisa melakukannya dengan satu 
with ekspresi:
 o = open with o('f') as f, o('g') as g, o('h') as h: pass 
Sebelum itu, Anda bisa menggunakan fungsi contextlib.nested:
 with nested(o('f'), o('g'), o('h')) as (f, g, h): pass 
Jika Anda bekerja dengan jumlah pengelola konteks yang tidak diketahui, alat yang lebih canggih cocok untuk Anda. 
contextlib.ExitStack memungkinkan Anda untuk memasukkan sejumlah konteks pada waktu yang sewenang-wenang tetapi menjamin untuk keluar pada akhirnya:
 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 ] 
Objek dalam memori juru bahasa
Semua objek yang saat ini ada dalam memori interpreter dapat diakses melalui 
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)] 
Simbol digit
 In : int('୧৬༣') Out: 163 
0 1 2 3 4 5 6 7 8 9 - bukan satu-satunya karakter yang dianggap digit. Python mengikuti aturan Unicode dan memperlakukan beberapa simbol sebagai digit, berikut adalah daftar lengkapnya (http://www.fileformat.info/info/unicode/category/Nd/list.htm).
Itu mempengaruhi fungsi seperti 
int , 
unicode.isdecimal dan bahkan 
re.match :
 In : int('෯') Out: 9 In : '٢'.isdecimal() Out: True In : bool(re.match('\d', '౫')) Out: True 
UTC tengah malam
 >>> bool(datetime(2018, 1, 1).time()) False >>> bool(datetime(2018, 1, 1, 13, 12, 11).time()) True 
Sebelum Python 3.5, objek 
datetime.time() dianggap palsu jika mereka mewakili UTC tengah malam. Itu dapat menyebabkan bug yang tidak jelas. Dalam contoh berikut ini 
if not dapat berjalan bukan karena 
create_time is 
None , tetapi karena ini adalah tengah malam.
 def create(created_time=None) -> None: if not created_time: created_time = datetime.now().time() 
Anda dapat memperbaikinya dengan menguji secara eksplisit untuk 
None : 
if created_time is None .
Operasi file tidak sinkron
Tidak ada dukungan di Python untuk operasi file asinkron. Untuk membuatnya non-blocking, Anda harus menggunakan utas terpisah.
Untuk menjalankan kode secara asinkron di utas, Anda harus menggunakan metode 
loop.run_in_executor .
Modul 
aiofiles pihak ketiga melakukan semua ini untuk Anda menyediakan antarmuka yang bagus dan sederhana:
 async with aiofiles.open('filename', mode='r') as f: contents = await f.read() 
Sumber: 
habr.com/ru/company/mailru/blog/436322