Python-将一个函数传递给另一个函数[重复]
- 2025-03-19 08:56:00
- admin 原创
- 48
问题描述:
我正在使用 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)
。
解决方案 1:
只需像传递其他参数一样传递它即可:
def a(x):
return "a(%s)" % (x,)
def b(f,x):
return f(x)
print b(a,10)
解决方案 2:
在程序中将函数视为变量,以便您可以轻松地将它们传递给其他函数:
def test ():
print "test was invoked"
def invoker(func):
func()
invoker(test) # prints test was invoked
解决方案 3:
为了传递函数以及函数的任何参数:
from typing import Callable
def looper(fn: Callable, n:int, *args, **kwargs):
"""
Call a function `n` times
Parameters
----------
fn: Callable
Function to be called.
n: int
Number of times to call `func`.
*args
Positional arguments to be passed to `func`.
**kwargs
Keyword arguments to be passed to `func`.
Example
-------
>>> def foo(a:Union[float, int], b:Union[float, int]):
... '''The function to pass'''
... print(a+b)
>>> looper(foo, 3, 2, b=4)
6
6
6
"""
for i in range(n):
fn(*args, **kwargs)
根据您正在做的事情,定义一个decorator
或者使用可能是有意义的functools.partial
。
解决方案 4:
只需将其传递进去,就像这样:
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
解决方案 5:
通过删除括号,函数名称可以变为变量名称(从而作为参数传递)。通过添加括号,变量名称可以变为函数名称。
在您的示例中,将变量等同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...
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD