无法使用 python 闭包 [重复]

问题描述 投票:0回答:0

我有以下代码:

class A:
    pass


def set_event(a: A):
    j = 4

    def event():
        print(f"event function j is {j}")

    a.method = event
    j = 999


b = A()
set_event(b)
b.method() # prints `event function j is 999`

我正在寻找一种允许重新定义 j 的实现方法,但不更改它在定义

event()
时捕获的值。这是,我要打印这段代码
event function j is 4


这是我正在尝试做的另一个例子:

class A:
    pass


def set_event(list_a):
    for i in range(len(list_a)):

        # def event():
        #     print(f"event function j is {j}")
        # 
        # === OR ===
        event = lambda: print(f"event function j is {j}")

        list_a[i].method = event
        j = 999


list_a = [A() for i in range(10)]
set_event(list_a)
[a.method() for a in list_a]

输出:

event function j is 999
event function j is 999
event function j is 999
event function j is 999
event function j is 999
event function j is 999
event function j is 999
event function j is 999
event function j is 999
event function j is 999
python closures
© www.soinside.com 2019 - 2024. All rights reserved.