我知道我无法将函数名称作为参数传递给另一个函数,即
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
我不能简单地使用==
,因为我认为比较没有意义。
谢谢
答案 0 :(得分:1)
您可以比较函数是否相等,但是不会检查这两个函数是否完全相同。通常,从技术意义上来说,这种检查是不确定的。
相反,如果f == g
和f
都返回相同的基础对象(即与g
相同),f is g
只会返回true。这意味着像(lambda x: x) == (lambda x: x)
这样简单的东西的求值结果就是False
。
答案 1 :(得分:1)
您应该使用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
答案 2 :(得分:0)
如果要处理的函数不是lambda,则函数对象具有变量__name__
,该变量显示原始函数的确切名称。这是一个简单的例子:
>>> def x():
... return 0;
...
>>> type(x)
<type 'function'>
>>> x.__name__
'x'
>>> y=x
>>> y.__name__
'x'
所以在您的情况下,会是这样
if fun_passed.__name__=="first_fun":