首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[笔记]python template

[笔记]python template

作者头像
py3study
发布2020-01-07 11:52:36
1.5K0
发布2020-01-07 11:52:36
举报
文章被收录于专栏:python3python3

1.什么是template

template是python中的string库的一部分
使用template可以不编辑应用就可以改变其中的数据
模板还可以被他的子类修改

2. template如何工作的

template是含有占位符的字符串
用字典将值映射到模板中
占位符后面跟着的变量名要符合python语法中的变量名规则
Template(“$name is friends with $friend”)

3.举例

from string import Template


def main():
    cart = []
    cart.append(dict(item='coke',price=11,qty= 1))
    cart.append(dict(item='cake',price=12,qty=6))
    cart.append(dict(item='fish',price = 1,qty =4))

    t = Template("$qty * $item = $price")
    total = 0
    print "Cart"
    for data in cart:
        print t.substitute(data)
        total += data["price"]

    print "Total: %s"%(total,)


if __name__ == "__main__":
    main()

4.template 异常error

占位符所引导的变量没与字典匹配的话,解释器会抛出KeyError。因为我们的字典里没有这个键。
一些占位符引导的变量是不好的。比如,这个变量以数字开头。这会使解释器抛出ValueError异常。

5. safe_substitute()

如果我们使用这个函数,template可以处理这些异常并返回给我们字符串。
如果哪个占位符变量有异常,返回的这个字符串中这个占位符就没有变化,不会被替代。
比如,Template(“$name had $money”).如果money这里有错误,那么使用safe_substitute()后输出的就是“James had $money”

6.可以使用自己喜欢的符号引导占位变量

我们要做的就是重载类属性delimiter,并修改相应的模板字符串和变量。这里我们用C语言的取地址符号替代默认的美元$符号。
from string import Template


class MyTemplate(Template):
    delimiter = '&'

def main():
    cart = []
    cart.append(dict(item='coke',price=11,qty= 1))
    cart.append(dict(item='cake',price=12,qty=6))
    cart.append(dict(item='fish',price = 1,qty =4))

    t = MyTemplate("&qty * &item = &price")
    total = 0
    print "Cart"
    for data in cart:
        print t.substitute(data)
        total += data["price"]

    print "Total: %s"%(total,)


if __name__ == "__main__":
    main()
运行结果还是一样的。

Cart 1 * coke = 11 6 * cake = 12 4 * fish = 1 Total: 24

7.小提示

如果你行输出delimiter的话,就要连续输入两个delimiter。可以认为,delimiter就是转义符。比如,在delimiter是’$’的情况下:

>>> t = Template(“$you owe me $$0.”) >>> t.substitute(dict(you=’James’)) “James owe me $0.”

如果你还想改变占位符后面的变量名的命名规则,这也可以。继承Template类之后,改变类属性idpattern,其默认值为r”[_a-z][_a-z0-9]*”。
如果你还有需求,想要改变一个单词的某一部分。这也行。只需将占位符后面的变量名加上{}。比如:

>>> t = Template(“The ${back}yard is far away.”) >>> t.substitute(dict(back=’ship’)) “The shipyard is far away.”

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.什么是template
  • 2. template如何工作的
  • 3.举例
  • 4.template 异常error
  • 5. safe_substitute()
  • 6.可以使用自己喜欢的符号引导占位变量
  • 7.小提示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档