详解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使用turtle库绘制时钟
Mar 25 Python
解决Pycharm下面出现No R interpreter defined的问题
Oct 29 Python
使用浏览器访问python写的服务器程序
Oct 10 Python
Python aiohttp百万并发极限测试实例分析
Oct 26 Python
将python依赖包打包成window下可执行文件bat方式
Dec 26 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
Mar 04 Python
基于Django OneToOneField和ForeignKey的区别详解
Mar 30 Python
python2和python3哪个使用率高
Jun 23 Python
快速了解Python开发环境Spyder
Jun 29 Python
pycharm实现猜数游戏
Dec 07 Python
python利用xpath爬取网上数据并存储到django模型中
Feb 26 Python
python小型的音频操作库mp3Play
Apr 24 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
改造一台复古桌面收音机
2021/03/02 无线电
用PHP连接MySQL代码的参数说明
2008/06/07 PHP
php 启动报错如何解决
2014/01/17 PHP
php 启动时报错的简单解决方法
2014/01/27 PHP
PHP根据IP判断地区名信息的示例代码
2014/03/03 PHP
PHP mkdir()无写权限的问题解决方法
2014/06/19 PHP
yii数据库的查询方法
2015/12/28 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
2016/09/23 PHP
Laravel网站打开速度优化的方法汇总
2017/07/16 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
如何解决PHP获取不到SESSION信息之一般情况
2019/10/10 PHP
基于jQuery的合并表格中相同文本的相邻单元格的代码
2011/04/06 Javascript
jquery实现标签上移、下移、置顶
2015/04/26 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
AngularJS报错$apply already in progress的解决方法分析
2017/01/30 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
2017/04/22 Javascript
AngularJS 支付倒计时功能实现思路
2017/06/05 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
JavaScript canvas实现围绕旋转动画
2017/11/18 Javascript
vue实现商城上货组件简易版
2017/11/27 Javascript
vue 纯js监听滚动条到底部的实例讲解
2018/09/03 Javascript
layui树形菜单动态遍历的例子
2019/09/23 Javascript
微信小程序实现左侧滑动导航栏
2020/04/08 Javascript
Vue+ElementUI 中级联选择器Bug问题的解决
2020/07/31 Javascript
python中子类调用父类函数的方法示例
2017/08/18 Python
Python编程图形库之Pillow使用方法讲解
2018/12/28 Python
Python3使用PySynth制作音乐的方法
2019/09/09 Python
英国露营设备和户外服装购物网站:Simply Hike
2019/05/05 全球购物
Speedo速比涛法国官方网站:泳衣、泳镜、泳帽、泳裤
2019/07/30 全球购物
小学生红领巾广播稿
2014/01/21 职场文书
2014年公司迎新年活动方案
2014/02/24 职场文书
考研英语复习计划
2015/01/19 职场文书
2015年导购员工作总结
2015/04/25 职场文书
2016春节放假通知范文
2015/08/18 职场文书
微信小程序APP的生命周期及页面的生命周期
2022/04/19 Javascript