Rumah > Soal Jawab > teks badan
这两段代码的效果是一样的:
from string import Template
template = Template('hi, ${name}')
msg = template.substitute(name=u'张三')
print msg
与
msg = u'hi, {name}'
msg = msg.format(name=u'张三')
print msg
我的问题是, string.Template与str.format谁的历史更久? 为什么会出现功能一样的库呢? 是不是一个是另一个的替代品呢?
PHPz2017-04-18 09:31:24
Subjek yang disebut %
dalam ulasan saya, dan terdapat petikan ini dalam str.format()
dokumen rasmi (str.format - python2):
Kaedah pemformatan rentetan ini ialah standard baharu dalam Python 3, dan harus diutamakan daripada pemformatan % yang diterangkan dalam Operasi Pemformatan Rentetan dalam kod baharu.
Mungkin bermaksud:
Kaedah ini ialah standard baharu dalam
Python 3
, pembangun harus menggunakannya dahulu, bukannya%
, untuk memformat rentetan. (format
ialah cara untuk menambah versi2.6
)
Jadi soalan asal menyebut sama ada Template
dan format
merupakan pengganti. format
%
Memandangkan pegawai itu berkata demikian, saya mencadangkan bahawa apabila ia melibatkan operasi pemformatan rentetan pada masa hadapan, anda harus menggunakan
. format
%
Jawapan asal:
dan Template
ialah fungsi terbina dalam dalam modul string
Ini ialah perbezaan asas antara kedua-duanya. format
Memandangkan __buildin__
ialah kelas, anda boleh mewarisinya dan menulis semula kandungan mengikut keperluan anda sendiri Contohnya, pembatas lalai
from string import Template
class MyTemp(Template):
delimiter = '#'
tem = MyTemp('hi, #{name}')
msg = tem.substitute(name='Jake')
print msg
$
Hasil keluaran:
hi, Jake
Dengan cara yang sama, kita juga boleh melakukan lebih banyak perkara yang kita mahu Ini adalah "penyesuaian peribadi" yang boleh dicapai sebagai kelas.
Selain itu, mengenai
, julat aplikasinya sebenarnya sangat luas Selain daripada apa yang anda nyatakan dalam contoh anda, kami juga biasanya menggunakan yang berikut:
print 'Hi, {0}, {1}.'.format('Jake', 'Tom')
ppl = ['Jake', 'Tom']
print 'Hi, {0[0]}, {0[1]}.'.format(ppl)
# 输出结果都是 Hi, Jake, Tom.
format
dan penjajaran pelapik, ketepatan dan juga penukaran asas yang sangat penting:
print '{:>5}'.format(100)
print '{:x>10}'.format(100)
print '{:.2f}'.format(100.02111)
print '{:b}'.format(15)
# 输出结果:
100
xxxxxxx100
100.02
1111
Jadi arahan aplikasi
dan adalah berbeza sama sekali. Template
巴扎黑2017-04-18 09:31:24
Mengapa anda tidak terkejut mengapa fungsi diisih dan list.sort() wujud pada masa yang sama?
Fungsi dengan fungsi yang serupa secara amnya disasarkan pada senario aplikasi khas Contohnya, soreted mempunyai nilai pulangan dan mengisih secara langsung menukar objek.
a = [1,3,2]
b = sorted(a)
b == [1,2,3]
a == [1,3,2]
a.sort()
a == [1,2,3]
Untuk string.Template dan str.format, string.Template, seperti yang dinyatakan dalam namanya, sesuai untuk menentukan templat dan boleh digunakan kemudian, sebagai contoh, jika anda mentakrifkan templat dalam fungsi atau pakej, ia boleh digunakan pada bila-bila masa Mudah untuk dihubungi tanpa perlu mengetahui butirannya. str.format() biasanya digunakan untuk ungkapan satu baris dan lebih fleksibel untuk digunakan.