Mari kita mulakan dengan mudah. Jangan bersarang jika kenyataan seperti ini, gabungkan sahaja menjadi satu.
if a: if b: pass # -> refactor if a and b: pas
Di sini kami ingin menyemak sama ada terdapat sekurang-kurangnya satu elemen positif dalam senarai. Penyelesaian yang lebih panjang adalah untuk menggelungkan semua nombor, menyemak nombor semasa, dan kemudian memecahkan apabila keadaan adalah benar. Tetapi untuk tugas ini, terdapat kaedah khusus dalam Python, mana-mana fungsi. sebarang pulangan Benar jika mana-mana elemen lelaran adalah benar. Ini adalah lebih pendek dan lebih pythonic daripada gelung manual.
numbers = [-1, -2, -4, 0, 3, -7] has_positives = False for n in numbers: if n > 0: has_positives = True break # -> refactor has_positives = any(n > 0 for n in numbers)
Banyak kali anda akan melihat pembolehubah ditakrifkan dalam gelung, tetapi ia tidak pernah berubah. Ini adalah operasi yang tidak perlu, jadi tariknya keluar dari gelung dan kemudian anda hanya perlu menciptanya sekali.
for building in buildings: city = 'London' addresses.append(building.street_address, city) # -> refactor city = 'London' for building in buildings: addresses.append(building.street_address, city)
Banyak kali anda akan melihat kod yang mentakrifkan pembolehubah dalam fungsi terakhir dan satu baris kemudian ia kembali serta-merta. Jika anda tahu fungsinya, kembalikan hasilnya secara langsung. Ini lebih ringkas dan mengelakkan pembolehubah yang tidak perlu. Walau bagaimanapun, kadangkala jika tidak jelas apa yang dilakukan oleh fungsi tersebut, anda boleh memberikan pembolehubah terakhir nama yang bermakna dan menggunakannya sebagai kod pendokumentasian sendiri.
def state_attributes(self): """Return the state attributes.""" state_attr = { ATTR_CODE_FORMAT: self.code_format, ATTR_CHANGED_BY: self.changed_by, } return state_attr # -> refactor def state_attributes(self): """Return the state attributes.""" return { ATTR_CODE_FORMAT: self.code_format, ATTR_CHANGED_BY: self.changed_by, }
Daripada menggunakan pernyataan if else untuk menetapkan nilai pembolehubah, anda boleh menggunakan ungkapan if untuk menetapkannya dalam satu baris seperti. ini. Walau bagaimanapun, teknik pembinaan semula ini agak dipersoalkan. Sesetengah orang masih lebih suka pilihan pertama, dan tidak mengapa.
if condition: x = 1 else: x = 2 # -> refactor x = 1 if condition else 2
Apabila melihat kod ini, sukar untuk memahami dengan cepat apa yang sedang berlaku. Terdapat berbilang pernyataan if-else dan berbilang lekukan. Sebaik sahaja anda melihat dengan teliti, anda mungkin dapati bahawa pernyataan if pertama merangkumi hampir keseluruhan kod fungsi, cuma pada akhirnya kita mempunyai klausa lain yang sepadan, dan kita hanya mengembalikan Palsu.
Kita boleh memindahkan klausa lain ini ke permulaan. Ini juga dipanggil pernyataan amaran. Jadi jika syarat itu tidak benar, kami tidak akan melaksanakan seluruh kod fungsi. Ini mengalih keluar klausa lain, dan kini terdapat kurang satu tahap lekukan dalam keseluruhan kod. Ini kelihatan lebih jelas dan lebih mudah difahami.
def should_i_wear_this_hat(self, hat): if isinstance(hat, Hat): current_fashion = get_fashion() weather_outside = self.look_out_of_window() is_stylish = self.evaluate_style(hat, current_fashion) if weather_outside.is_raining: print("Damn.") return True else: print("Great.") return is_stylish else: return False # -> refactor def should_i_wear_this_hat(self, hat): if not isinstance(hat, Hat): return False current_fashion = get_fashion() weather_outside = self.look_out_of_window() is_stylish = self.evaluate_style(hat, current_fashion) if weather_outside.is_raining: print("Damn.") return True else: print("Great.") return is_stylish
Ini ialah kod yang dipertingkatkan daripada contoh sebelumnya, tetapi ia masih mengambil sedikit masa untuk memahami perkara yang berlaku di sini. Jadi kami ingin menyemak sama ada kami perlu memakai topi. Logiknya adalah begini: jika hujan, kami sentiasa berkata Benar, jika tidak hujan, dan jika topi itu bergaya, kami berkata Benar. Satu cara mudah kita boleh mempertingkatkan kebolehbacaan logik ini adalah dengan mengalihkan peruntukan lebih dekat kepada penggunaannya. Kita perlu memahami keadaan cuaca sebelum menggunakan pernyataan if. Kini pembolehubah fesyen dan gaya hanya diperlukan dalam klausa else, jadi alihkannya ke bawah. Ia sepatutnya lebih jelas sekarang apa yang berlaku.
Terdahulu dalam Item 4, kita boleh memendekkan kod dengan lebih jauh dan mengembalikan keputusan gaya penilaian dengan segera. Dalam kes ini, is_stylish ialah nama yang lebih baik kerana ia memberitahu anda bahawa jika topi itu bergaya, anda sebut Betul, jika tidak anda sebut Palsu. Jadi simpan sahaja pembolehubah tambahan di sini.
def should_i_wear_this_hat(self, hat): if not isinstance(hat, Hat): return False current_fashion = get_fashion() weather_outside = self.look_out_of_window() is_stylish = self.evaluate_style(hat, current_fashion) if weather_outside.is_raining: print("Damn.") return True else: print("Great.") return is_stylish # -> refactor def should_i_wear_this_hat(self, hat): if not isinstance(hat, Hat): return False weather_outside = self.look_out_of_window() if weather_outside.is_raining: print("Damn.") return True else: print("Great.") current_fashion = get_fashion() return self.evaluate_style(hat, current_fashion) # is_stylish = self.evaluate_style(hat, current_fashion) # return is_stylish
Ini adalah satu lagi perkara yang sering saya lihat. Apabila anda perlu menyemak sama ada terdapat elemen dalam koleksi, contohnya dalam senarai, anda tidak perlu menulis jika len(your_list) > 0 Anda hanya boleh menyebut jika your_list. Ini ialah pendekatan yang disyorkan pep 8, juga dikenali sebagai ujian kebenaran. Ini mungkin kerana dalam Python, urutan dan set kosong dinilai kepada False. Jadi ini boleh digunakan pada rentetan, tupel, senarai, kamus dan set.
if len(list_of_hats) > 0: hat_to_wear = choose_hat(list_of_hats) # -> refactor if list_of_hats: hat_to_wear = choose_hat(list_of_hats)
Atas ialah kandungan terperinci Lapan petua pemfaktoran semula untuk menjadikan kod Python lebih Pythonic. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!