百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python必懂知识点,格式化字符串,到底用.format还是%

off999 2024-09-18 22:36 44 浏览 0 评论

第一次听说格式化,是清理电脑磁盘时,以为格式化就是清空一切,重回自由,后来才知道,格式化,是另一种妥协。


以下部分节选自《编写高质量代码:改善Python程序的91个建议》一书,需要该书电子版的可以私我。


第一部分:%操作符

%操作符根据转换说明符所规定的格式返回一串格式化后的字符串,转换说明符的基本形式为:

%[转换标记][宽度[.精确度]]转换类型

其中常见的转换标记和转换类型分别如图1和图2所示。如果未指定宽度,则默认输出为字符串本身的宽度。


%操作符格式化字符串时常见用法:

1)直接格式化字符或者数值。

print('your sorce is %06.1f' % 9.5)
# your sorce is 0009.5


2)以元组的形式格式化。

import math
item_name = 'circumference'
radius = 3
print('the %s of a circle with radius %f is %0.3f' % (item_name, radius, math.pi*radius*2))
# the circumference of a circle with radius 3.000000 is 18.850


3)以字典的形式格式化。

item_dict = {'itemname': 'circumference', 'radius': 3, 'value': math.pi*radius*2}
print('the %(itemname)s of a circle with radius %(radius)f is %(value)0.3f' % item_dict)
# the circumference of a circle with radius 3.000000 is 18.850


第二部分:.format方法

.format方式格式化字符串的基本语法:

[[填充符]对齐方式][符号][#][0][宽度][,][.精确度][转换类型]。

其中填充符可以是除了“{”和“}”符号之外的任意符号,对齐方式和符号分别如图3和图4所示。转换类型跟%操作符的转换类型类似,可以参见图2。



.format方法几种常见的用法如下:

1)使用位置符号。

print('The number {0:,} in hex is: {0: #x}, the number {1} in oct is {1:#o}'.format(4746,45))
# The number 4,746 in hex is:  0x128a, the number 45 in oct is 0o55

其中{0}表示forma方法中对应的第一个参数,{1}表示format方法对应的第二个参数,依次递推


2)使用名称。

print('the max number is {max}, the min number is {min}, the average number is {average:0.3f}'.format(max=189, min=12.6, average=23.5))
# the max number is 189, the min number is 12.6, the average number is 23.500


3)通过属性。

class Customer(object):
    def __init__(self, name, gender, phone):
        self.name = name
        self.gender = gender
        self.phone = phone
    # 通过str()函数返回格式化的结果
    def __str__(self):
        return 'Customer({self.name},{self.gender},{self.phone})'.format(self=self)

print(str(Customer('Lisa','Female','67889')))
# Customer(Lisa,Female,67889)


4)格式化元组的具体项。

point=(1,3)
print('X:{0[0]};Y:{0[1]}'.format(point))
# X:1;Y:3


第三部分:结论

在了解了两种字符串格式的基本用法后,我们发现还是要尽量使用format方式而不是%操作符来格式化字符串。

理由一:format方式在使用上较%操作符更为灵活。使用format方式时,参数的顺序与格式化的顺序不必完全相同。如:

print('The number {1} in hex is:{1:#x}, the number {0} in oct is {0:#o}'.format(4746,45))
# The number 45 in hex is:0x2d, the number 4746 in oct is 0o11212

上例中格式化的顺序为{1},{0},其对应的参数申明的顺序却相反,{1}与45对应,而用%方法需要使用字典形式才能达到同样的目的。


理由二:format方式可以方便地作为参数传递。

weather = [('Monday','rain'),('Tuesday','sunny'),('Wednesday','sunny'),('Thursday','rain'),('Friday','cloudy')]
formatter = "Weather of '{0[0]}' is '{0[1]}'".format
for item in map(formatter, weather):
    print(item)
#Weather of 'Monday' is 'rain'
Weather of 'Tuesday' is 'sunny'
Weather of 'Wednesday' is 'sunny'
Weather of 'Thursday' is 'rain'
Weather of 'Friday' is 'cloudy'


理由三:%最终会被.format方式所代替。这个理由可以认为是最直接的原因,在Python3.0中.format方法是推荐使用的方法,而之所以仍然保留%操作符是为了保持向后兼容。


理由四:%方法在某些特殊情况下使用时需要特别小心。

item_name = ('mouse', 'mobilephone','cup')
print('item_list are %s'%(item_name))  # 使用%方法格式化元组
# TypeError: not all arguments converted during string formatting

print('item_list are %s'%(item_name,))  # 注意后面的逗号
# item_list are ('mouse', 'mobilephone', 'cup')

print('item_list are {}'.format(item_name))  # 使用format方法直接格式化不会抛出异常
# item_list are ('mouse', 'mobilephone', 'cup')

该例子本意是把item_name看做一个整体来进行格式化,但直接使用时却抛出TypeError,对于%直接格式化字符的这种形式,如果字符本身为元组,则需要使用在%使用(item_name,)这种形式才能避免错误,注意逗号。


关注微信公众号“Python小镇”,发现更多干货知识!

相关推荐

