Python 更改外部函数中变量的值
如何更改外部函数中变量的值? 事实上,我有以下几点:Python 更改外部函数中变量的值,python,Python,如何更改外部函数中变量的值? 事实上,我有以下几点: def outer(): variab = "" #some code def inner(): # some code variab = "new_value" print variab 执行后,print语句应等于“new_value”。如何做到这一点? 非常感谢你的建议 首先,在这个简单的例子中,您可以从internal()返回所需的值,并在调用internal()时
def outer():
variab = ""
#some code
def inner():
# some code
variab = "new_value"
print variab
执行后,print语句应等于“new_value”。如何做到这一点?
非常感谢你的建议 首先,在这个简单的例子中,您可以从
internal()
返回所需的值,并在调用internal()
时分配它。但我们假设这是一个简化的示例,实际上您正在更改多个变量,或者返回internal
,在其他地方它将被多次调用,并且需要重新检查它的变量
在Python3中,您可以将variab
声明为nonlocal
,这将允许您更改它。在Python2中,唯一的方法是切换到使用在每次调用outer
时新创建的状态来改变对象。例如,使用列表:
def outer():
variab = [""]
#some code including, presumably, a call to inner()
def inner():
# some code
variab[0] = "new_value"
print variab[0]
可以实现更好的变体,例如,通过使variab
包含一个dict或一个带有可变\uuuu dict\uuu
的Python实例。一个优雅的习惯用法是使用内部
函数本身的\uuu dict\uuu
作为容器:
def outer():
def inner():
# some code
inner.variab = "new_value"
inner.variab = ""
#some code including, presumably, a call to inner()
print inner.variab
首先,在这个简单的例子中,您可以从
internal()
返回所需的值,并在调用internal()
时分配它。但我们假设这是一个简化的示例,实际上您正在更改多个变量,或者返回internal
,在其他地方它将被多次调用,并且需要重新检查它的变量
在Python3中,您可以将variab
声明为nonlocal
,这将允许您更改它。在Python2中,唯一的方法是切换到使用在每次调用outer
时新创建的状态来改变对象。例如,使用列表:
def outer():
variab = [""]
#some code including, presumably, a call to inner()
def inner():
# some code
variab[0] = "new_value"
print variab[0]
可以实现更好的变体,例如,通过使variab
包含一个dict或一个带有可变\uuuu dict\uuu
的Python实例。一个优雅的习惯用法是使用内部
函数本身的\uuu dict\uuu
作为容器:
def outer():
def inner():
# some code
inner.variab = "new_value"
inner.variab = ""
#some code including, presumably, a call to inner()
print inner.variab
希望这有帮助
希望这能有所帮助。最干净的方法是明确地做到这一点:
def outer():
variab = ""
#some code
def inner(variab):
# some code
variab = "new_value"
return variab
variab = inner(variab)
print variab
现在,您不必担心范围问题,可以单独测试internal
等。读者很清楚,internal
需要访问variab
才能完成其任务,调用后variab
可能会有所不同
见:“显式优于隐式”;“可读性很重要”。实现这一点的最干净的方法是显式地:
def outer():
variab = ""
#some code
def inner(variab):
# some code
variab = "new_value"
return variab
variab = inner(variab)
print variab
现在,您不必担心范围问题,可以单独测试internal
等。读者很清楚,internal
需要访问variab
才能完成其任务,调用后variab
可能会有所不同
见:“显式优于隐式”;“可读性很重要”。你从来没有调用过internal()
,那么为什么那一行应该执行?@Cyber#一些代码
可能会包含对internal()
的调用,而你从来没有调用过internal()
,那么为什么那一行应该执行?@Cyber#一些代码
可能会包含对internal()的调用。