非常接近this question(但不是重复的IMHO)

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

In [2]: foo.__code__.co_consts
Out[2]: (None, 'something good', 'is', ' going on')

我能以某种方式帮助Python将格式化的字符串作为常量求值吗?

由于运行库能够计算字符串连接(从计算'something good'可以明显看出),我很好奇为什么它不能将格式化的字符串计算为'is going on'

推荐答案

代码对象的co_consts列表是在编译时创建的,而f字符串的求值是在运行时执行的,这就是为什么只将f字符串的常量部分存储为常量,以便在运行时解释器可以将这些常量与大括号中的表达式的求值联接起来.

在将'something' + ' ' + 'good'存储为一个常量之前,'something' + ' ' + 'good'的计算结果为'something good',这是编译器优化的结果.使用不同的Python实现,它可以很容易地存储为三个常量,而不是一个常量,并且它们的串联计算将推迟到运行时进行.

Python相关问答推荐

在for循环中保存和删除收件箱

如何将 map 数组组合到pyspark中每列的单个 map 中

尽管进程输出错误消息,subProcess.check_call的CalledProcess错误.stderr为无

如何将不同长度的新列添加到现有的框架中

仅对matplotlib的条标签中的一个条标签应用不同的格式

inspect_asm不给出输出

已删除的构造函数调用另一个构造函数

Pydantic:如何将对象列表表示为dict(将列表序列化为dict)

用gekko解决的ADE方程系统突然不再工作,错误消息异常:@错误:模型文件未找到.& &

理解Python的二分库:澄清bisect_left的使用

使用numpy提取数据块

为什么默认情况下所有Python类都是可调用的?

OR—Tools中CP—SAT求解器的IntVar设置值

如何在WSL2中更新Python到最新版本(3.12.2)?

梯度下降:简化要素集的运行时间比原始要素集长

Python+线程\TrocessPoolExecutor

用砂箱开发Web统计分析

如何合并两个列表,并获得每个索引值最高的列表名称?

将scipy. sparse矩阵直接保存为常规txt文件

ConversationalRetrivalChain引发键错误