Python另类格式化f-strings特性

Python 3.6引入了f-strings作为新的字符串格式化方法,它提供了更快的速度和简洁的语法。f-strings允许在字符串中直接插入表达式,能够直接调用函数并计算结果。此外,支持多行字符串格式化,可以通过三个单引号包围内容,或者使用反斜杠进行折行。由于其性能优势和易用性,f-strings成为Python开发中值得推荐的字符串格式化工具。

我们都知道在Python中字符串格式化常用的有百分号操作符(%)str.format()方式,前者最早是在Python 2.5版本以前所支持的,之后便推出了后者。而在Python3.6发布之后,在PEP 498提案或建议书中提出了一种新型字符串格式和机制,被称为(Literal String Interpolation) 字符串插值,也就是f-strings,他的特点是进行字符串格式化时都是以 f 字母开头的。

而不得不说的是,f-strings的运行速度很快。比%-string和str.format()这两种格式化方法都快得多。

我们先来一个直观感受,就是把过去几个字符串格式化方法和新方法做个比较。

name = 'Anders'
gender = 'Male'

str1 = '%s is a %s' %(name, gender)
print(str1)

str2 = '{} is a {}'.format(name, gender)
print(str2)

str3 = f'{name} is a {gender}'
str3

# 输出如下:
# Anders is a Male
# Anders is a Male
# 'Anders is a Male'

在上述例子中,可以看到f-strings方法直接以f字母开头,后面紧跟你要输入的字符串内容编辑,无论是单引号,双引号,三个单引号括起来都可以,然后把要输出的格式化变量内容对号入座即可。

以表达式方式传递

当然不仅仅是传递普通变量,还可以是一个函数方法,因为f-string实际上是在运行时计算的表达式,为了更加说明这点,引用PEP 498官方提到的内容。

从字符串中提取的表达式在f字符串出现的上下文中计算。这意味着表达式可以完全访问本地和全局变量。可以使用任何有效的Python表达式,包括函数和方法调用。

所以我们来看看如果把一个函数方法并调用它的例子。

def math_test(num1, num2):
    return num1 * num2

result = f'the result is {math_test(2, 3)}'
result

# 输出如下:
# 'the result is 6'

我们可以看到,如上例子中,先前定义了一个math_test函数方法,在f-string字面量格式化中直接就像平时调用函数一样给函数传递参数,就能得到对应的结果,并把结果替换到先前指定的位置。

多行f

如果我们想要输出的格式本身是以段落形式存在的,存在分行,那可以直接用三个单引号将整段内容括起来,随后输出的字符串格式也包含了段落分隔符。

name = 'Anders'
age = 25
pet = 'dogs'

info = f'''my name is {name},
my age is {age},
I like {pet}.'''

info

# 输出内容:
# 'my name is Anders,\nmy age is 25,\nI like dogs.'

如果是另一种情况,假设输入的字符串拼接很长,占用了屏幕的边宽,只需输入反斜杠"\"跟在折行内容的末尾去做处理即可。

name = 'Anders'
age = 25
pet = 'dogs'

info = f'my name is {name}, \
my age is {age}, \
I like {pet}.'

info

# 输出内容:
# 'my name is Anders, my age is 25, I like dogs.'
性能方面

引用PEP 498中网友翻译提到的:

f -string提供了一种方法,可以在字符串文字中嵌入表达式,使用最小的语法。应该注意的是,f-string实际上是在运行时计算的表达式,而不是一个常量值。在Python源代码中,f-string是一个文本字符串,前缀为f,其中包含括号内的表达式。表达式被替换为它们的值。

总之,在Python 3.6之后 f 字符串用法非常好用,在性能上,在容错率上,在外观上,都是值得推荐使用的。

