Yoda condition with “not x is None”
前一个dev在代码中留下了一个非常奇怪的
1 2 3 4 5 6 | >>> x = None >>> not x is None False >>> x = 1 >>> not x is None True |
经过一些测试,我似乎和
1 2 3 4 5 6 7 8 9 10 | >>> x = None >>> not x is None False >>> x is not None False >>> x = 1 >>> not x is None True >>> x is not None True |
号
要打破这种状况,是
由于
如果是
如果是
因此,即使这些操作在语法上不是等价的,结果也是等价的。
这是
。
这是
氧化镁
如第二张图所示,内部节点是比较节点,因此在
关于表达式的实际计算,似乎Python为这两个字节码创建了相同的字节码。在这个例子中可以看到:
1 2 3 4 5 6 7 8 9 10 | def foo(x): x is not None def bar(x): not x is None import dis dis.dis(foo) dis.dis(bar) |
两者都会产生:
1 2 3 4 5 6 | 0 LOAD_FAST 0 (x) 3 LOAD_CONST 0 (None) 6 COMPARE_OP 9 (is not) 9 POP_TOP 10 LOAD_CONST 0 (None) 13 RETURN_VALUE |
号
在python中,