Maison > Questions et réponses > le corps du texte
这两段代码的效果是一样的:
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
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 version2.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 %
.
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.
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.
巴扎黑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.