Python – 将函数传递给另一个函数
我正在用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
以及是否正确定义,因为Rule1(v)
或Rule2(v)
规则将被切换。
只要通过它像其他任何参数:
def a(x): return "a(%s)" % (x,) def b(f,x): return f(x) print b(a,10)
在你的程序中把函数当作variables处理,这样你就可以简单地将它们传递给其他函数:
def test (): print "test was invoked" def invoker(func): func() invoker(test) # prints test was invoked
函数名可以通过删除括号变成variables名(因此可以作为parameter passing)。 variables名称可以通过添加括号成为函数名称。
在你的例子中,将variablesrules
等同于你的一个函数,而忽略了括号和提到的参数。 然后在你的game()
函数中,用括号和v
参数调用rules( v )
。
if puzzle == type1: rules = Rule1 else: rules = Rule2 def Game(listA, listB, rules): if rules( v ) == True: do... else: do...
只要通过它,像这样:
Game(list_a, list_b, Rule1)
然后你的游戏function可能看起来像这样(仍然伪代码):
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
一个广义的方法
为了将函数和parameter passing给函数(例如,对不同的函数使用相同的迭代例程),请考虑以下( 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))
是一个元组生成器,从一个列表中创build一个元组,元组…,在我们的例子中,来自**kwargs
-
tuple()
前面的*
将解压其内容,将其作为参数有效地传递给传递的函数 - 发电机中的
_
只是key
的占位符,因为我们没有使用它
对于python3.x
:
-
print(a+b)
而不是print a+b
-
kwargs.items()
而不是kwargs.iteritems()