Python - 如何从返回多个变量值的不同函数访问分配给一个函数中变量的值

Python - how to access values assigned to variables in one function from a different function that returns multiple variable values

提问人:formerlolz 提问时间:4/4/2023 最后编辑:formerlolz 更新时间:4/5/2023 访问量:74

问:

不熟悉 Python,并尝试不再使用关键字作为在函数之间传递变量值的一部分。global

我知道这会返回一个元组 - 但我希望能够引用我按名称而不是通过索引调用的变量,在我学习的这个阶段,我想避免上课。return

下面的简化代码示例是一种可行的方法,还是有更标准或“pythonic”的方法?似乎这需要包含被调用函数返回的所有变量?

到目前为止 - 这是我找到的唯一一种在不涉及索引或类的函数之间传递多个变量值的其他方法。

def myfunct_01():
    
    my_var_01 = 1
    my_var_02 = "stuff"
    my_var_03 = (10 , 9 , 8)
    
    return my_var_01, my_var_02, my_var_03

myfunct_01()

def myfunct_02():
    
    my_var_01, my_var_02, 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

myfunct_02()
python 函数 变量 global-variables global

评论

1赞 Frank Yellin 4/5/2023
你的问题是什么?当你这样做时,你可能希望使用更好的变量名称。返回的三件事是什么。您也可以替换为 ,这是 Python 表示“我忽略此值”的标准方式。my_var_01, my_var_02, my_var_03 = ...my_funct_01my_var_02_
1赞 buran 4/5/2023
从技术上讲,您不会在函数之间传递任何内容,因为您的函数没有参数,因此在调用它们时不会接受任何参数。在定义之前对单独文件的调用是多余的。myfunct_01()myfunct_02
0赞 slothrop 4/5/2023
如果要按命名键访问结果,可以让函数返回字典而不是元组。但是,返回一个元组并用类似的东西内联解压缩它是非常 pythonic 的。如前所述,如果你使用更有意义的变量名称,这可能会在你的心智模型中更好地“点击”。my_var_01, my_var_02, my_var_03 = myfunct_01()
0赞 buran 4/5/2023
此外,您还应该了解范围的概念。、 中定义的是该函数的本地定义。此外,最后一行将调用该函数,但您只是丢弃返回的值my_var_01my_var_02my_var_03myfunct_02myfunct_02()
0赞 formerlolz 4/5/2023
仅供参考 - 由于这已被多次调用 - 我使用这些变量名称来尝试使我的代码示例简单明了。绝对不会做这个 IRL。

答:

0赞 rajkumar_data 4/5/2023 #1

您可以使用 python 字典通过将变量作为键来引用变量的名称。

def myfunct_01():
    d1 = {}
    d1['my_var_01'] = 1
    d1['my_var_02'] = "stuff"
    d1['my_var_03'] = (10 , 9 , 8)
    
    return d1

myfunct_01()

def myfunct_02():
    
    d1 = myfunct_01()
    my_var_01 = d1['my_var_01']
    my_var_02 = d1['my_var_02']
    my_var_03 = d1['my_var_03']
    
    d2 = {}
    d2['my_var_04'] = my_var_01 + 1
    d2['my_var_05'] = my_var_03[0] - my_var_03[1]

    return d2

myfunct_02()
0赞 Coder Cat 4/5/2023 #2

您可以使用解构赋值,这非常简单:

first, second = (1,2)
print(fist, second)
# 1 2

因此,在您的示例中,您可以像这样调用函数:

my_var_01, my_var_02, my_var_03 = myfunct_01()

您也可以解压缩列表中的部分项目。

first, *rest = (1,2,3,4)
print(first, rest)
# 1 [2,3,4]