You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Python将格式化字符串作为常量求值?解析拼接差异

Python中能否将格式化字符串预求值为常量?

先看示例代码:

def foo():
    A = 'something' + ' ' + 'good'
    B = 'is'
    C = f'{B} going on'
    return A + C

print(foo.__code__.co_consts)
# 输出:(None, 'something good', 'is', ' going on')

能不能让Python把格式化字符串求值为常量?

默认情况下不行,但可以借助第三方编译期优化工具(比如用ast模块自定义改写代码,或是类似Cython的静态编译工具)实现,但标准CPython解释器的字节码编译器不会自动做这件事。

为什么字符串拼接能被优化成常量,f-string却不行?

  • 字符串拼接的所有操作数都是编译期常量:'something'、' '、'good'都是固定字面量,Python编译器在编译函数时可以直接算出拼接结果'something good',并把它存入co_consts。
  • f-string的插值依赖运行时变量:哪怕B在代码里赋值为固定的'is',它本质是函数内的局部变量,编译器无法确保运行时它的值不会被修改(比如后续对B重新赋值、或是通过其他方式改动),所以只能在运行时才会把B的值和' going on'拼接,编译期没法提前算出完整的'is going on',因此co_consts里只有拆分后的部分。

内容的提问来源于stack exchange,提问作者OrenIshShalom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 01:03:23