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

能否在Numba中使用Python locals()函数?报错问题咨询

问题解答

核心结论

Numba的njit(nopython模式)完全不支持locals()。原因很简单:nopython模式要求编译阶段就确定所有变量的类型和结构,而locals()是Python里动态操作局部变量的特性,根本没法被Numba的静态类型推断系统处理,这就是你碰到那个TypingError的根源。

解决方案:用容器替代动态变量

别再用locals()搞动态变量了,换成Numba支持的字典或列表来存数据就行,效果一样,还能正常加速。给你两种改写方式:

方案1:用字典(和原逻辑最接近)

import numba

@numba.njit
def make_variables():
    vars_dict = {}
    for i in range(6, 9):
        vars_dict[f"my_variable_{i}"] = i
    for i in range(6, 9):
        res = vars_dict[f"my_variable_{i}"] + 2
        yield res

print(list(make_variables()))

方案2:用列表(性能更优)

既然你的变量后缀是连续数字,用列表比字典效率更高——Numba对列表的优化比字典好得多:

import numba

@numba.njit
def make_variables():
    vars_list = []
    for i in range(6, 9):
        vars_list.append(i)
    for val in vars_list:
        res = val + 2
        yield res

print(list(make_variables()))

额外提醒

  • Numba的nopython模式只支持Python的一个子集,像locals()、globals()这种动态特性都被砍掉了,就是为了换极致的性能。
  • 要是你非想用动态特性,可以试试numba.jit(不加nopython参数),但这会触发对象模式,基本没什么性能提升,不建议这么干。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:20:47