详解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中的生成器和yield详细介绍
Jan 09 Python
Python中几个比较常见的名词解释
Jul 04 Python
python基于phantomjs实现导入图片
May 13 Python
python中requests小技巧
May 10 Python
Python 实现淘宝秒杀的示例代码
Jan 02 Python
python去除扩展名的实例讲解
Apr 23 Python
详解Python发送email的三种方式
Oct 18 Python
python3射线法判断点是否在多边形内
Jun 28 Python
python 默认参数相关知识详解
Sep 18 Python
Python爬虫获取页面所有URL链接过程详解
Jun 04 Python
最新Python idle下载、安装与使用教程图文详解
Nov 28 Python
pytorch 两个GPU同时训练的解决方案
Jun 01 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加密解密的代码
2007/07/16 PHP
基于PHP5魔术常量与魔术方法的详解
2013/06/13 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
2015/02/03 PHP
php函数连续调用实例分析
2015/07/30 PHP
JavaScript 学习笔记(十一)
2010/01/19 Javascript
jquery 新浪网易的评论块制作
2010/07/01 Javascript
JavaScript中this的使用详解
2013/11/08 Javascript
利用window.name实现windowStorage代码分享
2014/01/02 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
javascript使用appendChild追加节点实例
2015/01/12 Javascript
jQuery实现渐变下拉菜单的简单方法
2015/03/11 Javascript
Javascript中实现String.startsWith和endsWith方法
2015/06/10 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
微信小程序 toast 详解及实例代码
2016/11/09 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
js实现自动图片轮播代码
2017/03/22 Javascript
移动端使用localResizeIMG4压缩图片
2017/04/22 Javascript
微信小程序实现人脸识别
2018/05/25 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
解决win64 Python下安装PIL出错问题(图解)
2018/09/03 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
python批量修改图片尺寸,并保存指定路径的实现方法
2019/07/04 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
浅析Python __name__ 是什么
2020/07/07 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
2020/08/27 Python
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
Java中compareTo和compare的区别
2016/04/12 面试题
杭州龙健科技笔试题.net部分笔试题
2016/01/24 面试题
预备党员党校学习自我评价分享
2013/11/12 职场文书
车间安全生产标语
2014/06/06 职场文书
新闻编辑专业自荐信
2014/07/02 职场文书
演讲稿的格式及范文
2014/08/22 职场文书
python实现调用摄像头并拍照发邮箱
2021/04/27 Python
解决go在函数退出后子协程的退出问题
2021/04/30 Golang
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
2022/06/28 Oracle