不是没有在Python中进行测试

这些不是“无”测试。


if val != None:


if not (val is None):


if val is not None:

哪一个更可取,为什么?


慕妹3146593
浏览 382回答 3
3回答

HUX布斯

if val is not None:    # ...是用于测试未将变量设置为的Python惯用法None。在用默认参数声明关键字函数的情况下,该惯用法有特殊用途。is在Python中测试身份。因为None正在运行的Python脚本/程序中只有一个实例,所以这是is最佳测试。正如Johnsyweb指出的那样,这在PEP 8中的 “编程建议”中进行了讨论。至于为什么这是首选if not (val is None):    # ...这只是Python Zen的一部分:“可读性很重要”。好的Python通常接近好的伪代码。

幕布斯6054654

来自PEP 8编程建议:与单例(如None)的比较应始终使用“是”或“不是”进行,永远不要使用相等运算符进行。另外,当您真正的意思是“如果x不是None”时,要当心写“ if x”-例如,在测试是否将默认为None的变量或参数设置为其他值时。另一个值可能具有在布尔上下文中可能为false的类型(例如容器)!对于任何Python程序员来说,PEP 8都是必不可少的书籍。

智慧大石

这些问题的最佳选择是确切地了解python的功能。该dis模块提供了令人难以置信的信息:>>> def f(val):...   if val != None:...     return True...   return False...>>> def g(val):...   if not (val is None):...     return True...   return False...>>> def h(val):...   if val is not None:...     return True...   return False...>>> import dis>>> dis.dis(f)  2           0 LOAD_FAST                0 (val)              3 LOAD_CONST               0 (None)              6 COMPARE_OP               3 (!=)              9 POP_JUMP_IF_FALSE       16  3          12 LOAD_GLOBAL              1 (True)             15 RETURN_VALUE  4     >>   16 LOAD_GLOBAL              2 (False)             19 RETURN_VALUE>>> dis.dis(g)  2           0 LOAD_FAST                0 (val)              3 LOAD_CONST               0 (None)              6 COMPARE_OP               9 (is not)              9 POP_JUMP_IF_FALSE       16  3          12 LOAD_GLOBAL              1 (True)             15 RETURN_VALUE  4     >>   16 LOAD_GLOBAL              2 (False)             19 RETURN_VALUE>>> dis.dis(h)  2           0 LOAD_FAST                0 (val)              3 LOAD_CONST               0 (None)              6 COMPARE_OP               9 (is not)              9 POP_JUMP_IF_FALSE       16  3          12 LOAD_GLOBAL              1 (True)             15 RETURN_VALUE  4     >>   16 LOAD_GLOBAL              2 (False)             19 RETURN_VALUE请注意,最后两种情况简化为相同的操作顺序(python读取not (val is None)并使用该is not运算符)。!=与无比较时,第一个使用运算符。正如其他答案所指出的那样,!=在与“无”进行比较时使用“
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python