详解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 条件判断的缩写方法
Sep 06 Python
python插入排序算法实例分析
Jul 03 Python
Python实现的本地文件搜索功能示例【测试可用】
May 30 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 Python
详解python 爬取12306验证码
May 10 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
May 16 Python
Python生成个性签名图片获取GUI过程解析
Dec 16 Python
详解Python Opencv和PIL读取图像文件的差别
Dec 27 Python
使用Python+selenium实现第一个自动化测试脚本
Mar 17 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
Feb 01 Python
matplotlib交互式数据光标mpldatacursor的实现
Feb 03 Python
Python  序列化反序列化和异常处理的问题小结
Dec 24 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
PHP编程与应用
2006/10/09 PHP
php简单实现无限分类树形列表的方法
2015/03/27 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
2019/09/12 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
用jQuery技术实现Tab页界面之二
2009/09/21 Javascript
基于jquery的direction图片渐变动画效果
2010/05/24 Javascript
juqery 学习之五 文档处理 包裹、替换、删除、复制
2011/02/11 Javascript
Jquery submit()无法提交问题
2013/04/21 Javascript
js中array的sort()方法使用介绍
2014/02/20 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
2015/03/04 Javascript
javascript中hasOwnProperty() 方法使用指南
2015/03/09 Javascript
js去字符串前后空格的实现方法
2016/02/26 Javascript
javascript 中null和undefined区分和比较
2017/04/19 Javascript
js实现鼠标拖拽多选功能示例
2017/08/01 Javascript
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
vue 优化CDN加速的方法示例
2018/09/19 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
微信小程序实现转盘抽奖
2020/09/21 Javascript
[01:25]2014DOTA2国际邀请赛 zhou分析LGD比赛情况
2014/07/14 DOTA
[01:00:04]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第二局
2016/02/26 DOTA
[02:38]DOTA2 夜魇暗潮2020活动介绍官方视频
2020/11/04 DOTA
python类继承与子类实例初始化用法分析
2015/04/17 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
python抓取网页中链接的静态图片
2018/01/29 Python
pandas DataFrame 行列索引及值的获取的方法
2019/07/02 Python
Python数据可视化:饼状图的实例讲解
2019/12/07 Python
python中的逆序遍历实例
2019/12/25 Python
基于Tensorflow的MNIST手写数字识别分类
2020/06/17 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
2020/07/07 Python
中专毕业生自荐信
2013/11/16 职场文书
小学音乐教学反思
2014/02/05 职场文书
公司投资建议书
2014/05/16 职场文书
校运动会广播稿300字
2014/10/07 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书