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

如何获取Python lambda表达式中绑定的外部变量的实际值而非源码

解决方案

inspect.getsource只会返回函数的静态源码文本,不会解析运行时的变量绑定值,lambda引用的外部变量实际值可以通过函数对象的内置属性直接获取,分两种场景处理:

场景1:index、val是全局作用域变量

如果你的示例代码直接定义在全局作用域,变量存储在函数的__globals__字典中,直接取值即可:

index = 1 
val = 0
f = lambda a: a[index] == val

# 直接获取全局变量值
print(f.__globals__['index']) # 输出1
print(f.__globals__['val']) # 输出0

场景2:index、val是闭包作用域的自由变量

如果lambda定义在某个函数内部形成闭包(变量属于外部函数的局部变量),变量值存储在__closure__属性的cell对象中,配合__code__.co_freevars可以获取变量名和对应绑定值:

def create_lambda():
    index = 1 
    val = 0
    return lambda a: a[index] == val

f = create_lambda()

# 获取所有自由变量名称
free_var_names = f.__code__.co_freevars
# 遍历匹配变量名和绑定值
for name, cell in zip(free_var_names, f.__closure__):
    print(f"{name} = {cell.cell_contents}")
'''
输出结果:
index = 1
val = 0
'''

通用查询方法

你可以用下面的代码一次性打印lambda中所有外部引用变量的实际值,自动适配全局和闭包场景:

def get_lambda_bound_values(func):
    bound_vals = {}
    # 先处理闭包自由变量
    if func.__closure__:
        free_vars = func.__code__.co_freevars
        for name, cell in zip(free_vars, func.__closure__):
            bound_vals[name] = cell.cell_contents
    # 处理全局变量
    for name in func.__code__.co_names:
        if name in func.__globals__:
            bound_vals[name] = func.__globals__[name]
    return bound_vals

# 调用示例
print(get_lambda_bound_values(f)) # 输出 {'index':1, 'val':0}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:06:04