3.1.4 模板字符串

原创 2015年07月11日 08:16:51

在字符串中进行字符串替换,一般是使用%s来格式化解决,但这种格式化使用起来比较复杂,并且即使是熟悉的开发人员使用起来也容易出错。为了解决这些问题,在字符串库里提供一个模板类。具体情况可以参考PEP 292文档。模板类字符串主要使用$开头的替换字符串来代替%开头的字符串。

替换字符串的规则如下:

l $$,用两个$来表示一个$字符输出。

l $identifier,用$加标识符方式来识别替换串位置和键值。其中identifier就是函数里键值对的键。

l ${identifier},当替换的字符串后面紧跟着字符串时,就需要使用大括号来分隔开,以便可以识别出来键值对的键出来。比如${identifier}abc,由于abc之前紧跟着替换的字符串。

当在替换的过程中,遇到$开头的字符串不能替换时,就会抛出ValueError异常。

class string.Template(template)

构造函数用来构造一个可替换的模板字符串。

 

substitute(mapping, **kwds)

本函数用来实现对模板字符串中占位字符串进行替换,返回一个新的字符串。参数 mapping 是可以输入字典类的对象;参数kwds是可以输入键值对的对象。在字符串中 替换的字符串的名称与字典中键名称一样,或者与键值对的键名称一样。

 

safe_substitute(mapping, **kwds)

本函数参数和功能与上面substitute函数是一样的,唯一的区别是当找查找替换字符串 时,当未发现有相应的替换字符串,在substitute函数中会抛出异常ValueErrorKeyError 不能继续替换;而在safe_substitute函数会不会抛出异常,但可以继续输出,替换的字 符串不作任何改变。

 

例子:

#Template

 

from string import Template

 

s = Template('$$ $who like apple')

print(s.substitute(who='Tom'))

 

s = Template('$$ ${who}abc:$who like apple')

print(s.substitute(who='Tom'))

print(s.safe_substitute())

结果输出如下:

$ Tom like apple

$ Tomabc:Tom like apple

$ ${who}abc:$who like apple

 

3.1.5 字符串辅助函数

string.capwords(s, sep=None)

本函数使用str.split()函数来分拆参数s字符串,然后使用str.capitalize()函数进行格式化,把子串变成首字母大写其余字母小写的格式,最后使用str.join()把格式化后的子串进行连接到一起;连接时,如果参数sep等于None或者没有给出,默认使用一个空格作为分隔子串识别符和输出符;反之给出时,就以给出的字母作为分隔符识别和输出。

 

例子:

 

import string

s = 'abc face CHINA            shenzhen'

print(string.capwords(s))

 

s = 'The quick brown fox jumped over the lazy dog.'

print(string.capwords(s))

 

print(string.capwords('abc #abc#test  #dog', sep = '#'))

输出结果如下:

Abc Face China Shenzhen

The Quick Brown Fox Jumped Over The Lazy Dog.

Abc #Abc#Test  #Dog

 

 


蔡军生 QQ:9073204  深圳

版权声明:本文为博主原创文章,未经博主允许不得转载。

es6 javascript的``模板字符串

正常使用js的数据放入页面的时候需要自己手动拼接字符串的,现在es6提供了一种模板字符串解决了这个问题 模板字符串( template string )是增强版的字符串,用反引号( ` )标识。它可以...
  • qq_30100043
  • qq_30100043
  • 2016年11月16日 16:39
  • 1756

Java字符串模版

Java字符串模版
  • LittleSkey
  • LittleSkey
  • 2016年12月08日 13:28
  • 752

字符串常量作为模板参数的陷阱

当我们需要写一个简单的模板函数来进行比较任意类型的两个元素大小时,我们很可能会得到下面的代码: template inline const T& max(const T& a, const T& ...
  • Kexiii
  • Kexiii
  • 2017年02月20日 20:07
  • 202

字符串模板和dom模板的区别

dom模板就是原先就写在页面上的,能被浏览器识别的 html 结构,会在一加载就被浏览器渲染,所以要遵循 html 结构和标签命名,不然是不会被浏览器解析的,也就获取不到内容了,接着js获取 dom ...
  • m0_37479246
  • m0_37479246
  • 2017年12月25日 16:22
  • 46

x-template:一个简单高效的字符串模板引擎

$template 字符串模板库 $template是一个简单高效的字符串模板引擎,有关解析表达式的部分参考了ng里的$parse服务. 源码地址,x-template 命令安装...
  • u013510614
  • u013510614
  • 2016年02月20日 10:09
  • 578

深入浅出ES6(四):模板字符串

反撇号(`)基础知识 ES6引入了一种新型的字符串字面量语法,我们称之为模板字符串(template strings)。除了使用反撇号字符 ` 代替普通字符串的引号 ' 或 " 外,它们看起来与普通字...
  • lgh1117
  • lgh1117
  • 2016年04月28日 23:00
  • 904

Python的string模块中的Template类字符串模板用法

Python的string模块中的Template类字符串模板用法
  • ppdyhappy
  • ppdyhappy
  • 2016年10月27日 11:27
  • 2005

ThinkPHP 模板substr的截取字符串函数

ThinkPHP内置了一个可以媲美smarty的模板引擎,给我们带来了很大的方便。调用函数也一样,可以和smarty一样调用自己需要的函数,而官方也内置了一些常用的函数供大家调用。 比如今天我们...
  • u014796999
  • u014796999
  • 2016年10月10日 14:35
  • 1169

Velocity 读取字符串模板生成代码

之前使用 freeMarker 开发 cms系统,生成html。 后来页面不用jsp,开发了,换成velocity展示了。 想着生成页面也使用velocity。 但是发现读取文件的类库加载不进来。...
  • freewebsys
  • freewebsys
  • 2015年10月26日 19:03
  • 4109

操作系统图形界面发展史(1981-2009)

PC机上的第一个图形界面——Xerox Alto(该系统并未商用,主要用于研究和大学),其于1973年被施乐公司Xerox Palo Alto Research Center (PARC)所 设计...
  • zxxSsdsd
  • zxxSsdsd
  • 2014年03月26日 14:23
  • 499
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:3.1.4 模板字符串
举报原因:
原因补充:

(最多只允许输入30个字)