Bagaimana Anda akan memformat garis panjang seperti ini? Saya ingin membuatnya tidak lebih dari 80 karakter:
logger.info("Skipping {0} because its thumbnail was already in our system as {1}.".format(line[indexes['url']], video.title))
Apakah ini opsi terbaik saya?
url = "Skipping {0} because its thumbnail was already in our system as {1}."
logger.info(url.format(line[indexes['url']], video.title))
python
formatting
code-formatting
Gattster
sumber
sumber
indexes
: jamak yang benarindex
adalahindices
.Jawaban:
Itu awal. Ini bukan praktik yang buruk untuk mendefinisikan string Anda yang lebih panjang di luar kode yang menggunakannya. Ini adalah cara untuk memisahkan data dan perilaku. Pilihan pertama Anda adalah menggabungkan string literal bersama secara implisit dengan membuatnya berdekatan satu sama lain:
Atau dengan kelanjutan akhir baris, yang sedikit lebih rapuh, karena ini berfungsi:
Tetapi ini tidak:
Lihat perbedaannya? Tidak? Baik Anda tidak akan ketika itu kode Anda juga.
Kelemahan dari penyatuan implisit adalah bahwa itu hanya bekerja dengan string literal, bukan dengan string yang diambil dari variabel, sehingga hal-hal bisa menjadi sedikit lebih berbulu ketika Anda refactor. Selain itu, Anda hanya dapat menginterpolasi pemformatan pada string gabungan secara keseluruhan.
Atau, Anda dapat bergabung secara eksplisit menggunakan operator gabungan (
+
):Eksplisit lebih baik daripada implisit, seperti kata zen dari python, tetapi ini menciptakan tiga string, bukan satu, dan menggunakan memori dua kali lebih banyak: ada dua yang telah Anda tulis, ditambah satu yang keduanya bergabung bersama, jadi Anda harus tahu kapan harus mengabaikan zen. Sisi baiknya adalah Anda dapat menerapkan pemformatan ke salah satu substring secara terpisah di setiap baris, atau ke seluruh lot dari luar tanda kurung.
Akhirnya, Anda dapat menggunakan string yang dikutip tiga kali lipat:
Ini sering menjadi favorit saya, meskipun perilakunya sedikit berbeda karena baris baru dan spasi putih mana pun pada baris berikutnya akan muncul di string terakhir Anda. Anda dapat menghilangkan baris baru dengan garis miring terbalik.
Ini memiliki masalah yang sama dengan teknik yang sama di atas, dalam kode yang benar hanya berbeda dari kode yang salah oleh spasi kosong.
Mana yang "terbaik" tergantung pada situasi khusus Anda, tetapi jawabannya bukan hanya estetika, tetapi salah satu perilaku yang agak berbeda.
sumber
'
untuk memuat string itu, atau keluar dari tanda kutip ganda di dalam string Anda, atau menggunakan tanda kutip ganda rangkap"""
. Masalah dengan string kutipan yang berisi kutipan adalah sama apakah Anda menggunakan satu baris atau beberapa baris untuk mendefinisikan string literal.+
.Literal string berturut-turut digabungkan oleh kompiler, dan ekspresi yang diurung dianggap sebagai satu baris kode:
sumber
Secara pribadi saya tidak suka menggantung blok terbuka, jadi saya memformatnya sebagai:
Secara umum saya tidak akan repot-repot berjuang terlalu keras untuk membuat kode pas persis dalam garis 80-kolom. Sebaiknya menjaga panjang garis ke tingkat yang wajar, tetapi batas 80 sulit adalah sesuatu dari masa lalu.
sumber
Anda dapat menggunakan modul textwrap untuk memecahnya dalam beberapa baris
Dari dokumentasi :
sumber
Bagi siapa saja yang juga mencoba untuk memanggil
.format()
pada tali panjang, dan tidak dapat menggunakan beberapa teknik tali pembungkus paling populer tanpa melanggar berikutnya.format(
panggilan, Anda dapat melakukanstr.format("", 1, 2)
bukan"".format(1, 2)
. Ini memungkinkan Anda memecahkan tali dengan teknik apa pun yang Anda suka. Sebagai contoh:dapat
Kalau tidak, satu-satunya kemungkinan adalah menggunakan lanjutan garis akhir, yang secara pribadi saya bukan penggemar.
sumber