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

是否可以在Python中更改函数的默认参数?

洪承天
2023-03-14
问题内容

在Python中,是否可以在运行时重新定义函数的默认参数?

我在这里定义了带有3个参数的函数:

def multiplyNumbers(x,y,z):
    return x*y*z

print(multiplyNumbers(x=2,y=3,z=3))

接下来,我尝试(未成功)设置y的默认参数值,然后尝试调用不带参数的函数y

multiplyNumbers.y = 2;
print(multiplyNumbers(x=3, z=3))

但是由于y未正确设置默认值,所以产生了以下错误:

TypeError: multiplyNumbers() missing 1 required positional argument: 'y'

正如我在此尝试的那样,是否可以在运行时重新定义函数的默认参数?


问题答案:

只需使用functools.partial

 multiplyNumbers = functools.partial(multiplyNumbers, y = 42)

这里的一个问题:您将无法调用它,因为multiplyNumbers(5, 7, 9);您应该手动说y=7

如果您需要删除默认参数,我会看到两种方法

  1. 将原始功能存储在某个地方

    oldF = f
    

    f = functools.partial(f, y = 42)
    //work with changed f
    f = oldF //restore

  2. 采用 partial.func

    f = f.func //go to previous version.
    


 类似资料:
  • 问题内容: 假设我有一个带两个参数的python函数,但我希望第二个arg是可选的,默认值是作为第一个参数传递的参数。所以,我想做这样的事情: 除非那行不通。我能想到的唯一解决方法是: 有一个更好的方法吗? 问题答案: 正如@Ignacio所说,您不能这样做。在后面的示例中,您可能会遇到的有效值。在这种情况下,您可以使用前哨值:

  • 问题内容: 是否可以在String方法中使用默认参数。代码如下所示: 上面的代码生成错误。有可能纠正吗? 问题答案: 不,您通常这样做的方法是重载这样的方法:

  • 问题内容: 我只看到了在类定义中设置方法的示例。是否可以在其定义中或定义它们后更改for函数? 我尝试没有成功… 问题答案: 是的,如果您愿意放弃该功能实际上是一个功能。 首先,为我们的新类型定义一个类: 添加装饰器功能: 现在我们可以定义repr和函数了: 现在生产

  • 当我将firstThing(第一件事)设置为default(默认值)时,如果没有默认值nil(默认值),这将起作用,我会得到一个错误,即调用函数时缺少参数。 通过键入Int 我认为它使它成为可选的,默认值为零,对吗?如果是这样,为什么没有=nil它就不能工作?

  • 问题内容: 我尝试使用以下方法更改默认参数值: 而所有的SQL预编译器给我的都是这个错误: 消息102,级别15,状态1,过程my_sp,第8行’(’附近的语法不正确。 我已经创建了过程。(我不确定这是否相关。)我使用的是空默认值,以后再检查它,但这似乎不合适。我可以一行完成吗? 更新:我不打算使用MSDN对存储过程参数的描述: [= default]是参数的默认值。如果定义了默认值,则可以在不为

  • 问题内容: 我在Google上搜索并不断提出“不,这是不可能的”,但是这些帖子的发布日期为2005-2007,所以我想知道是否已更改。一个代码示例: 解决方案之一是传递null,然后检查null并设置变量。我不想这样做,也不必这样做。如果这是真的,那么MySql开发人员需要唤醒,因为我可以用MSSQL做更多的事情。 问题答案: 仍然不可能。