详解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提取Linux内核源代码的目录结构实现方法
Jun 24 Python
python利用正则表达式排除集合中字符的功能示例
Oct 10 Python
Vue的el-scrollbar实现自定义滚动
May 29 Python
详解Python做一个名片管理系统
Mar 14 Python
Jacobi迭代算法的Python实现详解
Jun 29 Python
python-Web-flask-视图内容和模板知识点西宁街
Aug 23 Python
Python 3.8正式发布重要新功能一览
Oct 17 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
Mar 14 Python
Python如何使用bokeh包和geojson数据绘制地图
Mar 21 Python
python使用pyecharts库画地图数据可视化的实现
Mar 25 Python
python自动计算图像数据集的RGB均值
Jun 18 Python
基于Python实现对比Exce的工具
Apr 07 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生成html分页列表的代码
2007/03/18 PHP
php xfocus防注入资料
2008/04/27 PHP
php中实现用数组妩媚地生成要执行的sql语句
2015/07/10 PHP
PHP session 会话处理函数
2016/06/06 PHP
Yii2中使用asset压缩js,css文件的方法
2016/11/24 PHP
PHP实现git部署的方法教程
2017/12/19 PHP
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
Javascript 面向对象(二)封装代码
2012/05/23 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
2019/11/01 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
2019/11/01 Javascript
使用JS监听键盘按下事件(keydown event)
2019/11/07 Javascript
JS寄快递地址智能解析的实现代码
2020/07/16 Javascript
[01:05:36]VP vs TNC Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
python ElementTree 基本读操作示例
2009/04/09 Python
python sys模块sys.path使用方法示例
2013/12/04 Python
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
详细解析Python中的变量的数据类型
2015/05/13 Python
浅谈function(函数)中的动态参数
2017/04/30 Python
基于循环神经网络(RNN)的古诗生成器
2018/03/26 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
python代码实现TSNE降维数据可视化教程
2020/02/28 Python
Pymysql实现往表中插入数据过程解析
2020/06/02 Python
keras:model.compile损失函数的用法
2020/07/01 Python
python time.strptime格式化实例详解
2021/02/03 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
html5新增的定时器requestAnimationFrame实现进度条功能
2018/12/13 HTML / CSS
Javascript如何发送一个Ajax请求
2015/01/26 面试题
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
大专生自我评价
2014/01/28 职场文书
小学捐书活动总结
2014/07/05 职场文书
2014年护士个人工作总结
2014/11/11 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
汽车销售员工作总结
2015/08/12 职场文书
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电