为什么python设计为str(None)返回'None'而不是空字符串?

Rob*_*b L 15 python

在我所知道的其他一些语言中,null到字符串转换的直观结果应该是一个空字符串.为什么Python被设计为使'None'成为一种特殊的字符串?在检查函数的返回值时,这可能会导致额外的工作

result = foo() # foo will return None if failure 
if result is not None and len(str(result)) > 0:
    # ... deal with result 
    pass 
Run Code Online (Sandbox Code Playgroud)

如果str(None)返回空字符串,则代码可能更短:

if len(str(result)) > 0:
    # ... deal with result 
    pass 
Run Code Online (Sandbox Code Playgroud)

看起来Python试图变得冗长,使日志文件更容易理解?

dno*_*zay 12

通过检查检查字符串中是否包含字符len(str(result))绝对不是pythonic(请参阅http://www.python.org/dev/peps/pep-0008/).

result = foo() # foo will return None if failure 
if result:
    # deal with result.
    pass
Run Code Online (Sandbox Code Playgroud)

None''强制转换为布尔值False.


如果你真的在问为什么str(None)会返回'None',那么我相信这是因为三值逻辑是必要的.True,False并且None可以一起使用,以确定是否一个逻辑表达式为True,False或不能被确定.身份函数是最容易表示的.

True  -> 'True'
False -> 'False'
None  -> 'None'
Run Code Online (Sandbox Code Playgroud)

如果str(None)是,以下将是非常奇怪的'':

>>> or_statement = lambda a, b: "%s or %s = %s" % (a, b, a or b)
>>> or_statement(True, False)
'True or False = True'
>>> or_statement(True, None)
'True or None = True'
>>> or_statement(None, None)
'None or None = None'
Run Code Online (Sandbox Code Playgroud)

现在,如果你真的想要一个权威的答案,请问Guido.


如果你真的想str(None)给你,''请阅读另一个问题:Python:将无转换为空字符串的最常用的方法是什么?

  • 如果您需要使用True,False和None的三值逻辑的完整实现,请查看[Python Tribool模块](http://www.grantjenks.com/docs/tribool/) (2认同)