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

问题描述 投票:0回答:3

我知道,我卡恩传递一个函数名作为参数传递给另一个函数,即

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

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

python
3个回答
1
投票

您可以为相等比较的功能,但它不会去检查,如果两个函数做同样的事情。这样的检查,一般来说,在技术意义上判定的。

相反,如果两个f == gf返回相同的底层对象(即,它是一样gf is g简单地返回true。这意味着,(lambda x: x) == (lambda x: x)简单的东西作为计算False


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


0
投票

如果你正在处理的功能,而不是一个拉姆达函数对象具有可变__name__足见其原有功能的确切名称。这里一个简单的例子:

>>> def x():
...  return 0;
... 
>>> type(x)
<type 'function'>
>>> x.__name__
'x'
>>> y=x
>>> y.__name__
'x'

所以你的情况,这将是这样的

if fun_passed.__name__=="first_fun":
© www.soinside.com 2019 - 2024. All rights reserved.