19

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

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

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

if len(str(result)) > 0:
    # ... deal with result 
    pass 

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

4

2 回答 2

15

通过检查来检查字符串中是否包含字符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

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


如果你真的要问为什么str(None)会返回'None',那么我相信是因为它是三值逻辑所必需的。True,False并且None可以一起使用来确定一个逻辑表达式是True,False还是不能确定。恒等函数是最容易表示的。

True  -> 'True'
False -> 'False'
None  -> 'None'

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'

现在,如果您真的想要一个权威的答案,请询问 Guido。


如果你真的想str(None)给你,''请阅读另一个问题:Python: most idiommatic way to convert None to empty string?

于 2013-07-17T04:35:38.800 回答
4

基本上,因为空字符串不是None. None 是一个与空字符串或其他任何内容不同的特殊值。如文档中所述str应该

返回一个字符串,其中包含一个对象的可很好打印的表示。

基本上,str应该返回一些可打印和人类可读的东西。空字符串不是None.

于 2013-07-17T04:40:16.963 回答