将变量从函数传递给函数

时间:2017-06-25 14:00:40

标签: python

我有一个关于使用以下代码将变量从函数传递到另一个函数的问题:

def Hello():
    good = "Nice"
    return good

def Bye():
    print (good)

Hello()
Bye()

它返回"全球名称"好"未定义"

我该如何解决这个问题? 感谢

4 个答案:

答案 0 :(得分:1)

您需要了解范围。变量good仅存在于函数Hello的范围内 - 在此函数之外,变量未知。

在您的情况下,您应该将Hello的返回值存储在变量中 - 然后将此变量传递给函数Bye

def Hello():
    good = "Nice"
    return good

def Bye(g):
    print (g)

g = Hello()
Bye(g)

来自docs

  

范围定义块中名称的可见性。如果在块中定义了局部变量,则其范围包括该块。如果定义发生在功能块中,则范围将扩展到定义块中包含的任何块,除非包含的块为名称引入了不同的绑定。

     

[...]

     

如果根本找不到名称,则会引发NameError异常。如果当前作用域是函数作用域,并且名称引用尚未绑定到使用该名称的值的本地变量,则会引发UnboundLocalError异常。 UnboundLocalError是NameError的子类。

答案 1 :(得分:1)

如果您希望变量good可用于其他函数而不必运行函数Hello,则应将good声明为全局函数。

def Hello():
    global good
    good = 'Nice'
    ...

答案 2 :(得分:1)

有一个更简单的解决方案更紧密地遵循原始代码:

def Hello():
    good = "Nice"
    return good

def Bye():
    print (good)

good = Hello()
Bye()

Python将本地范围内定义的变量保存在本地,因此除非明确返回(并存储它),否则不能在函数外部读取good。 Python也不允许您写入更大范围内定义的变量,除非您将它们作为输入参数传递或使用global指令。但是OP没有要求从另一个函数中写出好的东西。 Python DOES允许从更大的范围读取变量。所以你需要做的就是将变量good存储在更大的范围内,无论如何它已经由OP的Hello函数返回。

答案 3 :(得分:0)

使用此功能,您必须使用每个幻灯片中每个功能都可访问的全局变量。这是一个视频,它将向您展示如何完成您正在寻找的东西。 https://youtu.be/lcEm0R7mwJk。希望你能得到你想要的答案。

Denis Granulo。