详解Python3 中的字符串格式化语法


Posted in Python onJanuary 15, 2020

一、旧式的字符串格式化

% 操作符

参考以下示例:

>>> name = "Eric"
>>> "Hello, %s." % name
'Hello, Eric.'

当有多个变量需要插入到字符串中时:

>>> name = "Eric"
>>> age = 74
>>> "Hello, %s. You are %s." % (name, age)
'Hello, Eric. You are 74.'

当需要替换的变量进一步增多时,使用 % 操作符格式化字符串会导致代码可读性变得很差:

>>> first_name = "Eric"
>>> last_name = "Idle"
>>> age = 74
>>> profession = "comedian"
>>> affiliation = "Monty Python"
>>> "Hello, %s %s. You are %s. You are a %s. You were a member of %s." % (first_name, last_name, age, profession, affiliation)
'Hello, Eric Idle. You are 74. You are a comedian. You were a member of Monty Python.'

str.format()

str.format() 是对 % 方式的改进,它使用常见的函数调用的语法,并且可以通过定义对象本身的 __format__() 方法控制字符串格式化的具体行为。

基本用法:

>>> name = "Eric"
>>> age = 74
>>> "Hello, {}. You are {}.".format(name, age)
'Hello, Eric. You are 74.'

str.format() 相对于 % 操作符有着更强的灵活性。比如可以通过数字索引来关联替换到字符串中的变量:

>>> name = "Eric"
>>> age = 74
>>> "Hello, {1}. You are {0}.".format(age, name)
'Hello, Eric. You are 74.'

为了提高代码可读性, {} 中也可以使用有具体含义的参数名:

>>> name = "Eric"
>>> age = 74
>>> "Hello, {name}. You are {age}".format(name=name, age=age)
'Hello, Eric. You are 74'

针对字典结构的数据:

>>> person = {'name': 'Eric', 'age': 74}
>>> "Hello, {name}. You are {age}.".format(name=person['name'], age=person['age'])
'Hello, Eric. You are 74.'

或者更简洁的方式:

>>> person = {'name': 'Eric', 'age': 74}
>>> "Hello, {name}. You are {age}.".format(**person)
'Hello, Eric. You are 74.'

问题在于当需要替换的变量很多时, str.format() 方式依然会导致代码变得过于冗长:

>>> first_name = "Eric"
>>> last_name = "Idle"
>>> age = 74
>>> profession = "comedian"
>>> affiliation = "Monty Python"
>>> "Hello, {first_name} {last_name}. You are {age}. \
 You are a {profession}. You were a member of {affiliation}."\
 .format(first_name=first_name, last_name=last_name, age=age, \
 profession=profession, affiliation=affiliation)
'Hello, Eric Idle. You are 74. You are a comedian. You were a member of Monty Python.'

二、f-string

基本用法

>>> name = "Eric"
>>> age = 74
>>> f"Hello, {name}. You are {age}."
'Hello, Eric. You are 74.'

嵌入表达式

>>> f"{2 * 37}"
'74'

>>> def to_lowercase(input):
...  return input.lower()
 
>>> name = "Eric Idle"
>>> f"{to_lowercase(name)} is funny"
'eric idle is funny'

>>> f"{name.lower()} is funny"
'eric idle is funny'

f-string 中还可以直接嵌入某个对象实例,只要其内部实现了 __str__ 或者 __repr__ 方法:

class Comedian:
 def __init__(self, first_name, last_name, age):
  self.first_name = first_name
  self.last_name = last_name
  self.age = age

 def __str__(self):
  return f"{self.first_name} {self.last_name} is {self.age}"


new_comedian = Comedian("Eric", "Idle", 74)
print(f"{new_comedian}")
# Eric Idle is 74
多行 f-string
>>> name = "Eric"
>>> profession = "comedian"
>>> affiliation = "Monty Python"
>>> message = (
...  f"Hi {name}. "
...  f"You are a {profession}. "
...  f"You were in {affiliation}."
... )
>>> message
'Hi Eric. You are a comedian. You were in Monty Python.'

总结

以上所述是小编给大家介绍的Python3 中的字符串格式化语法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python的垃圾回收机制深入分析
Jul 16 Python
python中list列表的高级函数
May 17 Python
Python实现图片转字符画的示例
Aug 22 Python
Python读取视频的两种方法(imageio和cv2)
Apr 15 Python
Python numpy实现二维数组和一维数组拼接的方法
Jun 05 Python
python 用下标截取字符串的实例
Dec 25 Python
pandas 数据结构之Series的使用方法
Jun 21 Python
python中字典按键或键值排序的实现代码
Aug 27 Python
Python模块的制作方法实例分析
Dec 21 Python
Python中的特殊方法以及应用详解
Sep 20 Python
如何让PyQt5中QWebEngineView与JavaScript交互
Oct 21 Python
python神经网络Xception模型
May 06 Python
用pytorch的nn.Module构造简单全链接层实例
Jan 14 #Python
pytorch三层全连接层实现手写字母识别方式
Jan 14 #Python
Python实现bilibili时间长度查询的示例代码
Jan 14 #Python
基于python监控程序是否关闭
Jan 14 #Python
关于pytorch中全连接神经网络搭建两种模式详解
Jan 14 #Python
使用Pytorch来拟合函数方式
Jan 14 #Python
pytorch 模拟关系拟合——回归实例
Jan 14 #Python
You might like
apache配置虚拟主机的方法详解
2013/06/17 PHP
PHP获取MSN好友列表类的实现代码
2013/06/23 PHP
CI框架给视图添加动态数据
2014/12/01 PHP
PHP自动生成表单代码分享
2015/06/19 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
2016/04/04 PHP
jquery实现的树形目录实例
2015/06/26 Javascript
jquery动感漂浮导航菜单代码分享
2020/04/15 Javascript
node.js实现端口转发
2016/04/14 Javascript
Angular.js回顾ng-app和ng-model使用技巧
2016/04/26 Javascript
jQuery页面加载初始化的3种方法(推荐)
2016/06/02 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
2016/06/12 Javascript
JS封装的自动创建表格的实现代码
2016/06/15 Javascript
JavaScript数据结构之二叉树的遍历算法示例
2017/04/13 Javascript
js+html5实现页面可刷新的倒计时效果
2017/07/15 Javascript
关于HTML5的data-*自定义属性的总结
2018/05/05 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
JS前端知识点总结之内置对象,日期对象和定时器相关操作
2019/07/05 Javascript
Jquery属性的获取/设置及样式添加/删除操作技巧分析
2019/12/23 jQuery
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
[07:03]显微镜下的DOTA2第九期——430圣堂刺客杀戮秀
2014/06/20 DOTA
python中for用来遍历range函数的方法
2018/06/08 Python
Sanic框架路由用法实例分析
2018/07/16 Python
python读取Kafka实例
2019/12/23 Python
Python单元测试模块doctest的具体使用
2020/02/10 Python
Django使用list对单个或者多个字段求values值实例
2020/03/31 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
德国家具、照明、家居用品网上商店:Wayfair.de
2020/02/13 全球购物
通息工程毕业生自荐信
2013/10/16 职场文书
大学生军训自我鉴定范文
2014/09/18 职场文书
会议开幕词
2015/01/28 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
2015年惩防体系建设工作总结
2015/05/22 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
初中地理教学反思
2016/02/19 职场文书
Java获取字符串编码格式实现思路
2022/09/23 Java/Android