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(一)Python环境安装
Aug 20 Python
Python中使用md5sum检查目录中相同文件代码分享
Feb 02 Python
分享Python字符串关键点
Dec 13 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
Jun 07 Python
python flask实现分页效果
Jun 27 Python
python中numpy的矩阵、多维数组的用法
Feb 05 Python
python 从csv读数据到mysql的实例
Jun 21 Python
NLTK 3.2.4 环境搭建教程
Sep 19 Python
超简单的Python HTTP服务
Jul 22 Python
Python 使用多属性来进行排序
Sep 01 Python
Python本地及虚拟解释器配置过程解析
Oct 13 Python
Python3使用Selenium获取session和token方法详解
Feb 16 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
基于MySQL体系结构的分析
2013/05/02 PHP
php使用json_encode对变量json编码
2014/04/07 PHP
php使用number_format函数截取小数的方法分析
2016/05/27 PHP
基于PHP实现栈数据结构和括号匹配算法示例
2017/08/10 PHP
Yii框架常见缓存应用实例小结
2019/09/09 PHP
js资料toString 方法
2007/03/13 Javascript
JQuery中each()的使用方法说明
2010/08/19 Javascript
JS添加删除一组文本框并对输入信息加以验证判断其正确性
2013/04/11 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
基于ajax实现文件上传并显示进度条
2015/08/03 Javascript
基于Css3和JQuery实现打字机效果
2015/08/11 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
js判断复选框是否选中及选中个数的实现代码
2016/05/30 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
Javascript 一些需要注意的细节(必看篇)
2017/07/08 Javascript
Vue.js实现图片的随意拖动方法
2018/03/08 Javascript
关于jquery中attr()和prop()方法的区别
2018/05/28 jQuery
node.js到底要不要加分号浅析
2018/07/11 Javascript
vue中的计算属性实例详解
2018/09/19 Javascript
python实现socket端口重定向示例
2014/02/10 Python
linux下python抓屏实现方法
2015/05/22 Python
分析python动态规划的递归、非递归实现
2018/03/04 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
Python动态赋值的陷阱知识点总结
2019/03/17 Python
PyTorch实现更新部分网络,其他不更新
2019/12/31 Python
Python实现仿射密码的思路详解
2020/04/23 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
爱淘宝:淘宝网购物分享平台
2017/04/28 全球购物
美国豪华时尚女性精品店:Kirna Zabête
2018/01/11 全球购物
Currentbody法国:健康与美容高科技产品
2020/08/16 全球购物
个人简历自我评价
2014/01/06 职场文书
公司户外活动总结
2014/07/04 职场文书
初中政治教学工作总结
2015/08/13 职场文书
创业计划书之溜冰场
2019/10/25 职场文书
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL