在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'
是否可以在运行时重新定义函数的默认参数,就像我在这里所做的那样?
使用
func_defaults
作为检查文档中的函数默认值here
更新:看看里亚德的回答,我觉得我的回答太直白了。我不知道你问这个问题的上下文,但总的来说(在Zen of Python之后),我相信使用部分应用程序比重新定义函数的默认参数更好
从技术上讲,按你的要求做是可能的……但这不是个好主意。里亚德的回答是用Python的方式来做这件事。
在Python 3中:
与所有隐藏在文档中且难以在文档中找到的内容一样,^{} 模块图是查找函数属性的最佳位置。
Python 2中的细节略有不同,但想法是相同的。(只需将docs页面左上角的下拉菜单从3.3更改为2.7。)
如果您想知道当Python只有一个元组时,它是如何知道哪些默认值与哪些参数一起使用的……它只是从末尾开始倒数(或者是
*
、*args
、**kwargs
的第一个值——之后的任何值都进入__kwdefaults__
dict)。f.__defaults = (4, 5)
将默认值设置为y
,z
设置为4
和5
,默认值为x
。这是因为在默认参数之后不能有非默认参数。在某些情况下,这是行不通的,但即使这样,您也可以将其永久复制到具有不同默认值的新函数:
在这里,^{} module 文档并没有真正解释任何东西,但是交互解释器中的
help(types.FunctionType)
显示了所需的参数。只有内置函数才是不能句柄的情况。但它们通常没有实际的默认值;相反,它们在C API中伪造了类似的东西。
只需使用functools.partial
这里有一个问题:您不能将其称为
multiplyNumbers(5, 7, 9);
您应该手动地说y=7
如果需要删除默认参数,我认为有两种方法:
将原始函数存储在某处
使用
partial.func
相关问题 更多 >
编程相关推荐