我对使用*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"
但在我看来,像第一个方法定义(它会产生语法错误)这样的东西更直观。
你能切换到python 3吗?,在Python 3中,您可以使用第一种方法:
你会得到:
您将使用
kwargs
,并在调用中执行赋值,而不是在定义中执行赋值:它给出:
您可以使用
get
将foo
设置为bar
的默认值,如下所示:因此
kwargs["bar"]
始终是foo
,除非显式更改:相关问题 更多 >
编程相关推荐