python中是否有内置的lambda for Is notNone
我看到以下习惯用法在python中重复了好几次python中是否有内置的lambda for Is notNone,python,oop,typing,Python,Oop,Typing,我看到以下习惯用法在python中重复了好几次X=filter(lambda X:X不是None,X)) 我希望python中有一个内置函数,用于而不是None(在其标准库中或类似于ApacheCommonsforJava的东西中) 在我的代码中,我将其组织为 def isNotNone(X: Any) -> bool: return True if X is not None else False X = filter(isNotNone, X) 您可以使用None.\u n
X=filter(lambda X:X不是None,X))
我希望python中有一个内置函数,用于而不是None
(在其标准库中或类似于ApacheCommonsforJava的东西中)
在我的代码中,我将其组织为
def isNotNone(X: Any) -> bool:
return True if X is not None else False
X = filter(isNotNone, X)
您可以使用
None.\u ne\u
,即None
的不相等检查:
>>> lst = [0, [], None, ""]
>>> list(filter(None.__ne__, lst))
[0, [], '']
从技术上讲,这并不测试
x不是无而是x!=None
,在某些情况下可能会产生不同的结果,例如,对于比较等于None
的类,但在大多数实际情况下,它可能会起作用。过滤器(None,X)
的作用几乎相同。它过滤掉了None
,但也过滤掉了0和空字符串,“falsy”对象…如果X不是None,则返回True,否则返回False
=>返回X不是None
(更像pythonic!)我会使用X=(如果elt不是None,则elt用于X中的elt)
取而代之:)很好的观点。使用过滤器
或映射
和lambda
是缓慢而复杂的。但是OP正在寻找一个内置的。bool
是最接近的东西(但过滤掉了其他元素)有趣的是,None.\uu______
不会返回True
对于大多数非None对象,它返回NotImplemented
。幸运的是,它的计算结果为True。列表(map(None.\uu_____ _,[0,[],None,“])===[NotImplemented,NotImplemented,False,NotImplemented]
在我的机器上,Python 3.6.3.@AlexHall[True,True,False,True]
在我的网站上,使用了有点过时的Python 3.4.2(在2.7.9上,无)实际上,None.\uu____
总是做正确的事情,因为即使另一个类为x!=None
实现了一些特殊的东西,也只有在使用!=
操作符时才会调用它,而不是调用None.\uu_(x)
。这是一个坏主意,因为它非常微妙地依赖于NotImplemented的行为(在某种程度上,你甚至在写它的时候都没有意识到),因为它鼓励使用None.\uuuueq\uuuu
来测试事物是否为None,以及。