如何创建一个内联函数来修改 Python 中的变量?

时间:2021-08-01 19:46:35

标签: python function methods lambda parameter-passing

假设我有一个看起来像这样的类:

class Foo:
    def __init__(self, method):
        self.method = method

    def do_action(self):
        self.method()

我想按如下方式实例化它:

some_var = False

def bar():
    # Modifies existing variable's value
    global some_var
    some_var = True
foo = Foo(bar)

如何在不必定义 bar() 方法的情况下做到这一点? 我尝试了以下方法,但不起作用。

foo = Foo(lambda: (some_var := True))

当我这样做时,IDE 告诉我需要一个标识符。提前致谢!

编辑: 感谢那些回答的人,但是我并没有真正找到我需要的东西。不确定这是否是最佳实践,但我最终使用了 python 的 exec 并且它按预期工作:

foo = Foo(lambda: exec("some_var = True"))

1 个答案:

答案 0 :(得分:0)

如果想法是让 bar 能够修改实例属性,则让 bar 使用 self 参数,以便 do_action 可以告诉它它正在操作哪个实例.您不能在 lambda 内进行变量赋值,因此请使用 __setattr__:

class Foo:
    def __init__(self, method):
        self.method = method
        self.some_var = False

    def do_action(self):
        self.method(self)


foo = Foo(lambda self: self.__setattr__("some_var", True))
foo.do_action()
print(foo.some_var)  # True