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的subprocess模块总结
Nov 07 Python
python list排序的两种方法及实例讲解
Mar 20 Python
python 将数据保存为excel的xls格式(实例讲解)
May 03 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
Oct 22 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
python实现while循环打印星星的四种形状
Nov 23 Python
Python交互环境下打印和输入函数的实例内容
Feb 16 Python
python logging模块的使用
Sep 07 Python
如何在Win10系统使用Python3连接Hive
Oct 15 Python
如何用Python进行时间序列分解和预测
Mar 01 Python
这样写python注释让代码更加的优雅
Jun 02 Python
Python实现学生管理系统并生成exe可执行文件详解流程
Jan 22 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
SONY ICF-SW7600的电路分析
2021/03/02 无线电
详解:――如何将图片储存在数据库里
2006/12/05 PHP
WordPress中用于获取文章作者与分类信息的方法整理
2015/12/17 PHP
功能强大的PHP发邮件类
2016/08/29 PHP
php 运算符与表达式详细介绍
2016/11/30 PHP
如何用javascript去掉字符串里的所有空格
2007/02/08 Javascript
javascript+iframe 实现无刷新载入整页的代码
2010/03/17 Javascript
Javascript调用C#代码
2011/01/17 Javascript
JS读取cookies信息(记录用户名)
2012/01/10 Javascript
关于js中for in的缺陷浅析
2013/12/02 Javascript
JS实现的仿QQ空间图片弹出效果代码
2016/02/23 Javascript
老生常谈 js中this的指向
2016/06/30 Javascript
JavaScript 控制字体大小设置的方法
2016/11/23 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
JS排序之选择排序详解
2017/04/08 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
详解Puppeteer 入门教程
2018/05/09 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
Vue 使用Props属性实现父子组件的动态传值详解
2019/11/13 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
2020/05/27 Javascript
[00:10]DOTA2全国高校联赛速递
2018/05/30 DOTA
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
2018/05/24 Python
在python中bool函数的取值方法
2018/11/01 Python
django foreignkey外键使用的例子 相当于left join
2019/08/06 Python
python、Matlab求定积分的实现
2019/11/20 Python
外企C语言笔试题
2013/11/10 面试题
北京SQL新华信咨询
2016/09/30 面试题
冰淇淋开店创业计划书
2014/02/01 职场文书
教师求职自荐信
2014/03/09 职场文书