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

如何不调用函数即可获取Python嵌套内部函数中定义的变量值

问题解答

首先明确核心前提:Python 中函数内部的代码逻辑仅在函数被调用执行时才会实际运行,对应作用域内的变量也只有这时候才会被创建赋值:

  • 你代码里的func2函数定义本身是写在func1内部的,只有调用func1时才会生成func2这个函数对象
  • func2内部的str变量的赋值操作,只有调用func2时才会执行,对应的值才会在内存中生成

完全不调用func1和func2的前提下,无法通过正常的运行时变量访问方式拿到这个str的值,只有通过静态解析源代码的方式提取:

方案:静态解析函数源码提取值

可以用inspect模块获取func1的源码,再通过正则匹配提取func2内部的str赋值内容,示例代码如下:

import inspect
import re

def func1():
    def func2(x, y, z):
#        global str
        str = "Xin chao`"
#    func2()
#func1()

# 获取func1的源码
func1_source = inspect.getsource(func1)
# 正则匹配func2内部str的赋值
match = re.search(r'def func2.*?:.*?str\s*=\s*"(.*?)"', func1_source, re.DOTALL)
if match:
    target_str = match.group(1)
    print("Result:", target_str)

运行后输出结果为:

Result: Xin chao`

调整代码结构的可选方案

如果可以修改原始代码结构,不需要严格限制不调用函数,可选择以下更稳定的实现方式:

# 方案1:常量外提到全局作用域
FUNC2_TARGET_STR = "Xin chao`"
def func1():
    def func2(x, y, z):
        str = FUNC2_TARGET_STR

print("Result:", FUNC2_TARGET_STR)

# 方案2:返回内部函数对象,从函数常量池提取(仅调用func1,不调用func2执行业务逻辑)
def func1():
    def func2(x, y, z):
        str = "Xin chao`"
    return func2

# 仅获取func2对象,不执行func2逻辑
func2_obj = func1()
# 从func2的代码常量池中提取对应字符串
target_str = [const for const in func2_obj.__code__.co_consts if isinstance(const, str) and const == "Xin chao`"][0]
print("Result:", target_str)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:36:03