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

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

第一部分:%操作符

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

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

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

图1 格式化字符串转换标记

图2 格式化字符串转换类型

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

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

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

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

import mathitem_name = 'circumference'radius = 3print('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。

图3 .format方式格式化字符串的对齐方式

图4 .format方式格式化字符串符号列表

.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]}'".formatfor 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 formattingprint('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小镇”,发现更多干货知识!

python 字符串%和format_Python必懂知识点,格式化字符串,到底用.format还是%相关推荐

  1. SQL 优化必懂知识点

    本文来自作者 奋斗 在 GitChat 上分享 「SQL 优化必懂知识点」 1. 基数 单个列唯一键(distict_keys)的数量叫做基数.比如性别列,该列只有男女之分,抛开中性,所以这一列基数就 ...

  2. python实现中撤销上一步的代码mac_一个“MacBook”新手的Python“笨办法”自学之旅 #第六章:常用的简易Python命令、符号、代码、格式化字符串...

    第六章:常用的简易Python命令.符号.代码.字符串 <"笨办法"学Python>这本书中,确实用了较多篇幅来介绍Python的一些常用简单的命令.符号.代码和字符串 ...

  3. python中格式化字符串的使用_Python中的格式化字符串

    Python中的格式化字符串方法: 在学习了一段时间的Python之后,回过头来看书的时候,发现Python中最简单的关于格式化输出字符串的方法也有多种,而这并不是类似于茴香豆的"茴&quo ...

  4. 零基础学Python:一文看懂数字和字符串

    来源:大数据DT 本文约2000字,建议阅读6分钟 数据类型是构成编程语言语法的基础. [ 导读 ]数据类型是构成编程语言语法的基础.不同的编程语言有不同的数据类型,但都具有常用的几种数据类型.Pyt ...

  5. c字符串中包含双引号_零基础学Python:一文看懂数字和字符串

    来源:大数据DT 本文约2000字,建议阅读6分钟 数据类型是构成编程语言语法的基础.[ 导读 ]数据类型是构成编程语言语法的基础.不同的编程语言有不同的数据类型,但都具有常用的几种数据类型.Pyth ...

  6. golang 格式化字符串_如何在Go中格式化字符串

    golang 格式化字符串 As strings are often made up of written text, there are many instances when we may wan ...

  7. E站账号cookie分享_产品经理必懂知识点—cookie和session

    作为一个产品经理,如果不了解cookie和session很难设计好产品,尤其对于网站产品经理而言,cookie和session是一个必须要懂的知识点.如果在中大型企业做产品经理,这个cookie和se ...

  8. 干货:Java并发编程必懂知识点解析

    本文大纲 1.并发编程三要素 原子性 原子,即一个不可再被分割的颗粒.在Java中原子性指的是一个或多个操作要么全部执行成功要么全部执行失败. 有序性 程序执行的顺序按照代码的先后顺序执行.(处理器可 ...

  9. B站小迪安全学习笔记第11天-WEB漏洞必懂知识点讲解

    前言: 本章节将讲解各种 WEB 层面上的有那些漏洞类型,具体漏洞 的危害等级,以简要的影响范围测试进行实例分析,思维导图中的漏洞也 是后面我们将要学习到的各个知识点,其中针对漏洞的形成原理,如何发现 ...

最新文章

  1. 如何将风险应用加入白名单_将微信服务器、API接口的IP列表加入宝塔防火墙IP白名单...
  2. 使用userdel命令删除Linux用户
  3. hadoop学习笔记2
  4. BZOJ3387栅栏行动
  5. C++带参数控制台(实例)
  6. Juniper Networks 修复开源操作系统 Junos OS 等中的多个严重漏洞
  7. Java编程实现获取本机IP和计算机名的功能
  8. VINS-Fusion如何高效学习?
  9. 电子元器件/模块供应商汇总
  10. 阿克曼函数实现(Java代码)
  11. IP 防护等级技术白皮书
  12. 大型仿人机器人的技术难点和应用情况
  13. 贪心 C - Kayaking
  14. Tensorflow环境搭建
  15. 波束形成算法学习笔记之一(Endfire,broadside)
  16. 感觉自己不会的东西太多了,不知道如何下手?
  17. 华中科技大学计算机专业期末考试,华中科技大学计算机网络试题
  18. statusBar控件
  19. 用Python爬虫做一个短视频+评论下载小工具
  20. signature=2abb9e363faa3aa7323b2a3393a36011,Winhex软件的使用

热门文章

  1. Notepad++便签模式
  2. 栈的应用——表达式求值(双栈)
  3. 灾备中心服务器辐射,数据中心和灾备中心的相同点以及不同点
  4. php函数实验,PHP函数
  5. python实现希尔排序算法_排序算法总结(冒泡排序、直接插入排序、希尔排序)(python实现)...
  6. kafka消费者分区的分配的三种机制
  7. 聚合中返回source_大数据搜索与可视化分析(9)elasticsearch聚合分析Metric Aggregation...
  8. jQuery左右循环滚动图片特效
  9. Perl中的正则表达式
  10. configure: error: ZLib not installed