Rumah  >  Soal Jawab  >  teks badan

python - string.Template与str.format()为什么同时存在

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

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

迷茫迷茫2714 hari yang lalu885

membalas semua(2)saya akan balas

  • PHPz

    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 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

    balas
    0
  • 巴扎黑

    巴扎黑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.

    balas
    0
  • Batalbalas