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

Python中在函数内创建常量字典是否高效?

Python函数内的常量字典会被自动优化吗?

默认情况下,Python不会对这种函数内的常量字典做创建优化——每次调用check_map时,value_map都会被重新创建一个新的字典对象。

这是因为Python函数体的代码会在每次调用时逐行执行,字典字面量{"val1": ...}每次执行到都会生成一个新的实例,哪怕它的内容完全固定。

你可以用id()函数验证这一点:

def check_map(val):
    value_map = {"val1": "newval1", "val2": "newval2", "val3": "newval3"}
    print(id(value_map))  # 每次调用打印的id都不同,说明是新对象
    val = value_map.get(val, val)
    return val

check_map("val1")
check_map("val2")

如果想避免重复创建字典,有几种常见的优化方式:

  1. 将字典移到函数外部(模块级常量)
    这是最直观的方式,字典只会在模块加载时创建一次,后续函数调用直接复用:
# 模块级常量,仅初始化一次
value_map = {"val1": "newval1", "val2": "newval2", "val3": "newval3"}

def check_map(val):
    val = value_map.get(val, val)
    # other stuff
    return val
  1. 利用函数默认参数的求值时机
    Python的函数默认参数是在函数定义时求值的,而不是每次调用时。可以把字典作为默认参数传入(如果不想暴露给外部调用者,可以用一个私有参数名):
def check_map(val, _value_map={"val1": "newval1", "val2": "newval2", "val3": "newval3"}):
    val = _value_map.get(val, val)
    # other stuff
    return val

注意:这种方式仅限字典是完全不可变的场景,如果后续代码有修改这个字典的操作,会影响所有函数调用(因为所有调用共享同一个字典实例)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 01:07:42