
Ini adalah pilihan ketujuh tips dan pemrograman Python dari umpan @pythonetc saya.
Pilihan sebelumnya:
Berbagai konteks
Kadang-kadang mungkin diperlukan untuk menjalankan blok kode di 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, ini dapat dilakukan dengan satu ekspresi:
 o = open with o('f') as f, o('g') as g, o('h') as h: pass 
Sebelumnya, Anda bisa menggunakan fungsi 
contextlib.nested :
 with nested(o('f'), o('g'), o('h')) as (f, g, h): pass 
Jika Anda bekerja dengan sejumlah manajer konteks yang tidak terbatas, lebih baik memilih alat yang lebih canggih. 
contextlib.ExitStack memungkinkan Anda untuk memasukkan sejumlah konteks kapan saja dan menjamin keluar dari mereka pada akhir eksekusi:
 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 menggunakan 
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)] 
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 menghitung beberapa ratus karakter sebagai angka. Daftar lengkapnya di 
sini .
Ini penting untuk 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 Pyhon 3.5, objek 
datetime.time() dianggap salah jika mereka mewakili tengah malam UTC. Ini dapat menyebabkan bug yang tidak terlihat. Pada contoh berikut, 
if not mungkin gagal karena tidak 
create_timeadalah 
None , tetapi karena ini tengah malam.
 def create(created_time=None) -> None: if not created_time: created_time = datetime.now().time() 
Anda dapat mengatasi bug ini dengan secara eksplisit memeriksa 
None : 
if created_time is None .
Kerja asinkron dalam FS
Python tidak mendukung operasi file yang tidak sinkron. Untuk membuatnya non-blocking, Anda harus menggunakan utas.
Untuk eksekusi kode asinkron dalam aliran, Anda perlu menggunakan metode 
loop.run_in_executor .
Modul 
aiofiles pihak 
aiofiles dapat melakukan ini untuk Anda, menyediakan antarmuka yang nyaman dan sederhana:
 async with aiofiles.open('filename', mode='r') as f: contents = await f.read()