您的位置:首页 > 编程语言 > Python开发

python 格式化 字符串 操作符(%)

2016-11-11 10:22 281 查看


格式化操作符(%)

“%”是Python风格的字符串格式化操作符,非常类似C语言里的printf()函数的字符串格式化(C语言中也是使用%)。

下面整理了一下Python中字符串格式化符合:
格式化符号说明
%c转换成字符(ASCII 码值,或者长度为一的字符串)
%r优先用repr()函数进行字符串转换
%s优先用str()函数进行字符串转换
%d / %i转成有符号十进制数
%u转成无符号十进制数
%o转成无符号八进制数
%x / %X转成无符号十六进制数(x / X 代表转换后的十六进制字符的大小写)
%e / %E转成科学计数法(e / E控制输出e / E)
%f / %F转成浮点数(小数部分自然截断)
%g / %G%e和%f / %E和%F 的简写
%%输出% (格式化字符串里面包括百分号,那么必须使用%%)
这里列出的格式化符合都比较简单,唯一想要强调一下的就是”%s”和”%r”的差别。

看个简单的代码:

Python

1234string = "Hello\tWill\n" print "%s" %stringprint "%r" %string
代码的输出为:

其实,这里的差异是str()和repr()两个内建函数之间的差异:str()得到的字符串是面向用户的,具有较好的可读性
repr()得到的字符串是面向机器的通常(不是所有)repr()得到的效果是:obj == eval(repr(obj))

格式化操作符辅助符

通过”%”可以进行字符串格式化,但是”%”经常会结合下面的辅助符一起使用。
辅助符号说明
*定义宽度或者小数点精度
用做左对齐
+在正数前面显示加号(+)
#在八进制数前面显示零(0),在十六进制前面显示”0x”或者”0X”(取决于用的是”x”还是”X”)
0显示的数字前面填充”0″而不是默认的空格
(var)映射变量(通常用来处理字段类型的参数)
m.nm 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)
看一些简单的 例子:Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

num
=
100

print
"%d to hex is %x"
%(num,
num)

print
"%d to hex is %X"
%(num,
num)

print
"%d to hex is %#x"
%(num,
num)

print
"%d to hex is %#X"
%(num,
num)

#
浮点数

f
=
3.1415926

print
"value of f is: %.4f"
%f

#
指定宽度和对齐

students
=
[{"name":"Wilber",
"age":27},
{"name":"Will",
"age":28},
{"name":"June",
"age":27}]

print
"name: %10s, age: %10d"
%(students[0]["name"],
students[0]["age"])

print
"name: %-10s, age: %-10d"
%(students[1]["name"],
students[1]["age"])

print
"name: %*s, age: %0*d"
%(10,
students[2]["name"],
10,
students[2]["age"])

#
dict参数

for
student
in
students:

print
"%(name)s is %(age)d years
old"
%student

代码输出为:



对于Python的格式化操作符,不仅可以接受tuple类型的参数,也可以支持dict,象上面代码的最后一部分,那么格式化字符串中就可以直接使用”%(key)s”(这里的s根据具体类型改变)的方式表示dict中对应的value了。


字符串模板

其实,在Python中进行字符串的格式化,除了格式化操作符,还可以使用string模块中的字符串模板(Template)对象。下面就主要看看Template对象的substitute()方法:

Python

1234567891011from string import Template s = Template("Hi, $name! $name is learning $language")print s.substitute(name="Wilber", language="Python") d = {"name": "Will", "language": "C#"}print s.substitute(d) # 用<img src="http://python.jobbole.com/wp-content/plugins/latex/cache/tex_3383d38aac0ec2dec66451cd0864eabe.gif" class="tex" alt="??$??s = Template("This book ($bname) is 17" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: