gpt4 book ai didi

Python 试图在 *args 之后放置关键字参数

转载 作者:太空狗 更新时间:2023-10-29 18:22:13 24 4
gpt4 key购买 nike

我对使用 *args 有点困惑。

我想编写一个函数,它接受可变数量的参数,但仍然可以利用为关键字参数定义预定义值的优势。

但是这样写函数是不可能的:

def foo(*args, bar = "foo"):
print bar, args

可以这样写:

def foo2(bar = "foo", *args):
print bar, args

但随后我调用了 foo2 并传递了第一个参数,它覆盖了 bar 的默认值!

foo2("somevalue")
somevalue ()

有什么方法可以更好地做到这一点??

我知道我可以这样写:

def foo(*args, **kwargs):
kwargs["bar"] = "foo"

但从我的角度来看,类似于第一个方法定义(产生语法错误)的东西更直观。

最佳答案

您将使用 kwargs 并在调用而不是定义中进行赋值:

def foo2(*args, **kwargs):     # kwargs takes our key/values arguments
print args, kwargs

foo2(1, 2, 3, bar="foo") # bar is assigned to in call when using kwargs

给出:

(1, 2, 3) {'bar': 'foo'} 

您可以使用 getfoo 设置为 bar 的默认设置,如下所示:

def foo2(*args, **kwargs):
kwargs["bar"] = kwargs.get("bar", "foo") # if bar is not set use foo as val
print args, kwargs

foo2(1, 2, 3, bar="foo")
foo2(1, 2, 3, bar="notfoo")
foo2(1, 2, 3)

因此 kwargs["bar"] 始终是 foo 除非明确更改:

(1, 2, 3) {'bar': 'foo'}
(1, 2, 3) {'bar': 'notboo'}
(1, 2, 3) {'bar': 'foo'}

关于Python 试图在 *args 之后放置关键字参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22435992/

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