百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Python 格式化字符串文本 () 详细指南

bigegpt 2024-11-23 11:29 33 浏览

Python 以其代码的简单性和可读性而闻名。格式化字符串 Literals (f-strings) 是在 Python 3.6 中引入的,通过将表达式和变量直接嵌入到字符串 Literals 中,提供了一种优雅而有效的方法来格式化字符串。

什么是 f 字符串?

格式化字符串文本(通常称为 f 字符串)是以字母“f”或“F”为前缀的字符串文本。此前缀允许您使用大括号 '{}' 在字符串中嵌入表达式和变量。大括号内的 part / expression 在运行时进行评估,并替换为其相应的值。

name = "Somename"
age = 45
greeting = f"Hello, my name is {name} and I am {age} years old."
print(greeting)

在此示例中,变量 'name' 和 'age' 使用大括号 '{}' 嵌入到字符串中。'{}' 中的表达式将被计算并替换为字符串。代码的输出将是:

格式化字符串文本 (f-strings) 的优点

与 Python 中的其他字符串格式化方法相比,F 字符串具有几个优势:

1. 可读性:F 字符串通过将表达式和变量直接嵌入到字符串中,使的代码更具可读性,这清楚地显示了最终字符串的构造方式。

2. 性能:F 字符串比旧的字符串格式化方法(如 '%' 格式和 'str.format()'))更快。

3. 表达式计算:可以在 f 字符串的大括号内使用任何有效的 Python 表达式,包括算术运算、函数调用和字符串方法。

4. 灵活性:F 字符串允许使用高级格式选项,例如控制精度、对齐、填充和其他字符串格式功能。

f 字符串的高级用法

1. 算术运算和函数

可以直接在 f 字符串中执行算术运算和调用函数:

length = 5
width = 3
area = f"The area of the rectangle is {length * width} square units."
print(area)

此代码计算矩形的面积并将结果嵌入到 f 字符串中。输出将为:

2. 格式选项

F 字符串提供了一系列格式选项,类似于 'str.format()' 方法提供的格式选项。可以控制精度、填充、对齐等:

a. 精度:使用 '.xf' 控制浮点数中的小数位数,其中 'x' 是所需的小数位数,'f' 表示浮点格式:

val = 123456789.45678
print(f"Rounded to 2 decimal places: {val:.2f}")

这将产生精度为 2 位小数的格式化数字。

可以通过为 1000 的分隔符引入占位符符号 ',' 或 '_' 来进一步控制格式。在下面的示例中,我们使用 f 字符串来格式化两个不同的数字。

val1 = 123456789.45678
val2 = 123.456

print("Values rounded to 2 decimal places with ',' as 1000's separator")
print(f"Val1 :{val1:,.2f}")
print(f"Val2 :{val2:,.2f}")

输出:

b. 填充和对齐方式:指定格式化输出的总宽度并对齐文本。您会注意到在一组大括号中进一步使用 '{}' 来引入变量来控制宽度和精度。默认为 Left Padding

val1 = 123456789.45678
val2 = 123.456

width = 15
precision = 2
print("Values rounded to 2 decimal places with ',' as 1000's separator and total width of 15")
print(f"Val1 :{val1:{width},.{precision}f}")
print(f"Val2 :{val2:{width},.{precision}f}")

上述代码片段的输出将如下所示:

为了控制应用何种填充样式,我们可以使用符号,即左 ('<')、右 ('>') 或中心 ('^') :

val1 = 123456789.45678
val2 = 123.456
width = 15
precision = 2

print(f"Padded to 20 characters (Defaults to Left Padding): {val1:{width},.{precision}f}")
print(f"Left-aligned: {val1:<{width},.{precision}f}")
print(f"Left-aligned: {val2:<{width},.{precision}f}")
print(f"Right-aligned: {val1:>{width},.{precision}f}")
print(f"Right-aligned: {val2:>{width},.{precision}f}")
print(f"Center-aligned: {val1:^{width},.{precision}f}")
print(f"Center-aligned: {val2:^{width},.{precision}f}")

这些度量使我们能够精确地对齐输出,如下所示:

如果需要突出显示/显示填充,可以通过指定占位符(在本例中为 '.')来填充填充空间来实现。

val1 = 123456789.45678
val2 = 123.456
width = 15
precision = 2

print(f"Padded to 20 characters (Defaults to Left Padding): {val1:{width},.{precision}f}")
print(f"Left-aligned: {val1:.<{width},.{precision}f}")
print(f"Left-aligned: {val2:.<{width},.{precision}f}")
print(f"Right-aligned: {val1:.>{width},.{precision}f}")
print(f"Right-aligned: {val2:.>{width},.{precision}f}")
print(f"Center-aligned: {val1:.^{width},.{precision}f}")
print(f"Center-aligned: {val2:.^{width},.{precision}f}")

输出:

c. 格式类型:f-strings 还允许我们在大括号内指定格式类型。例如,您可以使用 'd' 表示整数,使用 'f' 表示浮点数,使用 'b' 表示二进制,使用 '%' 表示百分比:

number = 42
print(f"As a decimal: {number:d}")
print(f"As a float: {number:f}")
print(f"As a binary: {number:b}")
print(f"As a hexadecimal: {number:x}")

number = 0.235
print(f"As a percentage: {number:.2%}")

输出:

3. 使用 String 方法

String 方法可以直接在 f 字符串的大括号内使用。这对于在格式化字符串数据时操作字符串数据非常有用:

text = "python"
print(f"Capitalized string: {text.capitalize()}")

在这个例子中,直接在大括号内调用 'capitalize()' 方法,将第一个字母大写。

4. 使用复杂表达式

F 字符串还可以处理更复杂的表达式,例如列表推导式、lambda 函数和条件语句:

numbers = [1, 2, 3, 4, 5]
sum_numbers = sum(numbers)
print(f"The sum of {numbers} is {sum_numbers}")

# Using a conditional expression
number = 3
msg = f"The number {number} is {'even' if number % 2 == 0 else 'odd'}."
print(msg)

# Using a list comprehension
msg = f'List of {list(numbers)} becomes {[num**2 for num in numbers]} after squaring each number'
print(msg)

输出:

相关推荐

悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)

新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...

高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源

凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...

微服务架构实战:商家管理后台与sso设计,SSO客户端设计

SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...

还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑

在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...

Seata源码—6.Seata AT模式的数据源代理二

大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...

30分钟了解K8S(30分钟了解微积分)

微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...

SpringBoot条件化配置(@Conditional)全面解析与实战指南

一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...

一招解决所有依赖冲突(克服依赖)

背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...

你读过Mybatis的源码?说说它用到了几种设计模式

学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...

golang对接阿里云私有Bucket上传图片、授权访问图片

1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...

spring中的资源的加载(spring加载原理)

最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...

Android资源使用(android资源文件)

Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...

如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)

深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...

@Autowired与@Resource原理知识点详解

springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...

java的redis连接工具篇(java redis client)

在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...