gpt4 book ai didi

python - 将关键字参数传递给使用位置参数定义的函数时的误导性(?)TypeError

转载 作者:太空狗 更新时间:2023-10-29 20:48:33 25 4
gpt4 key购买 nike

在 cPython 2.4 中:

def f(a,b,c,d):
pass

>>> f(b=1,c=1,d=1)
TypeError: f() takes exactly 4 non-keyword arguments (0 given)

但是:

>>> f(a=1,b=1,c=1)
TypeError: f() takes exactly 4 non-keyword arguments (3 given)

显然,我真的不了解 Python 的函数参数处理机制。有人愿意分享这方面的一些信息吗?我明白发生了什么事(比如填充参数槽,然后放弃),但我认为这会让新手犯规。

(此外,如果人们有更好的问题关键字——比如“胆量”——请重新标记)

最佳答案

当你说

def f(a,b,c,d):

你是在告诉 python f 有 4 个 positional 参数。每次调用 f 时,它必须恰好提供 4 个参数,第一个值将分配给 a,第二个分配给 b,依此类推.

你可以用类似的东西调用f

f(1,2,3,4)f(a=1,b=2,c=3,d=4),甚至 f(c=3,b=2,a=1,d=4)

但在所有情况下,都必须提供恰好 4 个参数。

f(b=​​1,c=1,d=1) 返回错误,因为没有为 a 提供任何值。 (0 给定)f(a=1,b=1,c=1) 返回错误,因为没有为 d 提供值。 (给出 3 个)

给定的 args 数量表示 python 在意识到错误之前走了多远。

顺便说一句,如果你说

def f(a=1,b=2,c=3,d=4):

然后你告诉 python f 有 4 个可选参数。如果未给出某个参数,则会自动为您提供其默认值。然后你就可以不用打电话了

f(a=1,b=1,c=1)f(b=​​1,c=1,d=1)

关于python - 将关键字参数传递给使用位置参数定义的函数时的误导性(?)TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2179703/

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