详解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中文件遍历的两种方法
Jun 16 Python
Python实现基本线性数据结构
Aug 22 Python
python机器学习实战之K均值聚类
Dec 20 Python
Python3使用pandas模块读写excel操作示例
Jul 03 Python
Python爬虫框架Scrapy基本用法入门教程
Jul 26 Python
Python中几种属性访问的区别与用法详解
Oct 10 Python
Python 给屏幕打印信息加上颜色的实现方法
Apr 24 Python
基于python实现高速视频传输程序
May 05 Python
Python正则表达式匹配和提取IP地址
Jun 06 Python
Python Django 页面上展示固定的页码数实现代码
Aug 21 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
Dec 17 Python
解决Django Haystack全文检索为空的问题
May 19 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+mysql)
2007/11/23 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
PHP+Ajax验证码验证用户登录
2016/07/20 PHP
JavaScript-世界上误解最深的语言分析
2007/08/12 Javascript
Javascript客户端将指定区域导出到Word、Excel的代码
2008/10/22 Javascript
使用jQuery模板来展现json数据的代码
2010/10/22 Javascript
利用js实现遮罩以及弹出可移动登录窗口
2013/07/08 Javascript
使用纯javascript实现经典扫雷游戏
2015/04/23 Javascript
javascript实现二级级联菜单的简单制作
2015/11/19 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
chrome浏览器如何断点调试异步加载的JS
2016/09/05 Javascript
详解nodeJS中读写文件方法的区别
2017/03/06 NodeJs
深入浅析Vue.js计算属性和侦听器
2018/05/05 Javascript
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
微信小程序tabBar设置实例解析
2019/11/14 Javascript
vue实现移动端项目多行文本溢出省略
2020/07/29 Javascript
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
[15:41]教你分分钟做大人——灰烬之灵
2015/03/11 DOTA
python进阶教程之循环对象
2014/08/30 Python
更改Python命令行交互提示符的方法
2015/01/14 Python
Python中类型检查的详细介绍
2017/02/13 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
浅谈tensorflow中几个随机函数的用法
2018/07/27 Python
Python I/O与进程的详细讲解
2019/03/08 Python
在keras 中获取张量 tensor 的维度大小实例
2020/06/10 Python
Spring http服务远程调用实现过程解析
2020/06/11 Python
CSS3 制作旋转的大风车(充满童年回忆)
2013/01/30 HTML / CSS
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
应届生高等护理求职信
2013/10/12 职场文书
学校运动会开幕演讲稿
2014/01/04 职场文书
民间借贷借条如何写
2015/05/26 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
企业财务管理制度范本
2015/08/04 职场文书
幼儿园家长心得体会
2016/01/21 职场文书
2016年情人节广告语
2016/01/28 职场文书
关于Redis的主从复制及哨兵问题
2022/06/16 Redis