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()的调用。