详解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 相关文章推荐
详解Django中Request对象的相关用法
Jul 17 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
Aug 31 Python
Python方法的延迟加载的示例代码
Dec 18 Python
python获取代理IP的实例分享
May 07 Python
深入浅析Python传值与传址
Jul 10 Python
Numpy截取指定范围内的数据方法
Nov 14 Python
Python 处理图片像素点的实例
Jan 08 Python
详解Python 解压缩文件
Apr 09 Python
python整合ffmpeg实现视频文件的批量转换
May 31 Python
Django 开发环境与生产环境的区分详解
Jul 26 Python
Python 判断时间是否在时间区间内的实例
May 16 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
Jan 06 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中的string类型使用说明
2010/07/27 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
用javascript实现的支持lrc歌词的播放器
2007/05/17 Javascript
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
原生javascript实现图片弹窗交互效果
2015/01/12 Javascript
javascript中Date()函数在各浏览器中的显示效果
2015/06/18 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
2016/07/10 Javascript
jQuery实现限制文本框的输入长度
2017/01/11 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
微信小程序实现消息框弹出动画
2020/04/18 Javascript
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
vue新建项目并配置标准路由过程解析
2019/12/09 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
python函数缺省值与引用学习笔记分享
2013/02/10 Python
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
深入解析Python中的list列表及其切片和迭代操作
2016/03/13 Python
Python pass详细介绍及实例代码
2016/11/24 Python
python实现批量注册网站用户的示例
2019/02/22 Python
python实现AES加密与解密
2019/03/28 Python
Python按照list dict key进行排序过程解析
2020/04/04 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
2021/01/05 Python
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
2017/01/05 HTML / CSS
Big Green Smile德国网上商店:提供各种天然产品
2018/05/23 全球购物
企业文化建设实施方案
2014/03/22 职场文书
五五普法心得体会
2014/09/04 职场文书
派出所正风肃纪剖析材料
2014/10/10 职场文书
2015年妇幼卫生工作总结
2015/05/23 职场文书
党内外群众意见范文
2015/06/02 职场文书
网络妈妈观后感
2015/06/08 职场文书
2016年教代会开幕词
2016/03/04 职场文书
Nginx开启Brotli压缩算法实现过程详解
2021/03/31 Servers
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
Python os和os.path模块详情
2022/04/02 Python