详解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中无限元素列表的实现方法
Aug 18 Python
一些Python中的二维数组的操作方法
May 02 Python
深入浅析Python中join 和 split详解(推荐)
Jun 30 Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 Python
python消费kafka数据批量插入到es的方法
Dec 27 Python
Python告诉你木马程序的键盘记录原理
Feb 02 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
Mar 26 Python
新手如何发布Python项目开源包过程详解
Jul 11 Python
Python socket非阻塞模块应用示例
Sep 12 Python
Python Sympy计算梯度、散度和旋度的实例
Dec 06 Python
python访问hdfs的操作
Jun 06 Python
Pytorch 中的optimizer使用说明
Mar 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制作静态网站的模板框架
2006/10/09 PHP
php实现模拟post请求用法实例
2015/07/11 PHP
PHP目录操作实例总结
2016/09/27 PHP
php下载文件超时时间的设置方法
2016/10/06 PHP
新浪刚打开页面出来的全屏广告代码
2007/04/02 Javascript
JavaScript创建命名空间(namespace)的最简实现
2007/12/11 Javascript
javascript css float属性的特殊写法
2008/11/13 Javascript
javascript仿php的print_r函数输出json数据
2013/09/13 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
2020/09/01 Javascript
全面解析node 表单的图片上传
2016/11/21 Javascript
JS去除字符串中空格的方法
2017/02/14 Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
2017/04/13 jQuery
Centos6.8下Node.js安装教程
2017/05/12 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
Vue学习之路之登录注册实例代码
2017/07/06 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
js实现树形数据转成扁平数据的方法示例
2020/02/27 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
python 编程之twisted详解及简单实例
2017/01/28 Python
python+matplotlib绘制旋转椭圆实例代码
2018/01/12 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
python matplotlib实现将图例放在图外
2020/04/17 Python
解决python 输出到csv 出现多空行的情况
2021/03/24 Python
师范应届生求职信
2013/11/15 职场文书
高校自主招生自荐信
2013/12/09 职场文书
庆八一活动方案
2014/01/25 职场文书
2014年志愿者工作总结
2014/11/20 职场文书
高三毕业评语
2014/12/31 职场文书
幼儿园感恩节活动总结
2015/03/24 职场文书
2015年学校办公室主任工作总结
2015/07/20 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
如何撰写出一份完美的商业计划书?
2019/07/12 职场文书
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL