传递函数名称作为参数,然后检查正确性

时间:2019-02-05 16:38:25

标签: python

我知道我无法将函数名称作为参数传递给另一个函数,即

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

我不能简单地使用==,因为我认为比较没有意义。 谢谢

3 个答案:

答案 0 :(得分:1)

您可以比较函数是否相等,但是不会检查这两个函数是否完全相同。通常,从技术意义上来说,这种检查是不确定的。

相反,如果f == gf都返回相同的基础对象(即与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":