NameError: while using functools partial inside a loop

NameError: while using functools partial inside a loop

我有以下生成 "E NameError: name 'local_func' is not defined" 的代码,而 class 正在初始化

(这只是一个简化的例子),我做错了什么?

from functools import partial

def glob_func(a, b, c, x):
    return 1000 * a + 100 * b + 10 * c + x

class MyClass:

    local_func = partial(glob_func, 3, 1, 4)

    my_list = [local_func(num)
        for num in (
            40,
            70,
            90
        )]

注意:以下是有效的...为什么不是循环?

my_list = [local_func(40),
           local_func(70),
           local_func(90)]

使用 class 与您在此处尝试的不同。

我希望这是你需要的:

from functools import partial

def glob_func(a, b, c, x):
return 1000 * a + 100 * b + 10 * c + x


local_func = partial(glob_func, 3, 1, 4)
my_list = [(local_func(num)) for num in (40,70,90)]
print my_list

输出:

[3180, 3210, 3230]

您收到上述错误,因为即使您已经在 class 中初始化了 local_funcmy_list,但它们仍然可以访问。这可以被认为类似于 Python 中的函数声明和调用。当你这样做时

def sum(a, b):
  c = a + b
  return c

然后你尝试直接打印c,报错找不到变量c。这是因为函数还没有被调用,它只是被声明了。因此在函数调用之前不能访问函数的局部变量。

同样,您的 class 尚未调用(技术上,实例化)。因此,您可以将 local_func 作为 MyClass.local_func 访问,将 my_list 作为 MyClass.my_list 访问,或者您只需删除 class 声明,如@Siva

所示

与 functools partial 无关...问题在这里讨论,抱歉

Accessing class variables from a list comprehension in the class definition