gpt4 book ai didi

python functools 部分混淆

转载 作者:行者123 更新时间:2023-12-04 16:23:03 24 4
gpt4 key购买 nike

考虑以下几点:

from functools import partial
def add(a, b, c):
return 100 * a + 10 * b + c

add_part = partial(add, c = 2, b = 1)
add_part(3)
312

工作正常。然而:

def foo(x, y, z):
return x+y+z

bar = partial(foo, y=3)

bar(1, 2)

吐槽:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: foo() got multiple values for argument 'y'

显然我遗漏了一些明显的东西,但是什么?

最佳答案

partial()的定义来自官方functools documentation是:

def partial(func, /, *args, **keywords):
def newfunc(*fargs, **fkeywords):
newkeywords = {**keywords, **fkeywords}
return func(*args, *fargs, **newkeywords)
newfunc.func = func
newfunc.args = args
newfunc.keywords = keywords
return newfunc

这意味着在您的情况下 partial() 返回 foo() 函数,其签名修改如下:

>>> from inspect import signature
>>> signature(bar)
<Signature (x, *, y=3, z)>

要解决您的错误,您可以为 bar() 函数提供关键字参数:

def foo(x, y, z):
return x+y+z

bar = partial(foo, y=3)

bar(x=1, z=2)

关于python functools 部分混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69960294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com