Saya memiliki string yang mirip '%s in %s'
dan saya ingin tahu cara memisahkan argumen sehingga keduanya adalah% s yang berbeda. Pikiranku datang dari Jawa datang dengan ini:
'%s in %s' % unicode(self.author), unicode(self.publication)
Tapi ini tidak berfungsi, jadi bagaimana tampilannya di Python?
'{} in {}'
string format biasa .Jika Anda menggunakan lebih dari satu argumen, argumen itu harus dalam tuple (perhatikan tanda kurung tambahan):
Seperti yang ditunjukkan EOL,
unicode()
fungsi biasanya mengasumsikan pengkodean ascii sebagai default, jadi jika Anda memiliki karakter non-ASCII, lebih aman untuk secara eksplisit meneruskan pengkodean:Dan pada Python 3.0, lebih disukai menggunakan
str.format()
sintaks sebagai gantinya:sumber
Pada objek tuple / pemetaan untuk beberapa argumen
format
Berikut ini adalah kutipan dari dokumentasi:
Referensi
Di
str.format
alih-alih%
Alternatif yang lebih baru untuk
%
operator adalah menggunakanstr.format
. Berikut kutipan dari dokumentasi:Referensi
str.format
- sintaksContohnya
Berikut ini beberapa contoh penggunaan:
Lihat juga
sumber
'{self.author} in {self.publication}'.format(self=self)
harus "bekerja". Saya hanya tidak yakin tentangunicode
semuanya.{first[0]}
untuk mendapatkan inisialJ
.Anda harus memasukkan nilai ke dalam tanda kurung:
Di sini, untuk pertama
%s
yangunicode(self.author)
akan ditempatkan. Dan untuk yang kedua%s
,unicode(self.publication)
akan digunakan.sumber
%s
ketimbangformat
Ada masalah yang signifikan dengan beberapa jawaban yang diposting sejauh ini: diterjemahkan
unicode()
dari pengodean default, yang seringkali ASCII; sebenarnya,unicode()
mencoba membuat "rasa" dari byte yang diberikan dengan mengubahnya menjadi karakter. Dengan demikian, kode berikut, yang pada dasarnya adalah apa yang direkomendasikan oleh jawaban sebelumnya, gagal pada mesin saya:memberi:
Kegagalan berasal dari fakta bahwa
author
tidak hanya mengandung byte ASCII (yaitu dengan nilai dalam [0; 127]), danunicode()
menerjemahkan dari ASCII secara default (pada banyak mesin).Solusi yang kuat adalah dengan secara eksplisit memberikan pengkodean yang digunakan di bidang Anda; menggunakan UTF-8 sebagai contoh:
(atau tanpa inisial
u
, tergantung pada apakah Anda menginginkan hasil Unicode atau string byte).Pada titik ini, orang mungkin ingin mempertimbangkan memiliki
author
danpublication
bidang menjadi string Unicode, alih-alih mendekode mereka selama memformat.sumber
Untuk python2 Anda juga bisa melakukan ini
yang berguna jika Anda memiliki banyak argumen untuk diganti (terutama jika Anda melakukan internasionalisasi)
Python2.6 dan seterusnya mendukung
.format()
sumber
Anda juga dapat menggunakannya dengan bersih dan sederhana (tetapi salah! Karena Anda harus menggunakan
format
seperti yang dikatakan Mark Byers) dengan melakukan:sumber
Untuk kelengkapan, dalam python 3.6 f-string diperkenalkan pada PEP-498 . String ini memungkinkan untuk
Itu berarti bahwa untuk contoh Anda, Anda juga dapat menggunakan:
sumber