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_func
和 my_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
我有以下生成 "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_func
和 my_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