IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 19.Python中的f-strings字符串格式化 -> 正文阅读

[Python知识库]19.Python中的f-strings字符串格式化

《Python编程的术与道:Python语言进阶》视频课程
《Python编程的术与道:Python语言进阶》视频课程链接:https://edu.csdn.net/course/detail/28618

f-strings字符串格式化

Python f-strings是执行字符串格式化的最新Python语法。 自Python 3.6起可用。 f-strings提供了一种更快、更易读、更简明且不易出错的在Python中格式化字符串的方式。

f-strings具有f前缀,并使用{}括号来评估值。

在Python 3.6之前,有两种主要的方式将Python表达式嵌入到字符串文字中进行格式化:%-formattingstr.format()

Option #1: %-formatting

name = "Eric"
"Hello, %s." % name
'Hello, Eric.'

为了插入多个变量,必须使用这些变量的元组。

name = "Eric"
age = 35
"Hello, %s. You are %s." % (name, age)
'Hello, Eric. You are 35.'

上面看到的代码示例具有足够的可读性。 但是,一旦开始使用多个参数和更长的字符串,代码将很快变得不那么易读。

first_name = "Eric"
last_name = "Idle"
age = 35
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 35. You are a comedian. You were a member of Monty Python.'

这种格式不好用,因为它太冗长并会导致错误,例如无法正确显示元组或字典。

Option #2: str.format()

str.format()? 是对%-formatting的改进。 它使用普通的函数调用语法,并且可以通过将对象转换为字符串的__format__() 方法进行扩展。

使用str.format(),替换字段用花括号标记:

"Hello, {}. You are {}.".format(name, age)
'Hello, Eric. You are 35.'

可以通过引用变量的索引以任何顺序引用它们:

"Hello, {1}. You are {0}.".format(age, name)
'Hello, Eric. You are 35.'

但是,如果插入变量名称,则会获得额外的好处,即能够传递对象,然后在花括号之间引用参数和方法:

person = {'name': 'Eric', 'age': 35}
"Hello, {name}. You are {age}.".format(name=person['name'], age=person['age'])
'Hello, Eric. You are 35.'

还可以使用**和字典技巧来完成:

person = {'name': 'Eric', 'age': 35}
"Hello, {name}. You are {age}.".format(**person)
'Hello, Eric. You are 35.'

%-formatting相比,str.format()绝对是升级,但是当处理多个参数和更长的字符串时,仍然很冗长:

first_name = "Eric"
last_name = "Idle"
age = 35
profession = "comedian"
affiliation = "Monty Python"
print(("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 35. You are a comedian. You were a member of Monty Python.

如果想要在字典中传递给.format()的变量,则可以只用.format(**some_dict)拆包并按字符串中的键引用值,但是有一个更好的方法做到这一点的方法。

f-Strings

f-strings也称为“格式化字符串字面量”(“formatted string literals,”)。它在开头带有f且花括号包含将被其值替换的表达式的字符串字面量。 在运行时对表达式求值,然后使用__format__协议进行格式化。

语法

语法与在str.format()中使用的语法相似,但不那么冗长,而容易阅读:

name = "Eric"
age = 35
f"Hello, {name}. You are {age}."
'Hello, Eric. You are 35.'

使用大写字母F也是有效的:

F"Hello, {name}. You are {age}."
'Hello, Eric. You are 35.'

任意表达式

由于f-strings是在运行时求值的,因此可以在其中放入所有有效的Python表达式。

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-strings的类创建的对象。

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}."

    def __repr__(self):
        return f"{self.first_name} {self.last_name} is {self.age}. Surprise!"

你可以做:

new_comedian = Comedian("Eric", "Idle", "35")
f"{new_comedian}"
'Eric Idle is 35.'

__str __()__repr __()方法处理如何以字符串形式显示对象,因此需要确保在类定义中至少包括这些方法之一。 如果必须选择一个,请使用__repr __(),因为它可以代替__str __()使用。

__str __()返回的字符串是对象的非正式字符串表示形式。 __repr __()返回的字符串是正式表示形式。

默认情况下,f-strings将使用__str __(),但如果包含转换标志!r,则可以确保它们使用__repr __()

f"{new_comedian}"
'Eric Idle is 35.'
f"{new_comedian!r}"
'Eric Idle is 35. Surprise!'

多行 f-Strings

You can have multiline strings:

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.'

但是请记住,需要在多行字符串的每行前面放置一个f。 也可以在多行时使用\

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.'

速度比较

f-strings中的f也可以代表“fast”。

f-strings%-formattingstr.format()都快。 f-string是在运行时求值的表达式,而不是常量值。

在运行时,大括号内的表达式在其自己的作用域内求值,然后与f-strings的字符串字面量部分放在一起。 然后返回结果字符串。

import timeit
timeit.timeit("""name = "Eric"
age = 35
'%s is %s.' % (name, age)""", number = 10000)
0.0036138039999968896
timeit.timeit("""name = "Eric"
age = 35
'{} is {}.'.format(name, age)""", number = 10000)
0.0034118680000574386
timeit.timeit("""name = "Eric"
age = 35
f'{name} is {age}.'""", number = 10000)
0.0013109760000133974
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 16:14:01  更:2022-04-06 16:14:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:32:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码