我有一个关于使用以下代码将变量从函数传递到另一个函数的问题:
def Hello():
good = "Nice"
return good
def Bye():
print (good)
Hello()
Bye()
它返回"全球名称"好"未定义"
我该如何解决这个问题? 感谢
答案 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。