【问题标题】:How to write a function that transforms a function and returns the transformed function?如何编写一个转换函数并返回转换后的函数的函数?
【发布时间】:2021-02-20 10:40:24
【问题描述】:

我想对一个函数进行一些转换并返回一个新函数。 比如说我想要一个函数translate_arg_of_func(func) 这样

new_func=translate_arg_of_func(func)
new_func(4)

返回func(4+1)。我将如何在 python 中执行此操作?

(我不希望 translate_arg_of_func 被提供给 func 的参数。)

【问题讨论】:

    标签: python function decorator


    【解决方案1】:

    decorator,可以这样写:

    def translate_arg_of_func(func):
        def wrapper(arg):
            return func(arg + 1)
        return wrapper
    

    【讨论】:

      【解决方案2】:

      你基本上是在谈论装饰一个函数:

      def translate_arg_of_func(fun):
          def new_fun(arg):
              return fun(arg + 1)
          return new_fun
      

      现在您可以使用以下方法装饰您的函数:

      new_func=translate_arg_of_func(func)
      

      甚至直接使用@装饰函数:

      @translate_arg_of_func
      def func(arg):
          print(arg)
      

      【讨论】:

        【解决方案3】:

        装饰器模式,欢迎来到装饰器世界。

        例如

        
        def add_more_1(func):
            def _mutate_func(*args):
                new_arg = args[0]+1
                return func(new_arg)
            return _mutate_func
        
        def double(x):
            return x*2
        print(double(2))
        
        @add_more_1
        def double_mutate(x):
            return x*2
        
        print(double_mutate(2))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-06
          • 1970-01-01
          • 2016-08-01
          • 1970-01-01
          相关资源
          最近更新 更多