调用作为参数传递的 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)