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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:05:05