使用“ is”检查变量中包含哪个函数是一个好主意吗?

问题描述 投票:2回答:2

我有一个包含函数的变量。

def foo(x):
    return x + 42

def bar(x):
    return x - 42

my_var = foo

我想检查该功能是否为特定功能。我应该使用is还是==

my_var == foo
my_var == bar

my_var is foo
my_var is bar

都返回我的期望。

python equality
2个回答
4
投票

对于功能对象,它们是同一件事。 ==操作符调用__eq__函数执行比较。 function对象未定义__eq__方法:

>>> def foo():
...   pass
... 
>>> foo.__eq__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'function' object has no attribute '__eq__'

因此,解释器使用PyObject中的默认实现:

res = (v == w) ? Py_True : Py_False;

基本上是指针比较,基本上与is相同。


0
投票

正在检查对象的身份。如果将foo分配给myvar,则会创建一个别名,并且它们都具有相同的ID(至少对于函数而言)。

[从数学的角度检查2个函数的等效性需要检查两个函数的域和共域的等效性。

所以is更好。

© www.soinside.com 2019 - 2024. All rights reserved.