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中input和raw_input的一点区别
Oct 21 Python
Python StringIO模块实现在内存缓冲区中读写数据
Apr 08 Python
使用python为mysql实现restful接口
Jan 05 Python
批量将ppt转换为pdf的Python代码 只要27行!
Feb 26 Python
Python爬虫框架Scrapy实例代码
Mar 04 Python
pandas.DataFrame 根据条件新建列并赋值的方法
Apr 08 Python
Sanic框架蓝图用法实例分析
Jul 17 Python
python中join()方法介绍
Oct 11 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
Mar 29 Python
tensorflow没有output结点,存储成pb文件的例子
Jan 04 Python
Python下使用Trackbar实现绘图板
Oct 27 Python
Python远程linux执行命令实现
Nov 11 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下尝试使用GraphicsMagick的缩略图功能
2011/01/01 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
跟着JQuery API学Jquery 之二 属性
2010/04/09 Javascript
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
一个JS的日期格式化算法示例
2013/07/31 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
举例详解JavaScript中Promise的使用
2015/06/24 Javascript
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
jquery取消事件冒泡的三种方法(推荐)
2016/05/28 Javascript
JavaScript获取IP获取的是IPV6 如何校验
2016/06/12 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
jQuery按需加载轮播图(web前端性能优化)
2017/02/17 Javascript
JavaScript数组迭代方法
2017/03/03 Javascript
div中文字内容溢出常见的解决方法
2017/03/16 Javascript
微信小程序 自定义Toast实例代码
2017/06/12 Javascript
iView-admin 动态路由问题的解决方法
2018/10/03 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
JavaScript canvas实现雪花随机动态飘落
2020/02/08 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
2020/12/10 Javascript
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
Python 绘图和可视化详细介绍
2017/02/11 Python
Tensorflow中使用tfrecord方式读取数据的方法
2018/06/19 Python
在Python文件中指定Python解释器的方法
2019/02/18 Python
python里的单引号和双引号的有什么作用
2020/06/17 Python
python ssh 执行shell命令的示例
2020/09/29 Python
STAY JAPAN台湾:预订日本民宿
2018/07/22 全球购物
应届生新闻编辑求职信
2013/11/19 职场文书
食堂个人先进事迹
2014/01/22 职场文书
银行批评与自我批评
2014/02/10 职场文书
《雪地里的小画家》教学反思
2014/02/22 职场文书
安全教育感言
2014/03/04 职场文书
人事部岗位职责范本
2014/03/05 职场文书
导游欢送词
2015/01/31 职场文书
2015年远程教育工作总结
2015/05/20 职场文书