我有一个函数将函数作为其参数之一,但是根据上下文,函数可以是几个中的一个(它们都是用于为sorted
方法创建规则的比较器函数)。有没有办法检查哪个函数传递给函数?我在想的是某种类似的条件逻辑:
def mainFunction (x, y, helperFunction):
if helperFunction == compareValues1():
do stuff
elif helperFunction == compareValues2():
do other stuff
等。这会有用吗?在检查函数存在时,我是否需要传递函数的所有参数?有没有更好的办法?
答案 0 :(得分:3)
你走在正确的轨道上,你只需要删除这些括号:
def mainFunction (x, y, helperFunction):
if helperFunction == compareValues1(): <-- this actually CALLS the function!
do stuff
elif helperFunction == compareValues2():
do other stuff
相反,你想要
def mainFunction (x, y, helperFunction):
if helperFunction is compareValues1:
do stuff
elif helperFunction is compareValues2:
do other stuff
答案 1 :(得分:2)
>>> def hello_world():
... print "hi"
...
>>> def f2(f1):
... print f1.__name__
...
>>> f2(hello_world)
hello_world
重要的是要注意这只检查名称而不是签名..
答案 2 :(得分:1)
helperFunction==compareValues1
答案 3 :(得分:0)
因为函数本身就是python中的一个对象,所以,当你将一个函数传递给你的函数时,一个引用被复制到那个参数。所以,你可以直接比较它们以查看它们是否相等: -
def to_pass():
pass
def func(passed_func):
print passed_func == to_pass # Prints True
print passed_func is to_pass # Prints True
foo = func # Assign func reference to a different variable foo
bar = func() # Assigns return value of func() to bar..
foo(to_pass) # will call func(to_pass)
# So, you can just do: -
print foo == func # Prints True
# Or you can simply say: -
print foo is func # Prints True
因此,当您将to_pass
传递给函数func()
时,会在to_pass
passed_func
的引用