详解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 相关文章推荐
pycharm 使用心得(六)进行简单的数据库管理
Jun 06 Python
python提示No module named images的解决方法
Sep 29 Python
Python中的字典遍历备忘
Jan 17 Python
python中利用xml.dom模块解析xml的方法教程
May 24 Python
python遍历序列enumerate函数浅析
Oct 17 Python
python使用筛选法计算小于给定数字的所有素数
Mar 19 Python
python实现pdf转换成word/txt纯文本文件
Jun 07 Python
Python pickle模块实现对象序列化
Nov 22 Python
Python实现新型冠状病毒传播模型及预测代码实例
Feb 05 Python
解决Python图形界面中设置尺寸的问题
Mar 05 Python
M1芯片安装python3.9.1的实现
Feb 02 Python
浅谈Python xlwings 读取Excel文件的正确姿势
Feb 26 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中的插件机制原理和实例
2014/07/08 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
2014/08/11 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
php利用嵌套数组拼接与解析json的方法
2017/02/07 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
2019/07/03 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
身份证号码前六位所代表的省,市,区, 以及地区编码下载
2007/04/12 Javascript
document.forms用法示例介绍
2014/06/26 Javascript
jQuery提示插件alertify使用指南
2015/04/21 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
使用javascript插入样式
2016/03/14 Javascript
javascript面向对象程序设计高级特性经典教程(值得收藏)
2016/05/19 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
2016/11/23 Javascript
JS新包管理工具yarn和npm的对比与使用入门
2016/12/09 Javascript
JS+html5 canvas实现的简单绘制折线图效果示例
2017/03/13 Javascript
关于vue v-for循环解决img标签的src动态绑定问题
2018/09/18 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
微信小程序的线程架构【推荐】
2019/05/14 Javascript
javascript实现自由编辑图片代码详解
2019/06/21 Javascript
JavaScript 接口原理与用法实例详解
2020/05/12 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
python冒泡排序算法的实现代码
2013/11/21 Python
python 内置模块详解
2019/01/01 Python
python中web框架的自定义创建
2019/09/08 Python
使用TensorFlow-Slim进行图像分类的实现
2019/12/31 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
2020/04/07 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
Python爬虫入门有哪些基础知识点
2020/06/02 Python
《小熊住山洞》教学反思
2014/02/21 职场文书
建筑专业毕业生自荐信
2014/05/25 职场文书
民主生活会剖析材料
2014/09/30 职场文书
2015年小学中秋节活动总结
2015/03/23 职场文书
介绍信怎么写
2015/05/05 职场文书
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python
CSS 实现角标效果的完整代码
2022/06/28 HTML / CSS