python 字符串格式化的示例


Posted in Python onSeptember 21, 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.'

参考资料

Python 3's f-Strings: An Improved String Formatting Syntax (Guide)

以上就是python 字符串格式化的示例的详细内容,更多关于python 字符串格式化的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python之import机制详解
Jul 03 Python
Python获取DLL和EXE文件版本号的方法
Mar 10 Python
python通过BF算法实现关键词匹配的方法
Mar 13 Python
python创建列表并给列表赋初始值的方法
Jul 28 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
Dec 20 Python
python编程培训 python培训靠谱吗
Jan 17 Python
Python实现PS滤镜的万花筒效果示例
Jan 23 Python
Django 开发调试工具 Django-debug-toolbar使用详解
Jul 23 Python
python字符串反转的四种方法详解
Dec 02 Python
Python接口测试数据库封装实现原理
May 09 Python
Python从MySQL数据库中面抽取试题,生成试卷
Jan 14 Python
详解分布式系统中如何用python实现Paxos
May 18 Python
基于python判断字符串括号是否闭合{}[]()
Sep 21 #Python
属性与 @property 方法让你的python更高效
Sep 21 #Python
Python如何在bool函数中取值
Sep 21 #Python
python 密码学示例——凯撒密码的实现
Sep 21 #Python
python 密码学示例——理解哈希(Hash)算法
Sep 21 #Python
python中的垃圾回收(GC)机制
Sep 21 #Python
如何在Python3中使用telnetlib模块连接网络设备
Sep 21 #Python
You might like
jQuery 源码分析笔记
2011/05/25 PHP
php二维数组用键名分组相加实例函数
2013/11/06 PHP
php查询mysql数据库并将结果保存到数组的方法
2015/03/18 PHP
PHP文件打开关闭及读写操作示例解析
2020/08/06 PHP
用jscript启动sqlserver
2007/06/21 Javascript
JavaScript国旗变换效果代码
2008/08/13 Javascript
用Mootools获得操作索引的两种方法分享
2011/12/12 Javascript
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
JS验证IP,子网掩码,网关和MAC的方法
2015/07/02 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
JS留言功能的简单实现案例(推荐)
2016/06/23 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
2016/09/05 Javascript
jQuery实现导航栏头部菜单项点击后变换颜色的方法
2017/07/19 jQuery
基于vue-simplemde实现图片拖拽、粘贴功能
2018/04/12 Javascript
Js通过AES加密后PHP用Openssl解密的方法
2019/07/12 Javascript
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python连接池实现示例程序
2013/11/26 Python
用python实现对比两张图片的不同
2018/02/05 Python
python实现可视化动态CPU性能监控
2018/06/21 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
keras之权重初始化方式
2020/05/21 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
2016/12/06 HTML / CSS
美国最大点评网站:Yelp
2018/02/14 全球购物
开业庆典邀请函
2014/01/08 职场文书
幼儿园教师国培感言
2014/02/02 职场文书
公安局负责人查摆问题及整改方案
2014/09/27 职场文书
社区好人好事材料
2014/12/26 职场文书
酒桌上的开场白
2015/06/01 职场文书
婚育证明格式
2015/06/17 职场文书
nginx常用命令放入shell脚本详解
2021/03/31 Servers
Flask搭建一个API服务器的步骤
2021/05/28 Python
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python
mysql幻读详解实例以及解决办法
2022/06/16 MySQL