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

Python:如何将模块函数的返回类型及内部变量传递至调用脚本?

问题解析与解决方案

我有一个包含函数func定义的脚本module.py,可通过import module和module.a的方式在另一个脚本script.py中获取模块的局部变量a。请问是否有办法获取函数func的返回类型以及函数内部的局部变量b、n,并将它们传递到调用脚本script.py中?

你的模块代码(module.py)

a = 10 # Module Script Local Variable
def func( n ):
    print(n + 20)
    b = 20 # Module Script Function Local Var.
    return n, b
print(a) # Gives 10
# 注:原代码末尾的print(n,...未完成,这里按现有内容保留)

好的,咱一步步解决你的问题:


一、如何拿到函数func内部的局部变量b和n?

函数内部的局部变量(比如b和传入的参数n)本来是函数自己的“私有财产”,外部脚本直接是拿不到的,但有两种靠谱的方式可以获取:

1. 最规范的方式:用函数返回值传递

看你的代码,func其实已经把n和b作为返回值返回了啊!这完全是Python里传递内部变量的标准操作,直接在script.py里调用函数并接收返回值就行:

# script.py
import module

# 调用func的时候直接接收返回的n和b
returned_n, returned_b = module.func(5)
print(f"从func里拿到的n: {returned_n}, b: {returned_b}")

运行这个脚本,你就能看到这两个变量的值了,这也是最推荐的做法,符合Python的作用域设计逻辑。

2. 调试/特殊场景:用inspect模块读取栈帧(不推荐生产用)

如果出于某些特殊原因,你不想修改原函数的返回逻辑,那可以用Python的inspect模块去“窥探”函数执行时的内部作用域。但这种方式属于技巧性操作,可读性差,只适合调试或者临时需求:

# script.py
import module
import inspect
import sys

def grab_func_locals(func, *args):
    target_frame = None
    try:
        # 定义一个追踪函数,捕获函数返回时的栈帧
        def trace_handler(frame, event, arg):
            nonlocal target_frame
            if event == 'return':
                target_frame = frame
            return trace_handler
        
        # 设置追踪器并执行函数
        sys.settrace(trace_handler)
        func(*args)
        # 从栈帧里取出局部变量字典
        return target_frame.f_locals
    finally:
        # 用完记得关闭追踪器
        sys.settrace(None)

# 调用示例
func_locals = grab_func_locals(module.func, 5)
print(f"通过栈帧拿到的n: {func_locals['n']}, b: {func_locals['b']}")

二、如何获取func的返回类型?

这个分两种情况:

1. 如果函数有类型注解:直接读取注解

要是你给func加了类型提示(现在写Python代码很推荐这么做),可以直接通过函数的__annotations__属性拿到返回类型:

# 修改后的module.py
def func(n: int) -> tuple[int, int]:
    print(n + 20)
    b = 20
    return n, b

然后在script.py里:

import module
print(f"func的返回类型注解: {module.func.__annotations__.get('return')}")

2. 如果没有类型注解:执行函数后判断返回值类型

如果函数没加类型注解,那只能先调用函数拿到返回值,再用type()函数去判断它的类型:

# script.py
import module

# 先调用函数拿到返回值
func_result = module.func(5)
print(f"func返回值的整体类型: {type(func_result)}")
# 要是想知道每个返回元素的类型:
print(f"返回的n的类型: {type(func_result[0])}, b的类型: {type(func_result[1])}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:49:48