<think>嗯,用户之前问过关于Python字符串格式化和f-strings的问题,现在他们又提到“Python的f-strings格式化对照表”,可能希望得到一个更详细的结构化总结。我需要确保覆盖所有常见的格式说明符,并提供实用的代码示例。首先,我需要回顾用户之前的问题和回答。之前的回答已经包括了数字格式化的对照表,但这次用户可能想要更全面的,包括字符串、数字、日期等。可能需要分类型整理,比如整数、浮点数、字符串对齐、日期时间等。 用户可能还希望看到实际应用场景的例子,比如财务数据、科学计数或者日志记录中的使用。此外,注意用户提到“对照表”,可能需要表格形式,方便查阅。需要检查是否有遗漏的格式符,比如二进制、八进制、十六进制,以及千位分隔符的使用。同时,考虑对齐方式(左对齐、右对齐、居中)和填充字符的设置。动态格式化的例子也很重要,比如在运行时决定精度或宽度。 还要注意特殊案例,比如处理大数字时的科学计数法,或者自定义对象的格式化方法。另外,安全问题虽然之前提到过,但这里可能需要重复,除非用户特别指出。 用户可能没有明确提到,但可能对如何在f-string中处理多语言或本地化设置感兴趣,比如千位分隔符的同表示方法。或者如何在格式化中包含变量名,比如f-strings的=操作符,这在调试中很有用。 最后,确保代码示例简洁明了,每个例子都展示同的格式选项,并注释输出结果。这样用户可以直接复制代码测试,理解每个参数的作用。可能还需要提醒用户注意Python版本,因为某些格式特性可能在旧版本中可用。例如,f-strings在3.6+才有,而某些格式选项可能在后续版本中添加。总结:需要分门别类整理格式说明符,提供实用示例,覆盖各种数据类型和常见应用场景,确保信息结构清晰,方便用户快速查找和参考。</think>以下是Python f-strings格式化功能的完整对照表及工程实践指南: --- ### 一、通用格式语法 ```python f"{value:[填充][对齐][符号][#][0][宽度][千分位][.精度][类型]}" ``` --- ### 二、核心格式化对照表 #### 1. 字符串格式化 | 格式规范 | 示例 | 输出 | |---------|------|-----| | `<` 左对齐 | `f"{'text':<10}"` | `text ` | | `>` 右对齐 | `f"{3.14:>10}"` | ` 3.14` | | `^` 居中对齐 | `f"{'center':^10}"` | ` center ` | | `填充字符` | `f"{'alert':*^10}"` | `**alert***` | #### 2. 数值类型格式化 | 类型 | 格式符 | 示例 | 输出 | |------|--------|------|-----| | 整数 | `d` | `f"{42:04d}"` | `0042` | | 浮点数 | `f` | `f"{3.1415:.2f}"` | `3.14` | | 科学计数 | `e` | `f"{0.001:.2e}"` | `1.00e-03` | | 百分比 | `%` | `f"{0.875:.1%}"` | `87.5%` | | 二进制 | `b` | `f"{10:#b}"` | `0b1010` | | 十六进制 | `x` | `f"{255:#04x}"` | `0xff` | #### 3. 特殊数值处理 | 功能 | 格式规范 | 示例 | 输出 | |------|----------|------|-----| | 千分位 | `,` | `f"{1234567:,}"` | `1,234,567` | | 符号控制 | `+` | `f"{-42:+}"` | `-42` | | 正数空格 | ` ` | `f"{42: }"` | ` 42` | | 进制前缀 | `#` | `f"{15:#o}"` | `0o17` | #### 4. 日期时间格式化 ```python from datetime import datetime now = datetime.now() print(f"{now:%Y-%m-%d %H:%M:%S}") # 2024-07-15 14:30:00 ``` --- ### 三、高级用法示例 #### 1. 动态格式参数 ```python def format_temp(temp, unit='C'): return f"{temp:.1f}°{unit}" print(format_temp(23.456)) # 23.5°C ``` #### 2. 嵌套格式化 ```python width = 10 prec = 3 value = 3.1415926 print(f"Pi: {value:{width}.{prec}f}") # Pi: 3.142 ``` #### 3. 表达式计算 ```python items = [("Apple", 1.99), ("Banana", 0.79)] for name, price in items: print(f"{name.upper():<8} ${price * 1.1:.2f}") # 含税价格 ``` #### 4. 调试模式(Python 3.8+) ```python x = 42 print(f"{x=} {x*2=}") # x=42 x*2=84 ``` --- ### 四、工程实践案例 #### 1. 财务报告 ```python transactions = [ ("2024-Q1", 1234567.89), ("2024-Q2", 2345678.12) ] for period, amount in transactions: print(f"{period} | ${amount:>15,.2f}") # 输出: # 2024-Q1 | $ 1,234,567.89 # 2024-Q2 | $ 2,345,678.12 ``` #### 2. 内存地址显示 ```python def format_address(addr, bits=64): return f"0x{addr:0{bits//4}x}" print(format_address(0xdeadbeef)) # 0x00000000deadbeef ``` #### 3. 科学实验数据 ```python data = { "temperature": 23.456, "pressure": 101325, "voltage": 3.141592e-3 } for k, v in data.items(): print(f"{k.upper():<12} {v:#.4g}") # TEMPERATURE 23.46 # PRESSURE 1.013e+05 # VOLTAGE 3.142e-03 ``` --- ### 五、格式规范速查卡 | 场景 | 格式模式 | 示例输出 | |------|----------|----------| | 财务金额 | `f"${value:,.2f}"` | $1,234.56 | | 内存地址 | `f"0x{addr:08x}"` | 0x0000abcd | | 科学计数 | `f"{0.000314:.3e}"` | 3.140e-04 | | 进度显示 | `f"{current/total:.1%}"` | 75.5% | | 对齐填充 | `f"{'ERROR':#^20}"` | #####ERROR##### |
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值