这两段代码的效果是一样的:
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谁的历史更久? 为什么会出现功能一样的库呢? 是不是一个是另一个的替代品呢?
Le sujet mentionné
%
dans mon commentaire, et il y a ce passage dans lestr.format()
document officiel (str.format - python2) :Signifie probablement :
Donc, la question initiale mentionnait si
Template
etformat
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 :
PuisqueTemplate
est une classe du modulestring
etformat
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é :Résultat de sortie :
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 :et l'alignement du rembourrage, la précision et même la conversion de base très importants :
Les directions d'application de
Template
etformat
sont donc complètement différentes.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.
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.