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

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

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

迷茫
迷茫

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

répondre à tous(2)
PHPzhong

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.

巴扎黑

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal