Python 如何从函数&x27;访问/修改变量;结束?

Python 如何从函数&x27;访问/修改变量;结束?,python,closures,Python,Closures,如果我有一个函数包含一些非局部变量(在闭包中),我如何访问该变量?我可以修改它吗?如果可以,如何修改?下面是这样一个函数的示例: def outer(): x=1 def内部(y): 非局部x 返回x+y 返回内部 内=外() #如何获取/更改内部x的值? (如果这已经在其他地方得到了回答,我表示歉意;我找不到它,所以我想在我找到答案后与大家分享)函数的封闭变量作为元组存储在\uuu closure\uu属性中。变量存储为单元格类型,它似乎只是变量本身的可变容器。您可以访问变量acell存储为

如果我有一个函数包含一些非局部变量(在闭包中),我如何访问该变量?我可以修改它吗?如果可以,如何修改?下面是这样一个函数的示例:

def outer():
x=1
def内部(y):
非局部x
返回x+y
返回内部
内=外()
#如何获取/更改内部x的值?

(如果这已经在其他地方得到了回答,我表示歉意;我找不到它,所以我想在我找到答案后与大家分享)

函数的封闭变量作为元组存储在
\uuu closure\uu
属性中。变量存储为
单元格
类型,它似乎只是变量本身的可变容器。您可以访问变量a
cell
存储为
cell.cell\u contents
。由于单元格是可变的,因此可以通过更改单元格内容来更改函数非局部变量的值。下面是一个例子:

def outer():
x=1
def内部(y):
非局部x
返回x+y
返回内部
内=外()
打印(内部(2))#3
打印(内部.uuuu闭包uuuuuuu)#(,)
打印(内部.uu闭包uu[0].单元格内容)#1
内部.\uuuu闭包\uuuu[0]。单元格内容=10
打印(内部(2))#12
打印(内部.uuu闭包uuu[0].单元格内容)#10

编辑-上述答案适用于Python 3.7+。对于其他Python版本,您可以以相同的方式访问闭包,但是您不能修改所包含的变量(跟踪设置单元格值的Python问题)。

我得到了
AttributeError:“cell”对象的属性“cell\u contents”不能用CPython 3.6.7写入。使用PyPy6,我得到了
AttributeError:readonly属性“cell\u contents”
您在Python上使用的哪个版本允许写入
cell\u contents
?或者我必须配置一些东西才能工作吗?啊,我没有检查任何其他版本;我运行时使用的是3.7。我现在就更新。