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 time模块详解(常用函数实例讲解,非常好)
Apr 24 Python
python实现多线程暴力破解登陆路由器功能代码分享
Jan 04 Python
Tensorflow 实现修改张量特定元素的值方法
Jul 30 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
Aug 07 Python
如何利用Pyecharts可视化微信好友
Jul 04 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
Aug 06 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
Oct 23 Python
基于Tensorflow:CPU性能分析
Feb 10 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
Feb 24 Python
用60行代码实现Python自动抢微信红包
Feb 04 Python
使用python如何删除同一文件夹下相似的图片
May 07 Python
python基础入门之字典和集合
Jun 13 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
利用Ffmpeg获得flv视频缩略图和视频时间的代码
2011/09/15 PHP
php生成缩略图填充白边(等比缩略图方案)
2013/12/25 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
在IE下获取object(ActiveX)的Param的代码
2009/09/15 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
调试Javascript代码(浏览器F12及VS中debugger关键字)
2013/01/25 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
Jquery Uploadify上传带进度条的简单实例
2014/02/12 Javascript
js中定义一个变量并判断其是否为空的方法
2014/05/13 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
2014/08/19 Javascript
JS实现自动变换的菜单效果代码
2015/09/09 Javascript
字符串反转_JavaScript
2016/04/28 Javascript
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
2016/11/29 Javascript
jQuery 利用ztree实现树形表格的实例代码
2017/09/27 jQuery
vue组件中使用iframe元素的示例代码
2017/12/13 Javascript
详解.vue文件中style标签的几个标识符
2018/07/17 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
Webpack5正式发布,有哪些新特性
2020/10/12 Javascript
[02:58]魔廷新尊——痛苦女王至宝语音台词节选
2020/06/14 DOTA
python中装饰器级连的使用方法示例
2017/09/29 Python
Django Docker容器化部署之Django-Docker本地部署
2019/10/09 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
Lululemon英国官网:加拿大瑜伽服装品牌
2019/01/14 全球购物
意大利奢侈品牌在线精品店:Jole.it
2020/11/23 全球购物
元旦联欢会策划方案
2014/06/11 职场文书
2014年企业工会工作总结
2014/11/12 职场文书
2014年综治维稳工作总结
2014/11/17 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
党支部考察意见范文
2015/06/02 职场文书
初中数学教学反思范文
2016/02/17 职场文书
2019企业给员工的慰问信
2019/06/24 职场文书
Java异常体系非正常停止和分类
2022/06/14 Java/Android