Python:如何在函数间按名称访问多返回值(避开global与类)
问题解答
你的代码是完全可行的,不过还有几种更符合Python风格的实现方式,同时能解决你关于按名称引用变量、是否必须接收所有返回值的疑问,下面逐一说明:
1. 用字典返回键值对(按名称引用)
让函数返回字典,调用时直接通过键名获取对应值,完全无需依赖返回值的顺序:
def myfunct_01(): return { "my_var_01": 1, "my_var_02": "stuff", "my_var_03": (10, 9, 8) } def myfunct_02(): result = myfunct_01() my_var_04 = result["my_var_01"] + 1 my_var_05 = result["my_var_03"][0] - result["my_var_03"][1] return my_var_04, my_var_05
这种方式灵活度高,不需要提前拆包所有变量,想用哪个就取哪个。
2. 拆包时忽略不需要的变量
如果继续用元组返回,不需要接收所有变量的话,可以用下划线_占位忽略:
def myfunct_02(): # 只取第一个和第三个变量,忽略第二个 my_var_01, _, my_var_03 = myfunct_01() my_var_04 = my_var_01 + 1 my_var_05 = my_var_03[0] - my_var_03[1] return my_var_04, my_var_05
要是需要忽略多个连续变量,还可以用*_(Python 3+支持):
# 只取第一个变量,忽略后面所有返回值 my_var_01, *_ = myfunct_01()
3. 用collections.namedtuple(轻量类替代方案)
虽然你说现阶段不想用类,但namedtuple是一种轻量的不可变结构,兼具元组的简洁和字典的名称访问特性,不需要写完整的类定义:
from collections import namedtuple def myfunct_01(): MyVars = namedtuple("MyVars", ["var1", "var2", "var3"]) return MyVars(var1=1, var2="stuff", var3=(10,9,8)) def myfunct_02(): vars = myfunct_01() my_var_04 = vars.var1 + 1 my_var_05 = vars.var3[0] - vars.var3[1] return my_var_04, my_var_05
总结
你的原始写法完全没问题,但上面几种方法能让代码更清晰、易维护:
- 简单场景用字典或下划线拆包足够;
- 需要更严谨的结构时,
namedtuple是不错的选择。
内容的提问来源于stack exchange,提问作者formerlolz
相关产品推荐
相关产品推荐

