python – 将“x if x is not else y”重构为“x或y”

我遇到了一段
Python代码,技术上看起来像这样:

def bar(b):
    return b*2

class MyClass(object):
    def __init__(self, a):
        self.a = a
        self.b = 10

    def foo(self, b=None):
        return bar(b if b is not None else self.b)

因此,类具有b作为固定属性,如果在没有参数的情况下调用它,则将其用作classmethod foo的默认输入.

请假设在这种情况下b应该是浮点数.

请忽略未使用的self.a,否则使用它 – 我只是想确保您看到构造函数可以设置属性.

用法如下所示:

c = MyClass(2)
c.foo(3)  # returns 3*2 = 6
c.foo()  # returns 10*2 = 20

在这种情况下,我想知道foo方法.这是将self.b实现为b的默认值的好方法吗?

以下两个建议中的一个或多或少是我的愿望吗?如果是这样:为什么?

def foo(self, b=None):
    return bar(b or self.b)

要么

def foo(self, b=self.b):
    return bar(b)

最佳答案 坚持第一个选择:

def foo(self, b=None):
    return bar(b if b is not None else self.b)

如果您使用第二个选项:

def foo(self, b=None):
    return bar(b or self.b)

那么你将改变x.foo(0)的行为,因为零也是假的.

第三种选择不是一种选择:

def foo(self, b=self.b):
    return bar(b)

定义方法foo()时self不存在,因此不能将self.b用作默认参数.定义将失败;或者更糟糕的是,当执行定义时,它将尝试使用self的当前值.

点赞