这是做什么的(Python)

时间:2011-05-04 19:22:54

标签: python

今天我遇到了一段看起来像这样的代码:

class ClassName(object):
     def __init__(self):
         self._vocabulary = None

     def vocabulary(self):
         self._vocabulary = self._vocabulary or self.keys()
         return self._vocabulary

self._vocabulary = self._vocabulary or self.keys()行究竟在做什么?

3 个答案:

答案 0 :(得分:8)

这样的一行:

self._vocabulary = self._vocabulary or self.keys()

当您第一次初始化时检索值时,是否称为延迟初始化。因此,如果它从未初始化self._vocabulary将为None(因为__init__方法设置了此值),导致对or的第二个元素进行评估{ {1}}将被执行,将返回值分配给self.keys(),从而为将来的请求初始化它。

当第二次调用self._vocabulary vocabulary时,self._vocabulary将不会None,并且会保留该值。

答案 1 :(得分:2)

简而言之,如果self._vocabulary评估为逻辑假(例如,如果它是None0False等),那么它将替换为{ {1}}。

在这种情况下,self.keys()运算符将返回值为逻辑true的值。

此外,您的代码应该更像这样:

or

答案 2 :(得分:0)

很难说,代码不会因为多种原因而运行。不过要猜测,我认为看起来它会被评估为逻辑表达式,self._vocabulary将被python评估False作为类型None,而self.keys()是一种方法(希望)也可以返回要评估的东西。然后它只是两者之间的逻辑或,结果被放入self._vocabulary