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实现dnspod自动更新dns解析的方法
Feb 14 Python
python 七种邮件内容发送方法实例
Apr 22 Python
关于Django显示时间你应该知道的一些问题
Dec 25 Python
python3实现跳一跳点击跳跃
Jan 08 Python
Python基于matplotlib实现绘制三维图形功能示例
Jan 18 Python
Python实现通过继承覆盖方法示例
Jul 02 Python
Django 多语言教程的实现(i18n)
Jul 07 Python
python3人脸识别的两种方法
Apr 25 Python
python定位xpath 节点位置的方法
Aug 27 Python
Python迭代器Iterable判断方法解析
Mar 16 Python
python中数字是否为可变类型
Jul 08 Python
Python中非常使用的6种基本变量的操作与技巧
Mar 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
一步一步学习PHP(3) php 函数
2010/02/15 PHP
浅析php数据类型转换
2014/01/09 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
Yii2单元测试用法示例
2016/11/12 PHP
理解Javascript_10_对象模型
2010/10/16 Javascript
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
js nextSibling属性和previousSibling属性概述及使用注意
2013/02/16 Javascript
JavaScript判断密码强度(自写代码)
2013/09/06 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
又一枚精彩的弹幕效果jQuery实现
2016/07/25 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
2016/09/28 Javascript
JS中闭包的经典用法小结(2则示例)
2016/12/28 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
node.js实现带进度条的多文件上传
2020/03/27 Javascript
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
Windows下使Python2.x版本的解释器与3.x共存的方法
2015/10/25 Python
Python中pip更新和三方插件安装说明
2018/07/08 Python
Python 微信爬虫完整实例【单线程与多线程】
2019/07/06 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
python使用信号量动态更新配置文件的操作
2020/04/01 Python
美国花布包包品牌:Vera Bradley
2017/08/11 全球购物
美国隐形眼镜零售商:LensPure
2019/03/10 全球购物
存储过程和sql语句的优缺点
2014/07/02 面试题
山海经纬软件测试笔试题和面试题
2013/04/02 面试题
专科文秘应届生求职信
2013/11/18 职场文书
大学生实习证明范本
2014/01/15 职场文书
高中语文教学反思
2014/01/16 职场文书
个人充满哲理的自我评价
2014/02/20 职场文书
绘画专业自荐信范文
2014/02/23 职场文书
年终总结会议主持词
2014/03/17 职场文书
如何写一份好的英文求职信
2014/03/19 职场文书
单身申明具结书
2015/02/26 职场文书
信贷客户经理岗位职责
2015/04/09 职场文书
总结Python使用过程中的bug
2021/06/18 Python
JavaWeb实现显示mysql数据库数据
2022/03/19 Java/Android