我知道,我卡恩传递一个函数名作为参数传递给另一个函数,即
def fun_passed(a,b):
#do something
def main_fun(arg,fun_passed):
#do something
#call main_fun
first_fun =fun_passed
main_fun(1,first_fun)
里面main_fun
我怎么可以做一些检查。例如,基于功能我过去,我想设置一个变量
def main_fun(1,fun_passed):
if fun_passed==first_fun:
i=1
else:
i=10
我不能简单地用==
因为我认为比较没有意义。谢谢
您可以为相等比较的功能,但它不会去检查,如果两个函数做同样的事情。这样的检查,一般来说,在技术意义上判定的。
相反,如果两个f == g
和f
返回相同的底层对象(即,它是一样g
)f is g
简单地返回true。这意味着,(lambda x: x) == (lambda x: x)
简单的东西作为计算False
。
您应该使用is
关键字:
def fct_a(a,b):
#do something
pass
def fct_b(a,b):
#do something
pass
def main_fun(fct):
if fct is fct_a:
print("fct is 'fct_a'")
else:
print("fct is not 'fct_a'")
main_fun(fct_a) # >> fct is 'fun_passed'
main_fun(fct_b) # >> fct is not 'fun_passed'
欲了解更多有关
is
和==
之间的差异,看到there
如果你正在处理的功能,而不是一个拉姆达函数对象具有可变__name__
足见其原有功能的确切名称。这里一个简单的例子:
>>> def x():
... return 0;
...
>>> type(x)
<type 'function'>
>>> x.__name__
'x'
>>> y=x
>>> y.__name__
'x'
所以你的情况,这将是这样的
if fun_passed.__name__=="first_fun":