python - string.Template与str.format()为什么同时存在
迷茫
迷茫 2017-04-18 09:29:24
0
2
951

这两段代码的效果是一样的:

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谁的历史更久? 为什么会出现功能一样的库呢? 是不是一个是另一个的替代品呢?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

membalas semua(2)
PHPzhong

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 versi 2.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

dan bukannya

. format %Jawapan asal:

ialah kelas dalam modul

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

boleh diubah suai:

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

巴扎黑

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan