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使用多线程不断刷新网页的方法
Mar 31 Python
Python编写一个闹钟功能
Jul 11 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
Mar 13 Python
Python批量合并有合并单元格的Excel文件详解
Apr 05 Python
python提取图像的名字*.jpg到txt文本的方法
May 10 Python
Python3.6.0+opencv3.3.0人脸检测示例
May 25 Python
python自动发送测试报告邮件功能的实现
Jan 22 Python
python队列Queue的详解
May 10 Python
Scrapy框架实现的登录网站操作示例
Feb 06 Python
python制作一个简单的gui 数据库查询界面
Nov 19 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
Dec 10 Python
Python selenium模拟网页点击爬虫交管12123违章数据
May 26 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
一个高ai的分页函数和一个url函数
2006/10/09 PHP
windows xp下安装pear
2006/12/02 PHP
隐性调用php程序的方法
2009/03/09 PHP
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
2012/05/29 PHP
php生成二维码的几种方式整理及使用实例
2013/06/03 PHP
PHP判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
用户注册常用javascript代码
2009/08/29 Javascript
一个基于jquery的文本框记数器
2012/09/19 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
javascript ajax的5种状态介绍
2014/08/18 Javascript
详谈javascript中DOM的基本属性
2015/02/26 Javascript
jQuery实现磁力图片跟随效果完整示例
2016/09/16 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
vue.js之vue-cli脚手架的搭建详解
2017/05/05 Javascript
bootstrap paginator分页前后台用法示例
2017/06/17 Javascript
layui的表单提交以及验证和修改弹框的实例
2019/09/09 Javascript
Node.js API详解之 net模块实例分析
2020/05/18 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
[03:23]我的刀塔你不可能这么可爱 第一期金萌萌的故事
2014/06/20 DOTA
实例讲解Python中的私有属性
2014/08/21 Python
用Python制作简单的朴素基数估计器的教程
2015/04/01 Python
Python实现HTTP协议下的文件下载方法总结
2016/04/20 Python
用pickle存储Python的原生对象方法
2017/04/28 Python
python实现雨滴下落到地面效果
2018/06/21 Python
Python 对输入的数字进行排序的方法
2018/06/23 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
python实现连连看辅助之图像识别延伸
2019/07/17 Python
django实现模板中的字符串文字和自动转义
2020/03/31 Python
python selenium xpath定位操作
2020/09/01 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
师范应届生语文教师求职信
2013/10/29 职场文书
硕士研究生自我鉴定范文
2013/12/27 职场文书
数学检讨书1000字
2014/02/24 职场文书
瘦西湖导游词
2015/02/03 职场文书
学校推普周活动总结
2015/05/07 职场文书
oracle delete误删除表数据后如何恢复
2022/06/28 Oracle