首页 > 解决方案 > 使用“is”来检查变量中包含哪个函数是个好主意吗?

问题描述

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

def foo(x):
    return x + 42

def bar(x):
    return x - 42

my_var = foo

我想检查该功能是否是某个功能。我应该使用isor==吗?

my_var == foo
my_var == bar

my_var is foo
my_var is bar

两者都返回我的期望。

标签: pythonequality

解决方案


对于函数对象,它们是相同的。==操作员调用该函数__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.


推荐阅读