Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从封闭范围声明变量?_Python_Python 2.7 - Fatal编程技术网

Python 如何从封闭范围声明变量?

Python 如何从封闭范围声明变量?,python,python-2.7,Python,Python 2.7,我如何编写类似以下工作的代码?我想在封闭的函数范围内引用一个变量进行赋值 def outer(): x = 0 def inner(): x += 1 inner() 编写的代码给出了一个UnboundLocalError。我理解为什么会出现这个错误,我只是不知道如何表明x来自包装范围。你不能以干净的方式做你要求的事情。global语句对您没有任何帮助。您将希望按照以下方式对其进行编码: def outer(): x = 0 def

我如何编写类似以下工作的代码?我想在封闭的函数范围内引用一个变量进行赋值

def outer():
    x = 0

    def inner():
        x += 1

    inner()

编写的代码给出了一个
UnboundLocalError
。我理解为什么会出现这个错误,我只是不知道如何表明
x
来自包装范围。

你不能以干净的方式做你要求的事情。
global
语句对您没有任何帮助。您将希望按照以下方式对其进行编码:

def outer():
    x = 0

    def inner(x):
        return x + 1

    x = inner(x)
这样做的另一个好处是,可以明确说明数据是如何传入和传出函数的

也许您需要将
x
替换为状态可以改变的对象。

您可以执行以下操作:

def outer():
    x = [0]

    def inner():
        x[0] += 1

    inner()

您不能重新绑定非本地变量,但可以对其进行变异。

您不能重新绑定(分配)非本地/非全局范围内的变量。我想我需要Python 3的
非本地
关键字。如果它是一个简单的函数,则可能是重复的,但它更像是一个状态更新函数,它可以修改多个项目并执行其他操作。恐怕你的愿望不会改变语言所提供的功能。