Lapan petua pemfaktoran semula untuk menjadikan kod Python lebih Pythonic

WBOY
Lepaskan: 2023-04-10 15:01:40
ke hadapan
1862 orang telah melayarinya

1. Gabungkan pernyataan jika bersarang

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
Salin selepas log masuk

2. Gunakan mana-mana bukan gelung

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)
Salin selepas log masuk

3. Ekstrak penyataan daripada gelung for/while

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)
Salin selepas log masuk

4 Alih keluar pembolehubah sebaris yang digunakan sekali sahaja dan dikembalikan serta-merta

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,
}
Salin selepas log masuk

5 Gantikan pernyataan if dengan ungkapan if

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
Salin selepas log masuk

6. Tambah kenyataan amaran

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
Salin selepas log masuk

7. Alihkan peruntukan lebih dekat kepada penggunaan

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
Salin selepas log masuk

8. Permudahkan semakan jujukan

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)
Salin selepas log masuk

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!

Label berkaitan:
sumber:51cto.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!