【问题标题】:Call Python function passed as parameter without knowing if it takes any parameters调用作为参数传递的 Python 函数,而不知道它是否需要任何参数
【发布时间】:2021-08-21 00:55:11
【问题描述】:

我有一个项目,我需要在其中做一些事情,调用几个函数之一,然后做一些其他事情:

def doCommand(function, parameter_for_function):
  # do a thing
  function(parameter_for_function)
  # do a thing

我的问题是我不知道我将要传递的函数是否需要它自己的参数!

如何让我的函数同时调用没有参数的函数和有参数的函数?

【问题讨论】:

标签: python function parameter-passing optional-parameters


【解决方案1】:

处理这个问题的首选方法可能是这样的:

def doCommand(function, *args, **kwargs):
  # do a thing
  function(*args, **kwargs)
  # do a thing

*args**kwargs 允许将任意参数传递给方法。顾名思义,这些允许您使用任意数量的参数和关键字参数调用doCommand,并传递给function

【讨论】:

    【解决方案2】:

    我建议明确说明您使用的函数是不带参数调用的函数:

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 2017-01-02
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多