为什么用元组
带有一个None元素的元组:
>>> metadata = (None)
>>> if metadata:
... print("True")
... else:
... print("False")
...
False
具有一个或多个无元素的元组:
>>> metadata = (None, None)
>>> if metadata:
... print("True")
... else:
... print("False")
...
True
当一个元组中有多个None元素时,我想使用
>>> if all(metadata):
... print("True")
... else:
... print("False")
...
False
得到我想要的结果(也就是说,如果一个元组中的所有值都为None,我希望它实现其评估为None)。
在对元组进行评估时,是否真正考虑其长度用于评估,而不是评估其值是否短路?这样的实现背后的原理是什么?
>>> len(metadata)
2
>>>
答案 0 :(得分:0)
NSViewController
不是元组:
metadata
>>> metadata = (None)
>>> type(metadata)
<class 'NoneType'>
与metadata = (None)
相同。要使其成为一个元素元组,请使用结尾逗号:
metadata = None
现在您看到一个元素和多个元素元组的工作方式相同。
metadata = (None,)
是if metadata:
,表示一个空元组。
False
要为包含所有metadata = ()
if metadata:
print("True")
else:
print("False")
# False
项的元组返回False
,可以不用以下None
构造:
if
答案 1 :(得分:0)
此metadata
变量不是元组。它的值为None
,这就是if metadata
返回False
的原因。
metadata = (None)
if metadata:
print("True")
else:
print("False")
# False
此metadata
变量是一个元组。这不是一个空的元组。因此if metadata
条件返回True
。
metadata = (None, None)
if metadata:
print("True")
else:
print("False")
# True
如果metadata
元组未包含空数据或None
,则all(metadata)
将返回True
。但是在这种情况下,all(metadata)
返回False
。
if all(metadata):
print("True")
else:
print("False")
# False
引用来自: https://docs.python.org/3/library/functions.html#all
如果iterable的所有元素都为true(或者iterable为空),则返回True。等效于:
def all(iterable): for element in iterable: if not element: return False return True
因此,如果metadata
是一个空的可迭代对象,则all(metadata)
将返回True
。