python - 关键字如何继承默认参数
问题描述
我们知道偏函数是特定参数值的原始函数。部分函数的基本语法是,
partial(func[, *args][, **keywords])
现在,让我们假设一个特定的程序。
from functools import partial
def power(a, b):
return a ** b
pw = partial(power, b=4)
print('Default keywords for pw :', pw.keywords)
print('Default arguments for pw :', pw.args)
print('Answer of pw is: ',pw(3))
# Output
# -------
# Default keywords for pw: {'b': 4}
# Default arguments for pw: ()
# Answer of pw is: 81
输出是正确的,上面的部分函数我将关键字设置为b=4
,默认agrs
为()
. 现在,如果我省略了关键字b
并且那个地方我只放了 4。场景更改为答案是 64。
partial(power, 4)
# Output
# -------
# Default keywords for pw: {}
# Default arguments for pw: (4,)
# Answer of pw is: 64
我的问题是为什么当我不想通过时 args 和关键字会互换,b
因为虽然在第一种情况下我没有通过a
但结果是正确的。
解决方案
您4
作为位置partial
参数提供,并且在调用实例时严格从左到右应用这些参数。也就是说,partial(f, 4)
大致相当于lambda x: pow(4, x)
。如果不使用关键字参数,就无法定义函数lambda x: pow(x, 4)
的等效项。partial
推荐阅读
- c++ - 如何使用 cmake 生成器表达式为不同的编译器添加编译器标志?
- spring-data - 使用 CosmosDB 中的 Spring Data 返回嵌套对象的不同值
- swiftui - swiftUI 在计算 ZStack 元素的数据之前运行函数的同步问题
- r - 使用辅助数据框定义的变量计算唯一值
- regex - 正则表达式匹配字符串中相同子字符串中的最后一个子字符串
- java - Passay 生成不是旧密码的密码
- javascript - 是否可以在 JavaScript 或 TypeScipe 的自定义类中实现索引器?
- flutter - 如何在 Flutter 的 decimalPattern 中设置 maximumFractionDigits?
- google-apps-script - 如何修复来自 Google Ads API 的无效 JSON 负载错误
- sql-server - SQL - 在检查约束中添加 If else 条件