Saya mengerti bahwa kita harus menggunakan %s
untuk menggabungkan string daripada +
di Python.
Saya dapat melakukan salah satu dari:
hello = "hello"
world = "world"
print hello + " " + world
print "%s %s" % (hello, world)
print "{} {}".format(hello, world)
print ' '.join([hello, world])
Tetapi mengapa saya harus menggunakan sesuatu selain dari itu +
? Lebih cepat menulis rangkaian dengan sederhana +
. Kemudian jika Anda melihat string pemformatan, Anda menentukan tipe eg %s
dan %d
dan itu. Saya mengerti bisa lebih baik untuk eksplisit tentang jenisnya.
Tetapi kemudian saya membaca bahwa menggunakan +
untuk penggabungan harus dihindari meskipun lebih mudah untuk mengetik. Apakah ada alasan yang jelas bahwa string harus digabungkan dengan salah satu dari cara-cara lain?
%s
bukan untuk Rangkaian, itu spesifikasi konversi untuk format string yang berasal dari Cprintf(3)
. Ada kasus untuk menggunakan itu atau operator gabungan; yang Anda gunakan harus didasarkan pada penilaian situasi, bukan dogma. Betapa mudahnya menulis kode sama sekali tidak relevan karena Anda hanya akan melakukannya sekali.print(f"{hello} {world}")
, memiliki pembacaan konatenasi karena variabel terlihat di mana mereka terjadi dalam string, dan lebih cepat daripadastr.format
.Jawaban:
Keterbacaan. Sintaks string format lebih mudah dibaca, karena memisahkan gaya dari data. Selain itu, dalam Python,
%s
sintaksis akan secara otomatis memaksa semuastr
jenis non untukstr
; sementara penggabungan hanya bekerja denganstr
, dan Anda tidak dapat menyatukanstr
denganint
.Performa. Dalam Python
str
tidak berubah, jadi string kiri dan kanan harus disalin ke string baru untuk setiap pasangan rangkaian. Jika Anda menggabungkan empat string dengan panjang 10, Anda akan menyalin (10 + 10) + ((10 + 10) +10) + (((10 + 10) +10) +10) +10) = 90 karakter, bukan hanya 40 karakter karakter. Dan hal-hal menjadi semakin buruk secara kuadratik ketika jumlah dan ukuran string meningkat. Java mengoptimalkan kasus ini beberapa kali dengan mengubah rangkaian rangkaian untuk digunakanStringBuilder
, tetapi CPython tidak.Untuk beberapa kasus penggunaan, pustaka logging menyediakan API yang menggunakan string format untuk membuat string entri log dengan malas (
logging.info("blah: %s", 4)
). Ini bagus untuk meningkatkan kinerja jika pustaka logging memutuskan bahwa entri log saat ini akan dibuang oleh filter log, sehingga tidak perlu memformat string.sumber
Apakah saya satu-satunya yang membaca dari kiri ke kanan?
Bagi saya, menggunakan
%s
itu seperti mendengarkan penutur bahasa Jerman, di mana saya harus menunggu sampai akhir kalimat yang sangat panjang untuk mendengar apa kata kerjanya.Manakah dari ini yang lebih jelas sekilas?
atau
sumber
n
beberapa dekade, pikiran saya bekerja seperti itu juga ;-) Tetapi saya masih mendukung jawaban saya, yang kedua lebih jelas dan lebih mudah dibaca, oleh karena itu untuk mempertahankannya. Dan itu menjadi lebih jelas semakin banyak parameter yang Anda miliki. Pada akhirnya, jika itu adalah pertunjukan tunggal, lakukan apa yang Anda kenal dan nyamankan; jika ini merupakan upaya tim, tegakkan konsistensi dan tinjauan kode; orang bisa terbiasa dengan hal itu.f"your {object} is in the {location}"
."your '" + object + "' is in the '" + location + "'"
... Saya bahkan tidak yakin apakah saya mendapatkannya sekarang ...Contoh mengklarifikasi argumen keterbacaan:
(Perhatikan bahwa contoh kedua tidak hanya lebih mudah dibaca tetapi juga lebih mudah diedit, Anda dapat mengubah templat pada satu baris dan daftar variabel di yang lain)
Masalah terpisah adalah bahwa kode% s juga mengkonversi ke string, jika tidak Anda harus menggunakan panggilan str () yang juga kurang dapat dibaca daripada kode% s.
sumber
Penggunaan
+
sebaiknya tidak dihindari secara umum. Dalam banyak kasus adalah pendekatan yang benar. Menggunakan%s
atau.join()
hanya disukai dalam kasus-kasus tertentu, dan biasanya cukup jelas ketika mereka adalah solusi yang lebih baik.Dalam contoh Anda, Anda menggabungkan tiga string bersama-sama, dan contoh menggunakan
+
jelas yang paling sederhana dan paling mudah dibaca, dan karenanya direkomendasikan.%s
atau.format()
berguna jika Anda ingin menyisipkan string atau nilai di tengah - tengah string yang lebih besar. Contoh:Dalam hal ini menggunakannya
%s
lebih mudah dibaca karena Anda menghindari memotong string pertama menjadi beberapa segmen. Terutama jika Anda menginterpolasi beberapa nilai..join()
sesuai jika Anda memiliki urutan ukuran variabel string dan / atau Anda ingin menyatukan beberapa string dengan pemisah yang sama.sumber
Karena urutan kata dapat berubah dalam bahasa yang berbeda, formulir dengan
%s
sangat penting jika Anda ingin mendukung terjemahan string dalam perangkat lunak Anda.sumber