【问题标题】:Python `None` passed into type-conversion functionsPython `None` 传入类型转换函数
【发布时间】:2015-09-23 13:26:40
【问题描述】:

None 类型传递给类型转换函数的设计决策的基本原理是什么?

  • 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) 返回类型错误 - 如果它们返回 [], {}, (), @987654336和0.0 这将是显而易见的,并且在许多现实生活场景中将很有用,以避免手动处理。

如果有人能解释是什么可能促使 Guido 采取相反的方式,我们将不胜感激。

PS:这源于这个问题Python: most idiomatic way to convert None to empty string?。大多数答案都是 if-else 方法,在现实生活中,通过空字符串、列表、dict 或 0 转换/覆盖 None 是很常见的。

【问题讨论】:

  • 当您可以测试真实性时,bool(str(None)) 有什么用处?
  • bool() 采用 any 类型并确定布尔值。 None 在那里并不特别。 str(None) 产生字符串'None',它不是空的,所以True。其余的不要将None 作为参数,也不应该。
  • 我不确定您为什么认为传入None 会给您“空”对象。不要传入 any 参数,所以 list()tuple()int()float()None 仍然是一个对象,而不是一个空值。
  • 同时将None 打印为None 可以让您更轻松地区分变量为空还是返回不返回None 而不是字符串的函数(由于错误等原因)。跨度>
  • @Martijn Pieters♦ :单独来说,一切都可以正常工作,但我可以将 None 与 Empty dict 或 Empty List 或 0 相关联,具体取决于转换为的数据类型。

标签: python types language-design nonetype


【解决方案1】:

None 仍然是一个对象。它不是一个空值,它只是一个sentinel,可以在您拥有的任何地方使用以产生或使用一个对象,但您确实想将其留空。

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

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

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

bool() 为您提供传入参数的布尔类型。您可以在没有参数的情况下调用它:

>>> bool()
False

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    相关资源
    最近更新 更多