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程序员鲜为人知但你应该知道的17个问题
Jun 04 Python
利用Python生成文件md5校验值函数的方法
Jan 10 Python
tensorflow实现对图片的读取的示例代码
Feb 12 Python
python实现矩阵打印
Mar 02 Python
深度辨析Python的eval()与exec()的方法
Mar 26 Python
python 读取更新中的log 或其它文本方式
Dec 24 Python
Python中filter与lambda的结合使用详解
Dec 24 Python
python利用递归方法实现求集合的幂集
Sep 07 Python
利用Python实现Json序列化库的方法步骤
Sep 09 Python
python获取linux系统信息的三种方法
Oct 14 Python
python 怎样进行内存管理
Nov 10 Python
python 解决微分方程的操作(数值解法)
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
PHP&MYSQL服务器配置说明
2006/10/09 PHP
php实现的仿阿里巴巴实现同类产品翻页
2009/12/11 PHP
批量去除PHP文件中bom的PHP代码
2012/03/13 PHP
PHP数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
PHP实现根据密码长度显示安全条
2017/07/04 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
javascript Xml增删改查(IE下)操作实现代码
2009/01/30 Javascript
(跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享
2013/01/24 Javascript
AngularJS入门教程(零):引导程序
2014/12/06 Javascript
在Mac OS下使用Node.js的简单教程
2015/06/24 Javascript
js如何判断访问是来自搜索引擎(蜘蛛人)还是直接访问
2015/09/14 Javascript
jQuery中的each()详细介绍(推荐)
2016/05/25 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
vue.js学习之UI组件开发教程
2017/07/03 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
layui lay-verify form表单自定义验证规则详解
2019/09/18 Javascript
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
Python虚拟环境Virtualenv使用教程
2015/05/18 Python
Python编程修改MP3文件名称的方法
2017/04/19 Python
python正则实现计算器功能
2017/12/14 Python
Python字典的核心底层原理讲解
2019/01/24 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
HTML5语音识别标签写法附图
2013/11/18 HTML / CSS
英国领先的维生素和营养补充剂直接供应商:Healthspan
2019/04/22 全球购物
澳大利亚著名的纺织品品牌:Canningvale
2020/05/05 全球购物
大学生毕业自我评价范文分享
2013/11/11 职场文书
8和9的加减法教学反思
2014/05/01 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
党员学习中国梦心得体会
2016/01/05 职场文书
Spring Cloud OpenFeign模版化客户端
2022/06/25 Java/Android