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实现根据ip地址反向查找主机名称的方法
Apr 29 Python
简介二分查找算法与相关的Python实现示例
Aug 26 Python
python实现音乐下载的统计
Jun 20 Python
详解python3中的真值测试
Aug 13 Python
python try except 捕获所有异常的实例
Oct 18 Python
python按照多个条件排序的方法
Feb 08 Python
python网络编程 使用UDP、TCP协议收发信息详解
Aug 29 Python
python-OpenCV 实现将数组转换成灰度图和彩图
Jan 09 Python
django在保存图像的同时压缩图像示例代码详解
Feb 11 Python
Python接口测试get请求过程详解
Feb 28 Python
Python单例模式的四种创建方式实例解析
Mar 04 Python
matplotlib 三维图表绘制方法简介
Sep 20 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
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
php天翼开放平台短信发送接口实现方法
2014/12/22 PHP
php+mysql结合Ajax实现点赞功能完整实例
2015/01/30 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
PHP学习笔记之session
2018/05/06 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
2020/05/02 PHP
解析Javascript中中括号“[]”的多义性
2013/12/03 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
2014/07/31 Javascript
Bootstrap每天必学之弹出框(Popover)插件
2016/04/25 Javascript
一个极为简单的requirejs实现方法
2016/10/20 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
jQuery实现点击关注和取消功能
2017/07/03 jQuery
解决vue单页使用keep-alive页面返回不刷新的问题
2018/03/13 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
vue+elementUI(el-upload)图片压缩,默认同比例压缩操作
2020/08/10 Javascript
JavaScript实现图片合成下载的示例
2020/11/19 Javascript
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
Python3处理文件中每个词的方法
2015/05/22 Python
简单谈谈python中的语句和语法
2017/08/10 Python
python实现识别手写数字 python图像识别算法
2020/03/23 Python
基于python 爬虫爬到含空格的url的处理方法
2018/05/11 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
基于MSELoss()与CrossEntropyLoss()的区别详解
2020/01/02 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
tensorflow下的图片标准化函数per_image_standardization用法
2020/06/30 Python
HTML5和CSS3实例教程总结(推荐)
2016/07/18 HTML / CSS
荣耀商城:HIHONOR
2020/11/03 全球购物
党课学习思想汇报
2014/01/02 职场文书
愚人节活动策划方案
2014/03/11 职场文书
2014各大专业毕业生自我评价
2014/09/17 职场文书
学生会生活部工作总结2015
2015/03/31 职场文书
2016公司新年问候语
2015/11/11 职场文书
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL
TS 类型兼容教程示例详解
2022/09/23 Javascript