python-使用嵌套函数更改变量

python-使用嵌套函数更改变量,python,python-3.x,Python,Python 3.x,请原谅我不熟悉python。我觉得这应该是可能的,但我已经在这个网站(以及其他网站)上浏览过了。我似乎无法用嵌套函数直接更改函数中的变量。我试过了 global 无济于事。我可以重新分配它来解决这个问题,但它会在以后引起问题。 例如: 我正试图远离你 def Grrr(): a = 10 def nested(c): b = 5 c -= b a = nested(a) return a 如果这真的是最好的方法,那么我想我会用

请原谅我不熟悉python。我觉得这应该是可能的,但我已经在这个网站(以及其他网站)上浏览过了。我似乎无法用嵌套函数直接更改函数中的变量。我试过了

global 
无济于事。我可以重新分配它来解决这个问题,但它会在以后引起问题。
例如:

我正试图远离你

def Grrr():
    a = 10
    def nested(c):
        b = 5
        c -= b
    a = nested(a)
    return a

如果这真的是最好的方法,那么我想我会用它。我只是觉得这里的人比我强得多。

你可以避免使用论点,而是使用:

但是,如果您想传入一个变量进行更改,则无法执行†;Python在C++意义上没有引用。
†如果没有可怕的黑客攻击,您可以避免使用参数,而是使用:

但是,如果您想传入一个变量进行更改,则无法执行†;Python在C++意义上没有引用。
†没有可怕的黑客行为

我想看看这种可怕的黑客行为。你是在说构建一个像
[thing]
这样的包装器对象,并传递它,而不是
thing
(很像Python的闭包实现使用
单元格
对象),或者,实际上有没有一种方法可以找出一个参数来自哪个变量,然后弄乱堆栈来改变它的内容呢?这是一个真正的美的东西,正是我想要的。谢谢。@user2357112:我正考虑在堆栈上遍历,直到找到函数为止,查看它在堆栈框架中当前执行的任何表达式的AST,以找到调用它的变量,并修改堆栈框架的局部变量
dict
。@user2357112:我开始编写概念证明。事实证明,虽然可能,但这是非常困难的:我决定以最明显的方式将问题简化为使用单个参数调用的函数。在修改该帧的局部变量之前,所有操作都是有效的。事实证明,Python不会从字典中读回任何更改。真正的局部变量隐藏在Python难以访问的地方。我开始写一些
ctypes
代码来获取它,但是有一些边缘情况,很多情况取决于Python是如何编译的。我希望看到这种可怕的黑客行为。你是在说构建一个像
[thing]
这样的包装器对象,并传递它,而不是
thing
(很像Python的闭包实现使用
单元格
对象),或者,实际上有没有一种方法可以找出一个参数来自哪个变量,然后弄乱堆栈来改变它的内容呢?这是一个真正的美的东西,正是我想要的。谢谢。@user2357112:我正考虑在堆栈上遍历,直到找到函数为止,查看它在堆栈框架中当前执行的任何表达式的AST,以找到调用它的变量,并修改堆栈框架的局部变量
dict
。@user2357112:我开始编写概念证明。事实证明,虽然可能,但这是非常困难的:我决定以最明显的方式将问题简化为使用单个参数调用的函数。在修改该帧的局部变量之前,所有操作都是有效的。事实证明,Python不会从字典中读回任何更改。真正的局部变量隐藏在Python难以访问的地方。我开始编写一些
ctypes
代码来获得它,但是有一些边缘情况,很多情况取决于Python是如何编译的。
def Grrr():
    a = 10
    def nested(c):
        b = 5
        c -= b
    a = nested(a)
    return a
def Grrr():
    a = 10
    def nested():
        nonlocal a
        b = 5
        a -= b
    nested()
    return a