今天我遇到了一段看起来像这样的代码:
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()
行究竟在做什么?
答案 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
评估为逻辑假(例如,如果它是None
,0
,False
等),那么它将替换为{ {1}}。
在这种情况下,self.keys()
运算符将返回值为逻辑true的值。
此外,您的代码应该更像这样:
or
答案 2 :(得分:0)
很难说,代码不会因为多种原因而运行。不过要猜测,我认为看起来它会被评估为逻辑表达式,self._vocabulary
将被python评估False
作为类型None
,而self.keys()
是一种方法(希望)也可以返回要评估的东西。然后它只是两者之间的逻辑或,结果被放入self._vocabulary
。