似乎 python 的许多方面只是功能的重复。除了我在 Python 中的 kwargs 和 dict 中看到的冗余之外,还有什么不同吗?
问问题
15864 次
2 回答
17
参数解包(许多人使用 )和作为参数之一kwargs
传递是有区别的:dict
使用参数解包:
# Prepare function def test(**kwargs): return kwargs # Invoke function >>> test(a=10, b=20) {'a':10,'b':20}
将 dict 作为参数传递:
# Prepare function def test(my_dict): return my_dict # Invoke function >>> test(dict(a=10, b=20)) {'a':10,'b':20}
差异主要是:
- 可读性(即使没有明确定义,您也可以简单地传递关键字参数),
- 灵活性(您可以显式支持一些关键字参数,其余使用
**kwargs
), - 参数解包可帮助您避免对“包含”参数的对象进行意外更改(这不太重要,因为 Python 通常假设开发人员知道他们在做什么,这是一个不同的主题),
于 2012-05-08T00:44:12.477 回答
5
没错,在大多数情况下,您可以互换 dicts 和 **kwargs。
例如:
my_dict = {'a': 5, 'b': 6}
def printer1(adict):
return adict
def printer2(**kwargs):
return kwargs
#evaluate:
>>> printer1(my_dict)
{'a': 5, 'b': 6}
>>> printer2(**my_dict)
{'a': 5, 'b': 6}
但是,如果将 kwargs 与其他参数结合使用,您将拥有更大的灵活性:
def printer3(a, b=0, **kwargs):
return a,b,kwargs
#evaluate
>>> printer3(**my_dict)
(5, 6, {})
于 2016-03-08T09:05:56.977 回答