【问题标题】:Generate new function from old function with only one argument set仅使用一个参数集从旧函数生成新函数
【发布时间】:2012-06-11 17:40:36
【问题描述】:

假设我有一个函数

def oldfunction(arg1,arg2,arg3):
    print(arg1,arg2,arg3)

我想创建一个新函数,其中我将第一个参数设置为 10。新函数的行为将是:

>>> new_function(20,"30")
10 20 '30'

一种方法是使用 lambda 函数:

>>> newfunction = lambda arg2,arg3: function(10,arg2,arg3)
>>> newfunction("ten",[10])
(10, 'ten', [10])

但是,假设我事先不知道“oldfunction”需要多少参数。我仍然想创建一个与“oldfunction”相同的新函数,但设置了第一个参数,并且所有后续参数都保持打开状态。

有没有办法做到这一点?

【问题讨论】:

    标签: python function lambda arguments


    【解决方案1】:

    试试functools.partial:

    from functools import partial
    
    new_function = partial( oldfunction, 10 )
    

    【讨论】:

      【解决方案2】:

      以下示例允许您将 10 绑定到 oldfunction 中的第一个参数位置,然后在 *args 中提供剩余的两个参数。所以,试试这个:

      def newfunction(*args):
          return oldfunction(10, *args)
      

      【讨论】:

        【解决方案3】:

        这可能是一个功能性解决方案,您的代码在您的具体情况下看起来像这样:

        from functools import partial
        
        def newfunction(*args):
            return oldfunction(10, *args)
        
        newfunction(20, 30)
        (10, 20, 30)
        

        10 被绑定为 oldfunction 的第一个参数,然后是 *args。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-28
          • 2021-04-07
          • 1970-01-01
          • 2012-09-19
          • 1970-01-01
          • 2016-11-30
          • 2018-11-13
          • 1970-01-01
          相关资源
          最近更新 更多