如何获取函数返回元素及检视函数返回的变量名称?
好问题!咱们一步步来解决你的两个疑问:
获取函数的返回元素
对于你定义的foo()函数,它返回的是一个包含两个元素的元组(Python里用逗号分隔多个返回值时,默认会自动打包成元组),获取返回元素的常用方式有两种:
直接拆包赋值:这是最直观的用法,直接把返回的元素分配给对应变量:
def foo(): x = 10 y = 20 return x, y x_val, y_val = foo() print(x_val) # 输出 10 print(y_val) # 输出 20整体接收后按索引访问:如果不确定返回元素数量,或者需要统一处理结果,可以先把返回值存为一个变量,再通过索引提取:
result = foo() print(result[0]) # 输出 10 print(result[1]) # 输出 20
检视函数返回的变量名称
这里要先明确一个核心点:当函数执行return x, y时,Python只是把x和y的值打包成元组返回,原变量名x和y并不会被保留在返回结果里——返回的只是一组值,没有自带名称信息。不过我们有几种办法实现你的需求:
方法1:修改函数返回字典(最简洁直接)
如果可以调整函数定义,让它返回一个字典,用键对应你想要的变量名,值对应变量的值,这样就能直接拿到名称:
def foo(): x = 10 y = 20 return {'x': x, 'y': y} result = foo() print(result.keys()) # 输出 dict_keys(['x', 'y']) print(result['x']) # 输出 10
这种方式简单易懂,后续维护也方便,是最推荐的简洁实现。
方法2:用AST模块解析函数源代码(不修改原函数)
如果你不想改动原函数,可以通过解析函数的抽象语法树(AST)来提取return语句里的变量名,这种方式更可靠,适合不能修改原函数的场景:
import ast def get_return_var_names(func): # 获取函数源代码 source = ast.get_source(func) # 解析为AST树 tree = ast.parse(source) # 定位函数定义节点 func_def = tree.body[0] # 定位return语句节点(假设函数最后一行是return) return_stmt = func_def.body[-1] # 提取return中的变量名 return [node.id for node in return_stmt.value.elts] # 测试你的foo函数 def foo(): x = 10 y = 20 return x, y print(get_return_var_names(foo)) # 输出 ['x', 'y']
注意:这个方法依赖函数的源代码格式,比如return语句需是单行的return x,y,如果是复杂表达式或多行写法,需要调整解析逻辑。
方法3:inspect模块结合正则(简单但鲁棒性稍弱)
另一种轻量方式是用inspect模块获取函数源代码,再用正则匹配return语句里的变量名:
import inspect import re def get_return_vars(func): source = inspect.getsource(func) # 匹配return后的变量名(适用于简单场景) match = re.search(r'return\s+(.*)', source) if match: return [var.strip() for var in match.group(1).split(',')] return [] print(get_return_vars(foo)) # 输出 ['x', 'y']
这个方法比AST更简单,但正则容易被复杂的return语句(比如带表达式、换行)干扰,适合结构简单的函数。
内容的提问来源于stack exchange,提问作者Niranjan Sonachalam
相关产品推荐
相关产品推荐

