Python`None`传递给标准类型函数

时间:2015-07-06 11:53:55

标签: python language-design

有人可以解释关于传递给构建标准类型函数的无类型的设计决策的基本原理

  • bool(None)返回False - 这很有道理

  • str(None)返回'None'这不行 - 返回空字符串将是更好的选择,如下所示

    >>> bool(None)
    False
    >>> bool(str(None))     #Returning empty string will make it consistent by returning False
    True
    >>> bool('')
    False
    
  • list(None)dict(None)tuple(None)int(None)float(None)返回类型错误 - 如果他们返回[]{}()00.0这将是显而易见的,并且在许多现实生活场景中将有用,以避免手动处理。

如果有人能够推销可能促使Guido走向反过来的人,那将是值得赞赏的。

PS:这来自这个问题Python: most idiomatic way to convert None to empty string?。大多数答案是if-else方法,在现实生活中转换/覆盖无空字符串,列表,字典或0将是常见的。

1 个答案:

答案 0 :(得分:4)

None仍然是一个对象。它不是一个空值,它只是一个 sentinel ,可以在拥有的任何地方使用它来生成或使用一个对象,但你真的想把它留空。

函数调用不需要参数,调用没有参数的东西完全有效。因此,传递None是没有意义的,因为那将是一个参数,而不是零。

要使用类型函数创建“空”对象,只需将参数列表留空:

>>> list()
[]
>>> tuple()
()
>>> str()
''

bool()为您提供传入的参数的布尔类型。您可以不带参数调用它:

>>> bool()
False

但如果你传入None,它将确定该对象的真值。对于None,该值为Falsestr(None)生成字符串'None',该字符串不为空,因此在传递给True时为bool()。请参阅Truth Value Testing section