有人能解释一下为什么下面的代码会产生异常吗?你知道吗
>>> class CallableKlass(object):
def __init__(self, callible):
self.callible = callible
def __call__(self, arg):
return self.callible(arg)
>>> class Klass(object):
d = {'foo': 'bar'}
m = CallableKlass(lambda x: d[x])
>>> Klass.m('foo')
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
Klass.m('foo')
File "<pyshell#5>", line 5, in __call__
return self.callible(arg)
File "<pyshell#9>", line 3, in <lambda>
m = CallableKlass(lambda x: d[x])
NameError: global name 'd' is not defined
类命名空间(直接在类主体中定义的内容)不能从该命名空间中定义的函数中访问。lambda只是一个函数,所以这也适用于lambda。你的
CallableKlass
是一条红鲱鱼。在这种更简单的情况下,行为是相同的:您应该在lambda中使用
Klass.d
,因为在类中声明的变量将成为该类的属性。 这就是为什么您的程序会出现这个错误,因为它无法在全局变量中找到类似d
的内容相关问题 更多 >
编程相关推荐