什么是Python相当于或等于表达式,以获得返回foo或foo ='bar'的工作原理?

Jan*_*zny 2 python

我想做点什么:

def get_foo():   
  return self._foo or self._foo = Bar()
Run Code Online (Sandbox Code Playgroud)

我正在寻找最干净的方法.是等于或等于?

我的尝试失败了:

>>> foo = None
>>> foo or 'bar'
'bar'
>>> foo
>>> foo or foo = 'bar'
  File "<stdin>", line 1
SyntaxError: can't assign to operator
>>> foo or (foo = 'bar')
  File "<stdin>", line 1
    foo or (foo = 'bar')
                ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

Ivo*_*Ivo 6

在Python中,您不能在表达式中使用赋值.所以你必须return在两个不同的行上完成赋值和声明:

def get_foo(self):
    self._foo = self._foo or Bar()
    return self._foo
Run Code Online (Sandbox Code Playgroud)

但总的来说,最好把它写出来:

def get_foo(self):
    if not self._foo:
        self._foo = Bar()
    return self._foo
Run Code Online (Sandbox Code Playgroud)

  • @WooYek:如果你担心性能那么多,那么这个方法应该完全取消并转到静态初始化成员,或者Python可能不是你正在寻找的语言.一般来说,以你想要的方式编写它(简短的方法)是不好的,因为它不可读并导致无法维护的代码. (3认同)