【问题标题】:How to implement and call a function with another function as an optional argument (filter function)如何实现和调用另一个函数作为可选参数的函数(过滤函数)
【发布时间】:2020-01-05 16:59:48
【问题描述】:

我正在尝试编写一个带有函数作为可选参数的函数。我想用第二个函数作为过滤函数

def func1(arg1, arg2, func2, arg4=None):
    # do something with args1,2
    # do something with arg4 if called
    # do something with func2 if called

def func2(arg5):
    # do something

func1(41, "hello there")

在上面的示例中,我没有调用 func2 。我知道我可以使用装饰器,即

def func1(arg1, arg2, func2, arg4=None):
    # do something with args1,2
    func2()
    # do something with arg4 if called

def func2(arg5):
    # do something

func1(41, "hello there")

我不确定如何实现或调用可选装饰器。我认为最好的方法是将 func2 的参数作为 func1 中的参数,func1(arg1,arg2,arg5=None,arg4=None) 然后在 func1 中我可以有这样的逻辑:

def func1(arg1, arg2, arg5=None, arg4=None):
    # do something with args1,2
    if arg5 is not None:
        func2(arg5)
    # do something with arg4 if called

def func2(arg5):
    # do something

func1(41, "hello there")

任何建议将不胜感激!

【问题讨论】:

  • 我很难理解这里的问题。我建议使用真正的语法。您指的是装饰器,但我没有看到。你能澄清一下你需要什么吗?
  • 在您的第一个示例中,func2 不是可选参数调用,否则会产生异常。
  • ... I haven't called func2... -> 你还没有通过 func2docs.python.org/3/tutorial/…

标签: python filter


【解决方案1】:

上面在 cmets 中指出的一些关于代码结构的编码错误需要修复。通过提供默认值来创建可选参数。这样的事情应该可以帮助您:

In [1]: def print_result(x, f=None): 
   ...:     if f: 
   ...:         x = f(x) 
   ...:     print("the final answer is: %i" % x) 
   ...:                                                                         

In [2]: def doubler(x): 
   ...:     return x*2 
   ...:                                                                         

In [3]: print_result(5)                                                         
the final answer is: 5

In [4]: print_result(5, doubler)                                                
the final answer is: 10

【讨论】:

  • 我可能不应该提到装饰师,也不应该通过手机发布问题!
猜你喜欢
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 2018-11-13
相关资源
最近更新 更多