详解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写的PHPMyAdmin暴力破解工具代码
Aug 06 Python
python中随机函数random用法实例
Apr 30 Python
Python的Flask框架中配置多个子域名的方法讲解
Jun 07 Python
python验证码识别的实例详解
Sep 09 Python
pandas DataFrame数据转为list的方法
Apr 11 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
Jul 11 Python
python实现flappy bird游戏
Dec 24 Python
Python应用领域和就业形势分析总结
May 14 Python
python中web框架的自定义创建
Sep 08 Python
python实现七段数码管和倒计时效果
Nov 23 Python
浅谈matplotlib.pyplot与axes的关系
Mar 06 Python
keras:model.compile损失函数的用法
Jul 01 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/03 新手入门
PHP insert语法详解
2008/06/07 PHP
php使用 readfile() 函数设置文件大小大小的方法
2017/08/11 PHP
修复IE9&safari 的sort方法
2011/10/21 Javascript
JavaScript限定复选框的选择个数示例代码
2013/08/25 Javascript
jquery如何通过name名称获取当前name的value值
2013/12/20 Javascript
JavaScript将页面表格导出为Excel的具体实现
2013/12/27 Javascript
AngularJS入门教程之 XMLHttpRequest实例讲解
2016/07/27 Javascript
关于Javascript回调函数的一个妙用
2016/08/29 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
2018/10/09 Javascript
vue-router的使用方法及含参数的配置方法
2018/11/13 Javascript
React中使用外部样式的3种方式(小结)
2019/05/28 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
解决vue一个页面中复用同一个echarts组件的问题
2020/07/19 Javascript
[03:40]DOTA2英雄梦之声_第01期_炼金术士
2014/06/23 DOTA
[02:57]DOTA2亚洲邀请赛 SECRET战队出场宣传片
2015/02/07 DOTA
Python对两个有序列表进行合并和排序的例子
2014/06/13 Python
Python中endswith()函数的基本使用
2015/04/07 Python
selenium+python自动化测试之多窗口切换
2019/01/23 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
Python中的支持向量机SVM的使用(附实例代码)
2019/06/26 Python
python求加权平均值的实例(附纯python写法)
2019/08/22 Python
Python处理mysql特殊字符的问题
2020/03/02 Python
python爬虫学习笔记之pyquery模块基本用法详解
2020/04/09 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
Python3如何使用tabulate打印数据
2020/09/25 Python
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
房产买卖委托公证书
2014/04/04 职场文书
小学生期末评语大全
2014/04/21 职场文书
初三开学计划书
2014/04/27 职场文书
党的群众路线教育实践活动查摆剖析材料
2014/10/10 职场文书
2015年生产车间工作总结
2015/04/22 职场文书
神州牡丹园的导游词
2019/11/20 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python