python类默认参数
我想知道是否有人能解释为什么这两个例子最终会产生相同的结果:python类默认参数,python,Python,我想知道是否有人能解释为什么这两个例子最终会产生相同的结果: class Myclass(): def __init__ (self, parameter=None) if parameter is None: self.parameter = 1.0 else: self.parameter = parameter 以及: 我直觉上理解第一个“如果。。。“没有”,但我很难理解第二个例子。两者都可以使用吗 我意识到这可能是一个相当简单
class Myclass():
def __init__ (self, parameter=None)
if parameter is None:
self.parameter = 1.0
else:
self.parameter = parameter
以及:
我直觉上理解第一个“如果。。。“没有”,但我很难理解第二个例子。两者都可以使用吗
我意识到这可能是一个相当简单的问题,因此,如果有人能指导我阅读任何有助于理解差异的书籍,那将是非常好的
谢谢 在第一个示例中,仅当
参数
按字面意思为无
时,该条件才为真
在第二个示例中,该条件仅适用于truthy值
一种更简单的方法是:
def meth1 (parameter):
return parameter is None
def meth2 (parameter):
return not(bool(parameter))
print([(meth1(v), meth2(v)) for v in [False, None, 0]])
> [(False, True), (True, True), (False, True)]
它们不是等价的,在第一个代码段中,
参数
将为1.0当且仅当参数
为无
,但在第二个代码段中,参数
对于任何错误值
都将为1.0。以下值在Python中均为错误
:
- 没有
- 假的
- 任何数字类型的零,例如0、0L、0.0、0j
- 任何空序列,例如,,(),[]
- 任何空映射,例如,{}
- 用户定义类的实例,如果类定义了非零()或len()方法,则该方法返回整数零或布尔值False
- Python 2:
- Python 3:
None
为falsy,因此在第二种情况下使用默认值时采用else分支。但是,也有例外。看看。。。我更喜欢第一个例子!如果你想MyClass(0.)
你想参数为0.
还是1.
?你能用一个简单的例子来证明这一点吗?我在外面淋雨,水弄脏了我的触摸屏,所以任何打字都很困难。我也误解了这个问题。现在更新。这很有意义,谢谢你的回答和链接!
def meth1 (parameter):
return parameter is None
def meth2 (parameter):
return not(bool(parameter))
print([(meth1(v), meth2(v)) for v in [False, None, 0]])
> [(False, True), (True, True), (False, True)]