Python 在函数之间传递变量
关于使用以下代码将变量从函数传递到另一个函数,我有一个问题:Python 在函数之间传递变量,python,Python,关于使用以下代码将变量从函数传递到另一个函数,我有一个问题: def Hello(): good = "Nice" return good def Bye(): print (good) Hello() Bye() 它返回“全局名称”“良好”“未定义” 我怎样才能解决这个问题? 谢谢您需要了解范围。变量good仅存在于函数Hello的范围内-此函数之外的变量未知 在您的情况下,应该将Hello的返回值存储在变量中,然后将此变量传递给函数Bye: def Hello(
def Hello():
good = "Nice"
return good
def Bye():
print (good)
Hello()
Bye()
它返回“全局名称”“良好”“未定义”
我怎样才能解决这个问题?
谢谢您需要了解范围。变量
good
仅存在于函数Hello
的范围内-此函数之外的变量未知
在您的情况下,应该将Hello
的返回值存储在变量中,然后将此变量传递给函数Bye
:
def Hello():
good = "Nice"
return good
def Bye(g):
print (g)
g = Hello()
Bye(g)
从:
作用域定义名称在块中的可见性。如果在块中定义了局部变量,则其范围包括该块。如果定义出现在功能块中,则范围将扩展到定义块中包含的任何块,除非包含的块为名称引入不同的绑定
[……]
如果根本找不到名称,将引发NameError异常。如果当前作用域是函数作用域,且名称引用的局部变量尚未绑定到使用该名称的点处的值,则会引发UnboundLocalError异常。UnboundLocalError是NameError的子类
您需要了解范围。变量
good
仅存在于函数Hello
的范围内-此函数之外的变量未知
在您的情况下,应该将Hello
的返回值存储在变量中,然后将此变量传递给函数Bye
:
def Hello():
good = "Nice"
return good
def Bye(g):
print (g)
g = Hello()
Bye(g)
从:
作用域定义名称在块中的可见性。如果在块中定义了局部变量,则其范围包括该块。如果定义出现在功能块中,则范围将扩展到定义块中包含的任何块,除非包含的块为名称引入不同的绑定
[……]
如果根本找不到名称,将引发NameError异常。如果当前作用域是函数作用域,且名称引用的局部变量尚未绑定到使用该名称的点处的值,则会引发UnboundLocalError异常。UnboundLocalError是NameError的子类
如果希望变量
good
可用于其他函数,而不必运行函数Hello
,则应将good声明为全局函数
def Hello():
global good
good = 'Nice'
...
如果希望变量
good
可用于其他函数,而不必运行函数Hello
,则应将good声明为全局函数
def Hello():
global good
good = 'Nice'
...
有一个更简单的解决方案更接近原始代码:
def Hello():
good = "Nice"
return good
def Bye():
print (good)
good = Hello()
Bye()
Python将在局部作用域中定义的变量保持为局部变量,因此除非显式返回(并存储),否则无法在函数外部读取
good
。Python也不允许写入在更大范围内定义的变量,除非将它们作为输入参数传递或使用global
指令。但是OP没有要求从另一个函数中写入good。Python确实允许从更大的范围读取变量。因此,您需要做的就是将变量good
存储在更大的范围内,OP的Hello
函数已经返回了该变量。有一个更简单的解决方案,它更接近原始代码:
def Hello():
good = "Nice"
return good
def Bye():
print (good)
good = Hello()
Bye()
Python将在局部作用域中定义的变量保持为局部变量,因此除非显式返回(并存储),否则无法在函数外部读取
good
。Python也不允许写入在更大范围内定义的变量,除非将它们作为输入参数传递或使用global
指令。但是OP没有要求从另一个函数中写入good。Python确实允许从更大的范围读取变量。因此,您只需将变量good
存储在更大的范围内,OP的Hello
函数已经返回了该变量。非常感谢。我有一个相当大的代码,没有工作,因为这一点,但现在它完全工作!!非常感谢!!很高兴它帮助了你。非常感谢你。我有一个相当大的代码,没有工作,因为这一点,但现在它完全工作!!非常感谢!!很高兴它帮助了你。