详解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中使用PIL模块对图片进行高斯模糊处理的教程
May 05 Python
Python实现针对给定单链表删除指定节点的方法
Apr 12 Python
完美解决Pycharm无法导入包的问题 Unresolved reference
May 18 Python
Python实现求解一元二次方程的方法示例
Jun 20 Python
Python多继承原理与用法示例
Aug 23 Python
Ubuntu+python将nii图像保存成png格式
Jul 18 Python
python函数的万能参数传参详解
Jul 26 Python
学习Django知识点分享
Sep 11 Python
Django Admin后台添加数据库视图过程解析
Apr 01 Python
Ubuntu中配置TensorFlow使用环境的方法
Apr 21 Python
解决Django响应JsonResponse返回json格式数据报错问题
Aug 09 Python
Python实现京东抢秒杀功能
Jan 25 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
地摊中国 - 珍藏老照片
2020/08/18 杂记
php小技巧之过滤ascii控制字符
2014/05/14 PHP
PHP中单引号与双引号的区别分析
2014/08/19 PHP
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
php实现插入排序
2015/03/29 PHP
PHP数组游标实现对数组的各种操作详解
2016/01/26 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
Javascript 面向对象(三)接口代码
2012/05/23 Javascript
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
2013/01/11 Javascript
Jquery获取和修改img的src值的方法
2014/02/17 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
js实现HashTable(哈希表)的实例分析
2016/11/21 Javascript
Vue.use源码分析
2017/04/22 Javascript
各种选择框jQuery的选中方法(实例讲解)
2017/06/27 jQuery
基于JavaScript实现抽奖系统
2018/01/16 Javascript
Vue 父子组件的数据传递、修改和更新方法
2018/03/01 Javascript
详解基于DllPlugin和DllReferencePlugin的webpack构建优化
2018/06/28 Javascript
微信小程序点击保存图片到本机功能
2019/12/13 Javascript
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
python调用短信猫控件实现发短信功能实例
2014/07/04 Python
python的类变量和成员变量用法实例教程
2014/08/25 Python
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
python urllib urlopen()对象方法/代理的补充说明
2017/06/29 Python
运行django项目指定IP和端口的方法
2018/05/14 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
Python实现读取并写入Excel文件过程解析
2020/05/27 Python
15个Pythonic的代码示例(值得收藏)
2020/10/29 Python
python利用pytesseract 实现本地识别图片文字
2020/12/14 Python
艺术设计专业个人求职信范文
2013/12/11 职场文书
会计工作态度自我评价
2015/03/06 职场文书
幼儿园庆六一主持词
2015/06/30 职场文书
2015年社区重阳节活动总结
2015/07/30 职场文书
python绘图subplots函数使用模板的示例代码
2021/04/30 Python
Python函数式编程中itertools模块详解
2021/09/15 Python