x is not None与x is (not None)是否等价?对应两段代码是否等效?
嘿,这个问题抓得很准啊,我来给你拆解明白——这两组内容完全不等价,咱们分情况唠:
第一组:两个表达式的核心差异
先搞懂Python运算符的优先级:is的优先级比not高,所以这俩表达式的运算逻辑天差地别:
x is not None:这是Python里判断非空的标准写法,实际运算顺序是(x is not None),目的是检查x是否不是None对象。x is (not None):这里括号强制改变了运算顺序,先计算not None——而not None的结果是布尔值True,所以这个表达式本质是在判断x is True,和“x是不是None”完全不沾边。
第二组:两段代码的执行逻辑差异
对应上面的表达式,两段代码的触发条件完全不同:
if x is not None: print("hello"):只要x不是None(比如x=0、x="abc"、x=[]这些都算),就会打印"hello",这是开发里常用的非空判断逻辑。if x is (not None): print("hello"):只有当x严格等于True对象时才会打印,比如x=True的时候触发,但x=1、x="非空字符串"这些都不会触发,和判断x是否为None没有关系。
举个实际例子更直观:
当x=1时,
x is not None结果为True,会输出hello;但x is (not None)等价于1 is True,结果是False,不会输出。
当x=None时,前者结果为False,后者等价于None is True,结果也是False;但当x=True时,前者结果为True,后者结果也为True——这是唯一巧合的情况,但逻辑完全不同。
内容的提问来源于stack exchange,提问作者Flimm
相关产品推荐
相关产品推荐

