Python 字符串格式化详解

19 篇文章 0 订阅
17 篇文章 4 订阅

在许多编程语言中都包含有格式化字符串的功能,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
  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值