关键字如何继承默认参数
How keywords inherit to default arguments
我们知道偏函数是针对特定参数值的原始函数。部分函数的基本语法是,
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
我的问题是为什么当我不想传递 b
时参数和关键字会互换,因为虽然在第一种情况下我没有传递 a
但结果是正确的。
我认为您对此处 partial
和 positional
以及 keyword
参数的相互作用感到困惑。
简单解释如下:when关键字arg。在调用中使用,列出参数的顺序 NOT
很重要! Python 按名称匹配,而不是
命令。调用者必须提供 - 垃圾邮件,以及接下来显示的示例中的鸡蛋,但它们可以按位置或按名称进行匹配 - 正如您在最后 2 个示例中看到的那样。
def func(spam, eggs, toast=0, ham=1): # first 2 required
print((spam, eggs, toast, ham))
func(1, 2) # (1, 2, 0, 1)
func(1, ham=2, eggs=0) # (1, 0, 0, 2)
# *****
#
print('------------------')
print('spam-lover, hate eggs: ')
func(spam=2, eggs=0) # (2, 0, 0, 1)
print()
print('love spam and eggs: ')
func(toast=1, eggs=4, spam=2) # (2, 4, 1, 1)
print('love spam/eggs and ham, want it toast too! ')
func(ham=6, eggs=4, spam=2, toast=1) # (2, 4, 1, 6)
func(1, 2, 3, 4) # (1, 2, 3, 4)
形式 - name=value 在调用和 def 中的含义不同!!!
- 调用中的关键字和
- a
default
在函数中。 header.
您提供 4
作为 位置 参数,并且在调用 partial
实例时严格从左到右应用这些参数。也就是说,partial(f, 4)
大致相当于 lambda x: pow(4, x)
。如果不使用关键字参数,就无法用 partial
定义函数 lambda x: pow(x, 4)
的等价物。
我们知道偏函数是针对特定参数值的原始函数。部分函数的基本语法是,
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
我的问题是为什么当我不想传递 b
时参数和关键字会互换,因为虽然在第一种情况下我没有传递 a
但结果是正确的。
我认为您对此处 partial
和 positional
以及 keyword
参数的相互作用感到困惑。
简单解释如下:when关键字arg。在调用中使用,列出参数的顺序 NOT
很重要! Python 按名称匹配,而不是
命令。调用者必须提供 - 垃圾邮件,以及接下来显示的示例中的鸡蛋,但它们可以按位置或按名称进行匹配 - 正如您在最后 2 个示例中看到的那样。
def func(spam, eggs, toast=0, ham=1): # first 2 required
print((spam, eggs, toast, ham))
func(1, 2) # (1, 2, 0, 1)
func(1, ham=2, eggs=0) # (1, 0, 0, 2)
# *****
#
print('------------------')
print('spam-lover, hate eggs: ')
func(spam=2, eggs=0) # (2, 0, 0, 1)
print()
print('love spam and eggs: ')
func(toast=1, eggs=4, spam=2) # (2, 4, 1, 1)
print('love spam/eggs and ham, want it toast too! ')
func(ham=6, eggs=4, spam=2, toast=1) # (2, 4, 1, 6)
func(1, 2, 3, 4) # (1, 2, 3, 4)
形式 - name=value 在调用和 def 中的含义不同!!!
- 调用中的关键字和
- a
default
在函数中。 header.
您提供 4
作为 位置 参数,并且在调用 partial
实例时严格从左到右应用这些参数。也就是说,partial(f, 4)
大致相当于 lambda x: pow(4, x)
。如果不使用关键字参数,就无法用 partial
定义函数 lambda x: pow(x, 4)
的等价物。