Python 字符串格式化详解

在许多编程语言中都包含有格式化字符串的功能,Python中同样有这个功能。刚入门python的同学,特别是,没有系统的学习过python,而是学过别的语言,直接上手python的同学,怕是还不是很了解python强大的字符串格式化方法
下面就介绍Python的三种字符串格式化方法。

1 %格式符

%是内置对字符串进行格式化的格式符,格式化字符串时,python使用一个字符串作为模板。模板中有格式符,这些格式符为真实值预留位置,并说明真实数值应该呈现的格式。Python用一个tuple将多个值传递给模板,每个值对应一个格式符。

print ('hello %s, I am %d year old' % ('Lilei', 6))

结果:

hello Lilei, I am 6 year old

'hello %s, I am %d year old'为我们的模板。%s为第一个格式符,表示一个字符串,%d为第二个格式符,表示一个整数。(Lilei', 6)的两个元素分别替换%s%d的真实值。
在模板和tuple之间,有一个%号分隔,它代表了格式化操作。

整个'hello %s, I am %d year old' % ('Lilei', 6)实际上构成一个字符串表达式。我们可以像一个正常的字符串那样,将它赋值给某个变量。比如:

a='hello %s and %s' % ('Lilei', 'Hanmeimei')
print(a)

2 字典形式

第一种方法最直接方便,但是有时候,我们有很多的参数要进行格式化,这个时候,一个一个一一对应就有点麻烦了,于是就有了第二种,字典形式的,上面那种是tuple形式的。

print("hello %(name)s. I am %(age)d year old" % {'name':'Lilei', 'age':6})

可以看到,我们对两个格式符进行了命名。命名使用()括起来。每个命名对应词典的一个key。
这种字典形式的字符串格式化方法,有一个最大的好处就是,字典这个东西可以和json文件相互转换,所以,当配置文件使用字符串设置的时候,就显得相当方便。

3 str.format()函数

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
基本语法是通过 {} 和 : 来代替以前的 % 。
format 函数可以接受不限个参数,位置可以不按顺序。实例:

>>>"{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
'hello world'
>>> "{0} {1}".format("hello", "world")  # 设置指定位置
'hello world'
>>> "{1} {0} {1}".format("hello", "world")  # 设置指定位置
'world hello world'

这种就像是写一个函数一样,有好处,就是可读性很好,但是笔者还是喜欢第二种。

print("网站名:{name}, 地址 {url}".format(name="Python", url="www.python.com"))
# 通过字典设置参数
site = {"name": "Python", "url": "www.python.com"}
print("网站名:{name}, 地址 {url}".format(**site))
# 通过列表索引设置参数
my_list = ['Python', 'www.python.com']
print("网站名:{0[0]}, 地址 {0[1]}".format(my_list))  # "0" 是必须的

输出结果:

print("网站名:{name}, 地址 {url}".format(name="Python", url="www.python.com"))
# 通过字典设置参数
site = {"name": "Python", "url": "www.python.com"}
print("网站名:{name}, 地址 {url}".format(**site))
# 通过列表索引设置参数
my_list = ['Python', 'www.python.com']
print("网站名:{0[0]}, 地址 {0[1]}".format(my_list))  # "0" 是必须的

也可以向 str.format() 传入对象:

class AssignValue(object):
    def __init__(self, value):
        self.value = value
my_value = AssignValue(6)
print('value 为: {0.value}'.format(my_value))  # "0" 是可选的

结果:

value 为: 6
发布了34 篇原创文章 · 获赞 33 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/menghuanshen/article/details/104252928