Hari ini kita punya percobaan lain untuk memaksakan sesuatu yang tidak bisa dipaksakan ke dalam satu baris, ditemukan di internet. Melihat ini, linter tidak hanya mengomel — mereka menghapus diri mereka sendiri dari perangkat Anda.
with open("t") as f:print(sum([sum([float(m) for m in "".join(filter(lambda x:x.isnumeric() or x.isspace() or x==".",l)).split()]) for l in f.readlines()]))🧐 Apa yang terjadi di sini?
Penulis "mahakarya" ini menetapkan tugas: mengekstrak semua angka dari file teks dan menjumlahkannya.
Mengapa ini menyebabkan sakit fisik?
1️⃣ Memori tidak elastis.
f.readlines() membuang seluruh file ke RAM. Jika file berukuran 10 GB — server Anda akan mengucapkan "selamat tinggal" lebih cepat daripada Anda selesai membaca posting ini.2️⃣ Penyaringan karakter demi karakter melalui lambda. Menggabungkan string satu per satu karakter melalui
"".join(filter(...)) adalah cara paling lambat untuk memproses string di Python. Apakah kita memprogram atau merangkai manik-manik?3️⃣ Pemahaman daftar bersarang. Keterbacaan setingkat hieroglif Mesir. Untuk memahami di mana kurung ditutup, Anda perlu memanggil eksorsis.
4️⃣ PEP8 keluar dari obrolan. Tidak adanya spasi setelah
: dan di sekitar operator bukanlah penghematan ruang, itu adalah tidak menghormati orang lain.Kesimpulan: Kami mendapatkan kode yang berjalan lambat, memakan memori, dan benar-benar tidak terbaca.
✅ Bagaimana melakukannya dengan benar?
Jika Anda perlu mengekstrak angka dari teks, ada ekspresi reguler.
Inilah bagaimana kode ini seharusnya terlihat di dunia orang sehat:
import re
def total_sum_from_file(file_path: str) -> float:
total = 0.0
# Gunakan manajer konteks dan iterator baris
with open(file_path, 'r', encoding='utf-8') as f:
for line in f:
# Cari semua yang mirip angka (bilangan bulat atau dengan titik)
numbers = re.findall(r"[-+]?\d*\.\d+|\d+", line)
total += sum(map(float, numbers))
return total
print(total_sum_from_file("t.txt"))Mengapa ini lebih baik:
1. Keterbacaan: Bahkan seorang junior akan mengerti apa yang terjadi dalam 5 detik.
2. Memori: Kami membaca file baris demi baris. Jika file berukuran 10 GB, kode ini tidak akan crash.
3. Kecepatan:
re.findall di level C bekerja lebih cepat daripada filter karakter demi karakter Anda di Python.#kode_perokok
Komentar
0Belum ada komentar.
Masuk untuk ikut berdiskusi.