wps下载电脑版官方下载(wps下载电脑版官方下载官网)
  • wps下载电脑版官方下载(wps下载电脑版官方下载官网)
  • wps下载电脑版官方下载(wps下载电脑版官方下载官网)
  • wps下载电脑版官方下载(wps下载电脑版官方下载官网)
  • wps下载电脑版官方下载(wps下载电脑版官方下载官网)
免费的word转pdf转换器(免费word转pdf网站)

有些转换器是需要的呢。但我用的“sanpdf”是不收费。可以尝试。迅捷pdf编辑器转换word的方法如下:1、安装迅捷pdf编辑器软件,在电脑桌面双击快捷方式打开软件。2、在界面上方的菜单栏中点击“p...

单机象棋(单机版)(单机象棋(单机版)无需网络3.9.0版本)

象棋旋风、象棋名手、兵河五四等最顶尖象棋软件,都是单机游戏,还可以连线任何象棋网站下棋,棋力超强人类无法超越,别说什么国家大师、特级大师在软件面前都是小儿科!够厉害了吧棋友们可以关注我每天主页大量象...

怎么下载word2003免费版(如何下载安装word2003)

单击格式工具栏右边第二个的“设计”按钮,在任务窗格里选。任务窗格最后还有一个“MicrosoftOfficeOnline设计模板”,点击可上网下载。

姑娘视频在线观看中国电影(姑娘视频官网下载)

小马宝莉观看顺序如下:1、《小马宝莉第一季》2、《小马宝莉第二季》3、《小马宝莉第三季》4、《小马国女孩1》5、《小马宝莉第四季》6、《小马国女孩2》7、《小马宝莉第五季》8、《小马国女孩3》9、《小...

程序员一般要学多久(程序员的前景和未来)

1 培养兴趣兴趣是能够让人坚持下去的动力。多关心一些行业趣事,多想想盖茨。不是提倡天天做白日梦,但人要是没有了梦想,觉得有味道吗?可能像许多深圳本地农民一样,打打麻将,喝喝功夫茶,拜拜财神爷;每个月就...

cad制图软件电脑版(cad制图软件pc版)
cad制图软件电脑版(cad制图软件pc版)

1.浏览器打开CAD官网,选择菜单栏上的产品点击下方的autoCAD.2.点击下载免费试用版3.商业里点AutoCAD,点下一步。4.点击安装下面的下载即可。1、在搜索引擎中输入cad安装包并点击搜索,选择一款安装包进行下载。2、将下载的c...

2026-01-31 14:43 off999

一起学网校(一起学网校赵越老师个人资料)

一起学和一起学网校是同一个品牌的不同产品。一起学是一个在线教育平台,提供各种学习资源和课程,包括一对一辅导、视频课程等。而一起学网校是一起学平台下的一个子品牌,专注于提供在线学习班和课程,通过直播和互...

电视直播大全在线观看(电视直播大全_网络电视在线观看)

要观看CCTV直播,您可以按照以下几种方法进行操作:1.通过有线电视:如果您有有线电视服务,您可以直接打开电视机,转到CCTV频道,然后选择您想要观看的直播节目。2.通过卫星电视:如果您拥有卫星电...

免费的格式转换器软件(免费格式转换app推荐)

软件一:迅捷音频转换器一款专业的音频编辑工具,拥有音频剪切、音频提取、音频转换等多种功能,能够用多种分割方式进行音频剪切,而且支持批量操作,功能强大,操作简单,绝对是一款不容错过的软件。软件特色1、多...

pubg加速器(Pubg加速器)

现在加速吃鸡的游戏加速器是有专线路线的比较好,专线的稳定很多,不过目前是没有完全免费的加速软件,很多都可以先体验,注册就可以体验的,可以多去体验几款,对比一下。目前的加速器可以分为三个等级第一等级:全...

无限金币无限钻石版游戏大全下载

不能下载,奥特曼无限钻石无限金币是不能进行下载的。我们在进行奥特曼游戏的时候,无限钻石金币这种情况下是使用外挂进行达成的正版游戏,并没有公布这个功能,所以是无法进行下载的,我们还是要支持正版游戏。要下...

手游排行(手游排行榜第一名)
手游排行(手游排行榜第一名)

手机游戏排行榜前十的有:《王者荣耀》、《绝地求生:全军出击》、《荒野行动》、《剑侠》、《4D极速沙滩赛车》、《红色坦克4D》、《镇魔》、《坦克前线帝国》、《舰指太平洋》、《红警天启的狂怒》。1、《王者荣耀》《王者荣耀》已经出了几十位英雄,定...

2026-01-31 13:03 off999

windows11系统下载(windows11下载安装教程)

首先,确保你的电脑符合Windows11的系统要求。然后,前往微软官网下载Windows11安装助手,运行该助手并按照提示进行操作。如果你的设备已经运行Windows10,你可能可以通过Windows...

线上教育平台(安徽省免费线上教育平台)

疫情以来,最火的一个词大概就是线上教学了,那么它到底有什么优势呢1.开展方式便利化,受到的环境局限小。网课,也就是通过网络开展,无论你身处何地,即使是足不出户也能进行自我学习,不需要像实体课堂一样来回...

取消回复欢迎 发表评论: