Maison  >  Questions et réponses  >  le corps du texte

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 Il y a quelques jours887

répondre à tous(2)je répondrai

  • PHPz

    PHPz2017-04-18 09:31:24

    Le sujet mentionné % dans mon commentaire, et il y a ce passage dans le str.format() document officiel (str.format - python2) :

    Cette méthode de formatage de chaîne est la nouvelle norme dans Python 3 et doit être préférée au formatage % décrit dans Opérations de formatage de chaîne dans le nouveau code.

    Signifie probablement :

    Cette méthode est le nouveau standard en Python 3, les développeurs devraient l'utiliser en premier, au lieu de %, pour formater les chaînes. (format est la méthode ajoutée à la version 2.6)

    Donc, la question initiale mentionnait si Template et format sont des substituts. La situation réelle est que ces deux gars ne le sont pas. Au lieu de cela, format est vraiment un substitut à %.

    Depuis que le responsable l'a dit, je suggère que lorsqu'il s'agira d'opérations de formatage de chaîne à l'avenir, vous devriez utiliser format au lieu de %.

    Réponse originale :

    Template est une classe du module string et format est une fonction intégrée dans le module __buildin__ C'est la différence fondamentale entre les deux.

    Puisque

    est une classe, vous pouvez en hériter et réécrire le contenu selon vos propres besoins. Par exemple, le délimiteur par défaut $ peut être modifié :

    .
    from string import Template
    
    class MyTemp(Template):
        delimiter = '#'
    
    tem = MyTemp('hi, #{name}')
    msg = tem.substitute(name='Jake')
    
    print msg

    Résultat de sortie :

    hi, Jake

    De la même manière, nous pouvons aussi faire plus de choses que nous voulons. C'est la « personnalisation privée » qui peut être réalisée en tant que classe.

    De plus, concernant format, son champ d'application est en fait très large. En plus de ce que vous avez mentionné dans votre exemple, nous utilisons également couramment les éléments suivants :

    .
    print 'Hi, {0}, {1}.'.format('Jake', 'Tom')
    ppl = ['Jake', 'Tom']
    print 'Hi, {0[0]}, {0[1]}.'.format(ppl)
    # 输出结果都是 Hi, Jake, Tom.

    et l'alignement du rembourrage, la précision et même la conversion de base très importants :

    print '{:>5}'.format(100)
    print '{:x>10}'.format(100)
    print '{:.2f}'.format(100.02111)
    print '{:b}'.format(15)
    
    # 输出结果:
      100
    xxxxxxx100
    100.02
    1111

    Les directions d'application de Template et format sont donc complètement différentes.

    répondre
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:31:24

    Pourquoi n'êtes-vous pas surpris de savoir pourquoi la fonction sorted et list.sort() existent en même temps ?
    Les fonctions avec des fonctions similaires sont généralement destinées à des scénarios d'application spéciaux. Par exemple, soreted a une valeur de retour et le tri modifie directement l'objet.

    a = [1,3,2]
    b = sorted(a)
    b == [1,2,3]
    a == [1,3,2]
    a.sort()
    a == [1,2,3]

    Pour string.Template et str.format, string.Template, comme son nom l'indique, convient à la définition de modèles et peut être utilisé ultérieurement. Par exemple, si vous définissez un modèle dans une fonction ou un package, il peut être utilisé. à tout moment Pratique pour appeler sans avoir à connaître ses coordonnées. Le str.format() est généralement utilisé pour les expressions sur une seule ligne et est plus flexible à utiliser.

    répondre
    0
  • Annulerrépondre