
Ini adalah pilihan kelima tips dan pemrograman Python dari umpan @pythonetc saya.
Pilihan sebelumnya:
Pemisah -
Setiap utilitas baris perintah yang layak harus mengambil argumen dalam bentuk opsi (misalnya, 
-h atau 
--help ), opsi dengan parameter ( 
--log-level 2 ) atau parameter posisi ( 
cp file1 file2 ).
Opsi berbeda dari parameter posisi dengan keberadaan satu atau dua tanda hubung di awal. Ketika argumen posisi dimulai dengan tanda hubung, muncul masalah: jika Anda ingin menghapus file bernama 
-rf , maka perintah 
rm -rf tidak akan membantu Anda dengan ini.
Jalan keluar yang mudah adalah dengan menggunakan dua garis putus-putus sebagai pemisah. Argumen setelah - tidak dianggap sebagai opsi:
$ echo test > -rf $ cat -rf cat: invalid option -- 'r' Try 'cat --help' for more information. $ cat -- -rf test $ rm -- -rf $ cat -- -rf cat: -rf: No such file or directory 
Dua strip didukung oleh modul argparse di luar kotak.
Stabilitas stabil
Penyortiran standar dalam Python kuat, fungsi yang 
diurutkan tidak mengubah urutan objek yang sama:
 In : a = [2, -1, 0, 1, -2] In : sorted(a, key=lambda x: x**2) Out: [0, -1, 1, 2, -2] 
Fungsi 
min dan 
maks juga konsisten dengan 
diurutkan. maks berfungsi seperti 
diurutkan (a, mundur = Benar) [0] , dan 
min bekerja seperti 
diurutkan ( a) [0] . Ini berarti bahwa kedua fungsi mengembalikan jawaban yang paling kiri mungkin:
 In : max([2, -2], key=lambda x: x**2) Out: 2 In : max([-2, 2], key=lambda x: x**2) Out: -2 In : min([2, -2], key=lambda x: x**2) Out: 2 In : min([-2, 2], key=lambda x: x**2) Out: -2 
Tembolok dalam argumen default
Mungkin kesalahan paling umum di antara pythonists pemula adalah untuk menentukan objek bisa berubah sebagai argumen ke fungsi default. Memisahkan objek ini di antara panggilan fungsi dapat menyebabkan hasil yang paling aneh:
 def append_length(lst=[]): lst.append(len(lst)) return lst print(append_length([1, 2]))  
Namun, berbagi seperti itu bahkan akan berguna jika Anda menggunakan objek untuk membuat cache bersama:
 def fact(x, cache={0: 1}): if x not in cache: cache[x] = x * fact(x - 1) return cache[x] print(fact(5)) 
Dalam contoh ini, kami menempatkan nilai faktorial yang dihitung di dalam nilai argumen default. Nilai-nilai tersebut bahkan dapat diekstraksi:
 >>> fact.__defaults__ ({0: 1, 1: 1, 2: 2, 3: 6, 4: 24, 5: 120},) 
Bekerja dengan FS
Anda dapat bekerja dengan jalur sistem file menggunakan modul 
os.path . Modul ini berisi banyak fungsi yang memperlakukan string sebagai path file dan melakukan berbagai operasi yang bermanfaat pada mereka seperti penggabungan:
 >>> import os.path >>> os.path.join('/usr', 'local') '/usr/local' >>> os.path.dirname('/var/log') '/var' 
Dimulai dengan versi 3.4, Python menyertakan modul 
pathlib yang menawarkan pendekatan berorientasi objek:
 >>> from pathlib import Path >>> Path('/usr') / Path('local') PosixPath('/usr/local') >>> Path('/usr') / 'local' PosixPath('/usr/local') >>> Path('/var/log').parent PosixPath('/var') >>> Path('/var/log').parent.name 'var' 
Obyek yang Disebut
Dalam Python, Anda dapat membuat objek yang dapat dipanggil tidak hanya dengan membuat fungsi (menggunakan sintaks 
def atau 
lambda ). Objek menjadi bisa dipanggil jika memiliki metode 
__call__ :
 class Truncater: def __init__(self, length): self._length = length def __call__(self, s): return s[0:self._length] print(Truncater(4)('abcdabcd'))  
Karena dekorator pada dasarnya adalah fungsi tingkat tinggi, ia juga dapat diekspresikan oleh objek yang dipanggil, bukan fungsi:
 class cached: def __init__(self, func): self._func = func self._cache = {} def __call__(self, arg): if arg not in self._cache: self._cache[arg] = self._func(arg) return self._cache[arg] @cached def sqr(x): return x * x