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 相关文章推荐
python3使用tkinter实现ui界面简单实例
Jan 10 Python
python打开url并按指定块读取网页内容的方法
Apr 29 Python
pygame实现弹力球及其变速效果
Jul 03 Python
python opencv之SIFT算法示例
Feb 24 Python
python变量的存储原理详解
Jul 10 Python
Django 创建新App及其常用命令的实现方法
Aug 04 Python
如何基于python测量代码运行时间
Dec 25 Python
python如何求100以内的素数
May 27 Python
Python map及filter函数使用方法解析
Aug 06 Python
基于Python的身份证验证识别和数据处理详解
Nov 14 Python
Python中zipfile压缩包模块的使用
May 14 Python
实例讲解Python中sys.argv[]的用法
Jun 03 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
thinkPHP框架实现生成条形码的方法示例
2018/06/06 PHP
php7下的filesize函数
2019/09/30 PHP
jquery中ajax调用json数据的使用说明
2011/03/17 Javascript
什么是DOM(Document Object Model)文档对象模型
2012/03/05 Javascript
cookie.js 加载顺序问题怎么才有效
2013/07/31 Javascript
如何用jquery控制表格奇偶行及活动行颜色
2014/04/20 Javascript
可编辑下拉框的2种实现方式
2014/06/13 Javascript
解释&&和||在javascript中的另类用法
2014/07/28 Javascript
原创jQuery弹出层插件分享
2015/04/02 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
2015/12/16 Javascript
神奇!js+CSS+DIV实现文字颜色渐变效果
2016/03/16 Javascript
一分钟理解js闭包
2016/05/04 Javascript
Nodejs学习item【入门手上】
2016/05/05 NodeJs
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
JS制作图形验证码实现代码
2020/10/19 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
2017/03/13 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
ES6新特性七:数组的扩充详解
2017/04/21 Javascript
Vue中的vue-resource示例详解
2018/11/02 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
javascript实现拼图游戏
2021/01/29 Javascript
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
python字典多条件排序方法实例
2014/06/30 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
django的csrf实现过程详解
2019/07/26 Python
Flask中sqlalchemy模块的实例用法
2020/08/02 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
2020/12/31 Python
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
Ootori在线按摩椅店:一家专业的按摩椅制造商
2019/04/10 全球购物
德国自行车商店:Tretwerk
2019/06/21 全球购物
测绘工程本科生求职信
2013/10/10 职场文书
函授毕业自我鉴定
2013/12/19 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
本科毕业论文答辩稿
2015/06/23 职场文书
工作总结之小学教师体育工作范文(3篇)
2019/10/07 职场文书