我正在使用python解决一个难题,根据我正在解决的难题,我将不得不使用一组特殊的规则。如何将函数传递给Python中的另一个函数?
实施例
def Game(listA, listB, rules):
if rules == True:
do...
else:
do...
def Rule1(v):
if "variable_name1" in v:
return False
elif "variable_name2" in v:
return False
else:
return True
def Rule2(v):
if "variable_name3" and "variable_name4" in v:
return False
elif "variable_name4" and variable_name1 in v:
return False
else:
return True
这只是一个伪代码,因此不具体,但我得到了编译的代码,但我需要知道如何调用函数Game
以及它是否正确定义,因为规则将被切换为{{1 }或Rule1(v)
。
答案 0 :(得分:124)
像其他任何参数一样传递它:
def a(x):
return "a(%s)" % (x,)
def b(f,x):
return f(x)
print b(a,10)
答案 1 :(得分:18)
将函数视为程序中的变量,以便您可以轻松地将它们传递给其他函数:
def test ():
print "test was invoked"
def invoker(func):
func()
invoker(test) # prints test was invoked
答案 2 :(得分:9)
一种通用方法
要将函数和参数传递给函数(例如,对不同的函数使用相同的迭代例程),请考虑以下(python2.x
)示例:
def test(a, b):
'''The function to pass'''
print a+b
def looper(func, **kwargs):
'''A basic iteration function'''
for i in range(5):
# Our passed function with passed parameters
func(*tuple(value for _, value in kwargs.iteritems()))
if __name__ == '__main__':
# This will print `3` five times
looper(test, a=1, b=2)
一些解释
tuple( i for i in (1, 2, 3))
是一个元组生成器,从列表中的项创建元组,set,tuple ...在我们的例子中,**kwargs
*
前面的tuple()
将解压缩其内容,有效地将它们作为参数传递给传递的函数_
只是key
的占位符,因为我们没有使用 适用于python3.x
:
print(a+b)
代替print a+b
kwargs.items()
代替kwargs.iteritems()
答案 3 :(得分:8)
将它传递进去,就像这样:
Game(list_a, list_b, Rule1)
然后你的游戏功能看起来像这样(仍然是伪代码):
def Game(listA, listB, rules=None):
if rules:
# do something useful
# ...
result = rules(variable) # this is how you can call your rule
else:
# do something useful without rules
答案 4 :(得分:8)
通过删除括号,函数名可以成为变量名(因此可以作为参数传递)。通过添加括号,变量名可以成为函数名。
在您的示例中,将变量rules
等同于您的一个函数,不要使用括号并提及参数。然后在game()
函数中,使用括号和rules( v )
参数调用v
。
if puzzle == type1:
rules = Rule1
else:
rules = Rule2
def Game(listA, listB, rules):
if rules( v ) == True:
do...
else:
do...