python的Template使用指南


Posted in Python onSeptember 11, 2014

Template无疑是一个好东西,可以将字符串的格式固定下来,重复利用。同时Template也可以让开发人员可以分别考虑字符串的格式和其内容了,无形中减轻了开发人员的压力。

Template属于string中的一个类,所以要使用的话可以用以下方式调用

from string import Template

Template有个特殊标示符$,它具有以下的规则:

它的主要实现方式为$xxx,其中xxx是满足python命名规则的字符串,即不能以数字开头,不能为关键字等

如果$xxx需要和其他字符串接触时,可用{}将xxx包裹起来(以前似乎使用'()',我的一本参考书上是这样写的,但是现在的版本应该只能使用'{}')。例如,aaa${xxx}aaa

Template中有两个重要的方法:substitute和safe_substitute.

这两个方法都可以通过获取参数返回字符串

>>s=Template(There $a and $b)
>>print s.subtitute(a='apple',b='banana')
There apple and banana
>>print s.safe_substitute(a='apple',b='banbana')
There apple and banbana

还可以通过获取字典直接传递数据,像这样

>>s=Template(There $a and $b)
>>d={'a':'apple','b':'banbana'}
>>print s.substitute(d)
There apple and banbana

它们之间的差别在于对于参数缺少时的处理方式。

Template的实现方式是首先通过Template初始化一个字符串。这些字符串中包含了一个个key。通过调用substitute或safe_subsititute,将key值与方法中传递过来的参数对应上,从而实现在指定的位置导入字符串。这个方式的一个好处是不用像print ‘%s'之类的方式,各个参数的顺序必须固定,只要key是正确的,值就能正确插入。通过这种方式,在插入很多数据的时候就可以松口气了。可是即使有这样偷懒的方法,依旧不能保证不出错,如果key少输入了一个怎么办呢?

substitute是一个严肃的方法,如果有key没有输入,那就一定会报错。虽然会很难看,但是可以发现问题。

safe_substitute则不会报错,而是将$xxx直接输入到结果字符串中,如

there apple and $b

这样的好处是程序总是对的,不用被一个个错误搞得焦头烂额。

Template可以被继承,它的子类可以进行一些‘个性化'操作...

通过修改delimiter字段可以将$字符改变为其他字符,如“#”,不过新的标示符需要符合正则表达式的规范。

通过修改idpattern可以修改key的命名规则,比如说规定第一个字符开头必须是a,这对规范命名倒是很有好处。当然,这也是通过正则表示实现的。

from string import Template
class MyTemplate(Template):
  delimiter = "#"
  idpattern = "[a][_a-z0-9]*"
def test():
  s='#aa is not #ab'
  t=MyTemplate(s)
  d={'aa':'apple','ab':'banbana'}
  print t.substitute(d)
if __name__=='__main__':
  test()
Python 相关文章推荐
跟老齐学Python之list和str比较
Sep 20 Python
Python的Django框架中的select_related函数对QuerySet 查询的优化
Apr 01 Python
分析Python编程时利用wxPython来支持多线程的方法
Apr 07 Python
Python简单定义与使用字典dict的方法示例
Jul 25 Python
Python语言描述机器学习之Logistic回归算法
Dec 21 Python
python计算两个地址之间的距离方法
Jun 09 Python
Django密码存储策略分析
Jan 09 Python
Python3搭建http服务器的实现代码
Feb 11 Python
解决pycharm中导入自己写的.py函数出错问题
Feb 12 Python
python 实现PIL模块在图片画线写字
May 16 Python
python 实现图像快速替换某种颜色
Jun 04 Python
python中取整数的几种方法
Nov 07 Python
Python基础之函数用法实例详解
Sep 10 #Python
Python迭代用法实例教程
Sep 08 #Python
Python切片用法实例教程
Sep 08 #Python
Python常用模块用法分析
Sep 08 #Python
python实现斐波那契递归函数的方法
Sep 08 #Python
Python内置函数的用法实例教程
Sep 08 #Python
Python中函数的用法实例教程
Sep 08 #Python
You might like
php xfocus防注入资料
2008/04/27 PHP
php实现的一个很好用HTML解析器类可用于采集数据
2013/09/23 PHP
PHP date()格式MySQL中插入datetime方法
2019/01/29 PHP
Laravel基础_关于view共享数据的示例讲解
2019/10/14 PHP
JavaScript 对象、函数和继承
2009/07/07 Javascript
javascript preload&lazy load
2010/05/13 Javascript
在多个页面使用同一个HTML片段的代码
2011/03/04 Javascript
基于jQuery的让非HTML5浏览器支持placeholder属性的代码
2011/05/24 Javascript
HTML页面滚动时获取离页面顶部的距离2种实现方法
2013/09/05 Javascript
Javascript全局变量var与不var的区别深入解析
2013/12/09 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
移除AngularJS下URL中的#字符的方法
2015/06/19 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
jquery实现提示语淡入效果
2017/05/05 jQuery
详解关于react-redux中的connect用法介绍及原理解析
2017/09/11 Javascript
ES7之Async/await的使用详解
2019/03/28 Javascript
微信小程序非跳转式组件授权登录的方法示例
2019/05/22 Javascript
基于PHP pthreads实现多线程代码实例
2020/06/24 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
2020/08/07 Javascript
vue+vant实现购物车全选和反选功能
2020/11/17 Vue.js
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
在Django中URL正则表达式匹配的方法
2018/12/20 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
Python操作redis实例小结【String、Hash、List、Set等】
2019/05/16 Python
在python中,使用scatter绘制散点图的实例
2019/07/03 Python
python生成器用法实例详解
2019/11/22 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
2020/11/19 Python
25个CSS3动画按钮和菜单教程分享
2012/10/03 HTML / CSS
使用纯 CSS 创作一个脉动 loader效果的源码
2018/09/28 HTML / CSS
HTML5之SVG 2D入门7—SVG元素的重用与引用
2013/01/30 HTML / CSS
苹果台湾官网:Apple台湾
2019/01/05 全球购物
投资意向书范本
2014/04/01 职场文书
广告学专业毕业生自荐信
2014/05/28 职场文书
彻底理解golang中什么是nil
2021/04/29 Golang
SSM VUE Axios详解
2021/10/05 Vue.js
Redis全局ID生成器的实现
2022/06/05 Redis