当前位置:   article > 正文

python fstring教程(f-string教程)(python3.6+格式化字符串方法)(%惰性格式化%)_python f-string

python f-string

Python F-String 教程:深度探究与实用指南

引言

在Python 3.6及以上版本中,引入了一种新的字符串格式化方法,被称为“格式化字符串字面值”(f-string)。这种方法通过在字符串前加上字母fF来实现,使得字符串内部可以直接嵌入表达式。这种技术不仅提高了代码的可读性,还提升了运行时的效率。本教程将全面解析f-string的用法,探讨其与传统格式化方法的比较,并提供多种实用示例。

基础用法

什么是F-String?

F-string,全名为Formatted String Literals,通过在字符串前添加fF,使得字符串能够包含Python表达式的值。这些表达式被大括号{}包围,并在运行时计算,其结果直接插入到字符串中。

name = "世界"
message = f"你好,{name}!"
print(message)  # 输出: 你好,世界!
  • 1
  • 2
  • 3

表达式嵌入

F-string最大的优点之一是可以在字符串中直接嵌入并计算表达式,这包括算术运算、函数调用等。

a = 5
b = 10
print(f"五加十等于{a + b}")  # 输出: 五加十等于15
  • 1
  • 2
  • 3

格式化选项

F-string不仅能嵌入表达式,还可以指定格式化选项,如设置小数点精度、填充、对齐方式等。

小数点精度

对于浮点数,可以指定小数的精度。

import math
print(f"圆周率是{math.pi:.3f}")  # 输出: 圆周率是3.142(保留三位小数)
  • 1
  • 2

在这里插入图片描述

宽度与对齐

可以设置字符串的宽度,并指定左对齐、右对齐或居中对齐。

name = "Alice"
print(f"{name:*>10}")  # 输出: *****Alice
  • 1
  • 2

在这里插入图片描述

在Python的f-string中,print(f"{name:*>10}")这段代码用来格式化字符串,并且具体做了以下几件事情:

  1. 设置宽度10 表示目标字符串的总宽度应为10个字符。
  2. 对齐方式:使用 > 表示如果目标字符串长度小于10,那么将字符串向右对齐。
  3. 填充字符* 用作填充字符,意味着在左侧填充*,直到整个字符串的长度达到10个字符。

举个例子,假设 name 的值为 "Alice",那么:

python name = "Alice" print(f"{name:*>10}") # 输出: *****Alice

这里 "Alice" 只有5个字符,按照指定的10个字符的宽度,左侧将用5个*填充,使总长度达到10字符,从而实现右对齐的效果。这种格式化在需要在控制台输出整齐的表格或者对齐的文本时非常有用。

数字格式化

对于数字,可以进行各种格式化,如千位分隔符等。

number = 1234567890
print(f"{number:,}")  # 输出: 1,234,567,890
  • 1
  • 2

在这里插入图片描述

高级用法

复杂表达式

F-string可以包含复杂的表达式,包括调用方法或处理数据结构。

data = [1, 2, 3, 4, 5]
print(f"数据平均值是{sum(data)/len(data)}")  # 输出: 数据平均值是3.0
  • 1
  • 2

在这里插入图片描述

调用函数

可以在f-string中直接调用函数,使得字符串的生成更加动态。

def greet(name):
    return f"你好,{name}!"

print(greet("世界"))  # 输出: 你好,世界!
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

多行F-String

当处理较长的f-string时,可以使用三引号来定义多行字符串,增加代码的可读性。

name = "世界"
profession = "工程师"
language = "Python"
message = f"""
姓名:{name}
职业:{profession}
语言:{language}
"""
print(message)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

嵌套格式化

将fstring置入格式说明符中:

places = 3
number = 1.23456
# 保留三位小数
print(f'My number is {number:.{places}f}')
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

总结

通过本教程,我们深入了解了Python中f-string的强大功能。通过实用的示例和详细的解释,我们展示了如何有效地使用f-string来简化代码并提高性能。无论是简单的数据展示还是复杂的数据处理,f-string都是一种高效且直观的解决方案。

20240708 注意在使用python logging日志模块时,建议使用%惰性格式化,不建议使用f-string

在这里插入图片描述

Pylint 提示 W1203: logging-fstring-interpolation 是因为在使用 logging 模块时,推荐使用惰性 % 格式化而不是 f-string 格式化。这是因为使用惰性 % 格式化能够在日志级别低于当前设置的情况下避免不必要的字符串格式化操作,从而提高性能。

logging 模块中,如果你使用 f-string 进行字符串插值,即使日志消息最终不会被记录,字符串插值操作仍然会发生。这可能会导致性能问题,特别是在大量日志记录的情况下。相反,使用 % 格式化字符串时,格式化操作只有在日志消息实际被记录时才会发生。

以下是一个使用惰性 % 格式化的例子:

import logging

# 配置日志记录
logging.basicConfig(level=logging.DEBUG)

variable = 'world'
logging.debug('Hello, %s', variable)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

在这个例子中,'Hello, %s' 是日志消息模板,variable 是插值的变量。只有在日志级别设置为 DEBUG 或更高级别时,variable 的值才会被插入到消息模板中。

下面是同样的逻辑,但使用 f-string(不推荐的方式):

import logging

# 配置日志记录
logging.basicConfig(level=logging.DEBUG)

variable = 'world'
logging.debug(f'Hello, {variable}')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

在这种情况下,即使日志级别低于 DEBUG,f-string 插值也会执行,这会导致不必要的性能开销。

总之,为了遵循最佳实践并避免 Pylint 警告,应该在 logging 调用中使用惰性 % 格式化字符串。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号