当前位置: 首页 > 面试题库 >

使用部分参数创建Python函数

楚墨一
2023-03-14
问题内容

我想将Python函数的某些参数提前“传递”给另一个函数。

这是我正在做的简化:

def add(x, y):
    return x + y

def increment_factory(i):  # create a function that increments by i
    return (lambda y: add(i, y))

inc2 = increment_factory(2)

print inc2(3) # prints 5

我不想使用某种形式的传递,args以后再进行分解,*args因为传递inc2给我的函数不知道传递args给它。

对于小组项目来说,这有点太聪明了……是否有更直接或更Python的方法来执行此操作?

谢谢!


问题答案:

这称为currying或部分应用程序。您可以使用内置的functools.partial()。像下面这样的东西会做你想要的。

import functools
def add(x,y):
    return x + y

inc2 = functools.partial(add, 2)
print inc2(3)


 类似资料:
  • 问题内容: 我有一个带几个参数的Python函数。在某些情况下,可以忽略其中一些参数。 这些参数通过是字符串,每个都有不同的含义。我可以选择要以任何组合形式传递的可选参数,这一点很重要。例如,或,,或,或所有它们(这些是我的选择)。 如果我可以重载该函数,那就太好了-但我读到Python不支持重载。我试图在列表中插入一些必需的int参数-并收到参数不匹配错误。 现在,我正在发送空字符串来代替前几个

  • 在Scala中,我想创建一个抽象类,它接受一些“策略”参数(这里是)和一个值参数(这里为)。我想从该类继承,将策略参数作为继承的一部分提供,并获得一个类(这里是),该类接受该值作为构造函数参数。 下面是我希望能够运行的代码: 不幸的是,我收到以下错误: 错误:构造函数Cls1的参数太多:()A$A58.this.Cls1惰性val obl=new Cls1(5)错误:缺少构造函数Base的参数列表

  • 我有一个场景,需要使用AWS CDK python语言创建多个lambda函数。 当我尝试为每个函数创建多个堆栈时,它创建了第一个函数和显示该函数已经存在的其余函数。 如果我们调试cdk。对于创建的模板,两个堆栈Lambda函数显示相同的资源ID,如下所示: 如何为创建多个函数的资源获取唯一ID?你能建议如何克服这个问题吗?我想创建多个lambda函数,即使解决方案是通过创建循环来实现的,也很好

  • 问题内容: 是否可以在Python的用法或帮助()中不显示参数的情况下将其添加到python中? 问题答案: 是的,您可以将选项设置为。这是argparse文档中的示例:

  • 本文向大家介绍JavaScript 使用rest参数创建参数数组,包括了JavaScript 使用rest参数创建参数数组的使用技巧和注意事项,需要的朋友参考一下 示例 如果您需要一个数组,其中包含您可能会或可能不会希望拥有的额外参数,除了您明确声明的参数外,还可以在参数声明内使用array rest参数,如下所示: 示例1,数组中的可选参数: 示例2,所有参数现在都是一个数组: 控制台输出tru

  • 问题内容: 我正在尝试在循环内创建函数: 问题在于所有功能最终都相同。这三个函数都没有返回0、1和2,而是返回2: 为什么会发生这种情况,我应该怎么做才能获得分别输出0、1和2的3个不同函数? 问题答案: 你在后期绑定方面遇到了问题-每个函数都i尽可能晚地查找(因此,在循环结束后调用时,i将设置为2)。 可以通过强制早期绑定轻松修复:更改为以下形式: 缺省值(右手i输入i=i是参数名的默认值,i左