python - “变量”或 'variable is not None'

标签 python comparison

<分区>

Variable = None

这三者在特定场景下有什么区别吗?如果没有区别,哪个更适合使用?

if Variable:
 print "Hello world"

if Variable is not None:
 print "Hello world"

if Variable != None:
 print "Hello world"

在无变量的情况下是否相同?

最佳答案

Is there any difference between these three in a specific scenario ?

第一个询问变量是否是假的。除了None——False0、任何空序列等之外,这个测试都会失败。

第二个询问它是否是神奇的单例常量 None。这只会对 None 本身失败。

第三个询问它是否是任何认为自己等于None 的东西。对于 Holder(None),这将失败,其中 Holder 是一个包装类,其实例比较等于它们持有的任何东西。或者,给出一个不太现实但更短的代码示例:

class Stupid(object):
    def __ne__(self, other):
        return False
Variable = Stupid()

最后一个很少有用;事实上,如果您认为您可能需要检查 == None!= None,并且您还没有专门创建透明包装类或类似的东西,您可能实际上想要 is Noneis not None。但是另外两个都非常有用和常见。

if there is no difference which one is more suitable to use?

嗯,有的区别,哪个更合适,要看具体用途。

在问题的最后,您可能会问在 Variable 绝对是 None 的特定情况下是否有任何区别。在那种情况下,三者之间当然没有功能上的区别。*它们都保证是假的,因此什么也不做。这意味着这三者中的任何一个与根本不编写代码之间也没有区别。这更简单、更易读且速度更快。

* 存在性能差异 — 第一个不必 LOAD_CONST None,或调用比较运算符。而且,即使您以某种方式设法重新绑定(bind) None 或更改 None 常量的值(可能通过使用 ctypes?),第一个更有可能仍然有效。但这些都不会变得重要——而且,如果它们真的重要了,那么任何代码都不会更快、更可靠。

关于python - “变量”或 'variable is not None',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15652427/

相关文章:

php - 3个不同的等于

comparison - 如何在 Rust 中自动实现结构与 float 的比较?

python - __ne__ 是否使用重写的 __eq__?

comparison - Erlang 相对于(类似于)node.js 的优势?

python - Firefox 附加组件 SDK 错误

python - 如何修改正在运行的线程的worker中的局部变量?

python - Django:带有附加字段的CreateView?

python:生成整数分区

python - 如何通过python脚本获取 "Google Dictionary"的内容

r - 为什么 TRUE == "TRUE"在 R 中是 TRUE?