调用作为参数传递的 Python 函数,不知道它是否接受任何参数
Call Python function passed as parameter without knowing if it takes any parameters
我有一个项目,我需要在其中做一些事情,调用几个函数之一,然后再做一些其他事情:
def doCommand(function, parameter_for_function):
# do a thing
function(parameter_for_function)
# do a thing
我的问题是我不知道我要传递的函数是否需要它自己的参数!
如何让我的函数同时调用没有参数的函数和有参数的函数?
处理此问题的首选方法可能是这样的:
def doCommand(function, *args, **kwargs):
# do a thing
function(*args, **kwargs)
# do a thing
*args
和 **kwargs
允许将任意参数传递给方法。顾名思义,这些允许您使用任意数量的参数和关键字参数调用 doCommand
以及传递给 function
.
我建议明确说明您使用的函数是不带参数调用的函数:
from typing import Callable
def doCommand(function: Callable[[], None]) -> None:
# do a thing
function()
# do a thing
如果函数需要参数,那么 doCommand
调用者明确有责任提供它们,例如在 lambda
表达式中:
def foo(param) -> None:
print("foo: ", param)
doCommand(lambda: foo("bar"))
或命名包装函数:
def foobar() -> None:
foo("bar")
doCommand(foobar)
我有一个项目,我需要在其中做一些事情,调用几个函数之一,然后再做一些其他事情:
def doCommand(function, parameter_for_function):
# do a thing
function(parameter_for_function)
# do a thing
我的问题是我不知道我要传递的函数是否需要它自己的参数!
如何让我的函数同时调用没有参数的函数和有参数的函数?
处理此问题的首选方法可能是这样的:
def doCommand(function, *args, **kwargs):
# do a thing
function(*args, **kwargs)
# do a thing
*args
和 **kwargs
允许将任意参数传递给方法。顾名思义,这些允许您使用任意数量的参数和关键字参数调用 doCommand
以及传递给 function
.
我建议明确说明您使用的函数是不带参数调用的函数:
from typing import Callable
def doCommand(function: Callable[[], None]) -> None:
# do a thing
function()
# do a thing
如果函数需要参数,那么 doCommand
调用者明确有责任提供它们,例如在 lambda
表达式中:
def foo(param) -> None:
print("foo: ", param)
doCommand(lambda: foo("bar"))
或命名包装函数:
def foobar() -> None:
foo("bar")
doCommand(foobar)