Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python NameError:在循环内使用functools时发生错误_Python_Python 3.x_Functools - Fatal编程技术网

Python NameError:在循环内使用functools时发生错误

Python NameError:在循环内使用functools时发生错误,python,python-3.x,functools,Python,Python 3.x,Functools,我有以下代码在类初始化时生成“E NameError:name'local_func'未定义” (这只是一个简单的例子),我做错了什么 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 = [loc

我有以下代码在类初始化时生成“E NameError:name'local_func'未定义”

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

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
        )]
注意:下面的程序正在运行。。。为什么不从loop开始

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

使用类与您在这里尝试的不同

我希望这是您所需要的:

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]

使用类与您在这里尝试的不同

我希望这是您所需要的:

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]

您得到了上述错误,因为即使您在类中初始化了
local\u func
my\u list
,但它们仍然可以访问。这可能被认为类似于Python中的函数声明和调用。当你这样做的时候

def sum(a, b):
  c = a + b
  return c
如果您试图直接打印c,则会出现找不到变量c的错误。这是因为函数还没有被调用,只是被声明了。因此,在函数调用之前无法访问函数的局部变量


类似地,您的类还没有被调用(从技术上讲,是实例化)。因此,您要么访问
local\u func
as
MyClass.local\u func
my\u list
as
MyClass.my\u list
,要么简单地删除类声明,如@Siva

所示,您将得到上述错误,因为即使您已在类内初始化
local\u func
my\u list
,您也会得到上述错误,但它们仍然可以访问。这可能被认为类似于Python中的函数声明和调用。当你这样做的时候

def sum(a, b):
  c = a + b
  return c
如果您试图直接打印c,则会出现找不到变量c的错误。这是因为函数还没有被调用,只是被声明了。因此,在函数调用之前无法访问函数的局部变量


类似地,您的类还没有被调用(从技术上讲,是实例化)。因此,您可以访问
local_func
作为
MyClass.local_func
my_list
作为
MyClass.my_list
,或者您只需删除类声明,如@Siva

所示,与functools部分无关。。。这个问题在这里讨论,对不起


与功能工具不相关。。。这个问题在这里讨论,对不起


谢谢,我本来想把它留在课堂上,但我想这里有一些初始化顺序问题。。。最重要的是,这是可行的:我的列表=[local_func(40),local_func(70),local_func(90)]谢谢,我希望把它留在课堂上,但我认为这里有一些初始化顺序问题。。。最重要的是,这是可行的:我的列表=[local_func(40),local_func(70),local_func(90)]谢谢@Swati,我在原始问题中添加了一个注释,带有一个没有循环的工作示例,我无法解释,你能解释吗?为什么这在循环内部不起作用而在循环外部起作用?问题不在于类还没有被调用,问题在于列表理解创建了一个函数作用域,而类主体不创建封闭作用域。注意,Python没有类声明,类定义语句是在运行时执行的可执行代码。@juanpa.arrivillaga感谢您的宝贵反馈。我会调查并寻找更好的解决方案。@DoronLevi我认为这个问题是juanpa.arrivillaga指定的。列表理解是创建函数作用域,而类主体不创建封闭作用域。因此,问题缩小为“范围”问题。我将很快搜索并尝试提供solution@SwatiSrivastava你在链接的副本中看到接受的答案了吗?它涉及到很多细节以及如何解决这些问题。谢谢@Swati,我在原始问题中添加了一个注释,其中有一个没有循环的工作示例,我无法解释,可以吗?为什么这在循环内部不起作用而在循环外部起作用?问题不在于类还没有被调用,问题在于列表理解创建了一个函数作用域,而类主体不创建封闭作用域。注意,Python没有类声明,类定义语句是在运行时执行的可执行代码。@juanpa.arrivillaga感谢您的宝贵反馈。我会调查并寻找更好的解决方案。@DoronLevi我认为这个问题是juanpa.arrivillaga指定的。列表理解是创建函数作用域,而类主体不创建封闭作用域。因此,问题缩小为“范围”问题。我将很快搜索并尝试提供solution@SwatiSrivastava你在链接的副本中看到接受的答案了吗?它涉及很多细节,以及如何解决。你应该将其标记为重复,而不是将其发布为回答我该如何做@juanpa.arrivillaga?你应该将其标记为重复,而不是将其发布为回答我该如何做@juanpa.arrivillaga?类作用域与列表理解不符,因为列表理解创建函数作用域,但类主体不是封闭作用域,所以局部变量对类主体中定义的函数不可用,就像使用方法时,在不引用类的情况下无法访问类变量一样。只需使用常规的for-loop。类作用域与列表理解不匹配,因为列表理解创建函数作用域,但类主体不是封闭作用域,因此局部变量对在类主体中定义的函数不可用,就像使用方法一样,如果不引用类,就无法访问类变量。只需使用常规for循环。