详解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当中的字符串和编码
Apr 25 Python
Zabbix实现微信报警功能
Oct 09 Python
python使用opencv按一定间隔截取视频帧
Mar 06 Python
详解Python logging调用Logger.info方法的处理过程
Feb 12 Python
解决import tensorflow as tf 出错的原因
Apr 16 Python
基于Python中random.sample()的替代方案
May 23 Python
keras处理欠拟合和过拟合的实例讲解
May 25 Python
Python API 操作Hadoop hdfs详解
Jun 06 Python
Matplotlib.pyplot 三维绘图的实现示例
Jul 28 Python
浅析Python 序列化与反序列化
Aug 05 Python
粗暴解决CUDA out of memory的问题
May 22 Python
python for循环赋值问题
Jun 03 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中计算时间差的几种方法
2009/12/31 PHP
PHP设计模式之命令模式的深入解析
2013/06/13 PHP
让焦点自动跳转
2006/07/01 Javascript
Web开发之JavaScript
2012/03/29 Javascript
jquery实现图片翻页效果
2013/12/23 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
js父窗口关闭时子窗口随之关闭完美解决方案
2014/04/29 Javascript
jquery text()方法取标签中的文本
2014/07/25 Javascript
jquery的 filter()方法使用教程
2018/03/22 jQuery
简单了解Javscript中兄弟ifream的方法调用
2019/06/17 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
vue实现把接口单独存放在一个文件方式
2020/08/13 Javascript
[37:47]IG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
Python实现求最大公约数及判断素数的方法
2015/05/26 Python
常用python编程模板汇总
2016/02/12 Python
Python使用内置json模块解析json格式数据的方法
2017/07/20 Python
Python语言描述机器学习之Logistic回归算法
2017/12/21 Python
VSCode下配置python调试运行环境的方法
2018/04/06 Python
Python基于pycrypto实现的AES加密和解密算法示例
2018/04/10 Python
基于python requests库中的代理实例讲解
2018/05/07 Python
解决Mac下首次安装pycharm无project interpreter的问题
2018/10/29 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
2019/08/26 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
2020/02/29 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
Python识别验证码的实现示例
2020/09/30 Python
利用CSS3实现单选框动画特效示例代码
2016/09/26 HTML / CSS
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
总裁秘书岗位职责
2013/12/04 职场文书
计算机专业学生的自我评价
2013/12/15 职场文书
设计专业自荐信
2014/06/19 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
公证书
2019/04/17 职场文书
大学毕业生自我鉴定范文
2019/06/21 职场文书
css中z-index: 0和z-index: auto的区别
2021/08/23 HTML / CSS