【发布时间】:2019-09-02 12:17:29
【问题描述】:
我想知道为什么我应该使用 kwargs 或 args 而不是传入一个简单的 dict(或 args 的元组)?
我编写了一个非常简单的代码 sn-p 来检查到底发生了什么,但我找不到任何专业人士可以在 dict 上使用 kwargs。如果有人能告诉我为什么要使用那些我会很高兴的。 现在我可以看到它更像是pythonic,但没有任何区别。此外,如果您使用简单的 dict,那么它的可读性更高,因为所有语言都可以做到这一点,但 kwargs 方式却不行。
def test_normal(input: dict):
for element in input.items():
print('Type: {}, raw: {}'.format(type(input), input))
print('key: {}, value: {}'.format(element[0], element[1]))
def test_kwargs(**kwargs):
for element in kwargs.items():
print('Type: {}, raw: {}'.format(type(kwargs), kwargs))
print('key: {}, value: {}'.format(element[0], element[1]))
test_normal(dict(name='Joseph'))
test_kwargs(name='Joseph')
Type: <class 'dict'>, raw: {'name': 'Joseph'}
key: name, value: Joseph
Type: <class 'dict'>, raw: {'name': 'Joseph'}
key: name, value: Joseph
【问题讨论】:
-
因为
test_kwargs(name='Joseph')看起来比test_normal(dict(name='Joseph'))好很多 -
您的问题过于宽泛,请尝试将您的示例扩展为一个需要多个参数才能开始的函数。
-
kwargs的想法是一个干净的接口,允许输入参数不一定是预先确定的。这样你就不必把它扔进字典里了。参见this post。 -
@busybear 是的,您不必将其放入字典中,但是当您尝试在方法中使用它时,它仍然是字典。
标签: python dictionary keyword-argument