** {'xerr':cv_std}是什么意思?

时间:2018-12-07 08:03:18

标签: python-3.x

给出以下代码

import seaborn as sns
g = sns.barplot(x="CrossValMeans",y="Algorithm",data = cv_res, palette="Set3",**{'xerr':cv_std})

**{'xerr':cv_std}是什么意思?

2 个答案:

答案 0 :(得分:0)

** {}表示您正在将keyword argument传递给函数或方法。

*args and **kwargs您可以检查此内容以获得更好的解释。

例如

class Test:
    def test(self, x, y='y_value', **kwargs):
        print(x, y, kwargs, type(kwargs))

t = Test()
t.test('x_value', **{'a': 1, 'b': 'Hello World'}) # YOU CAN PASS THIS AS **{}
t.test('x_value', a=1, b='Hello World') # OR AS THIS

输出:

x_value y_value {'a': 1, 'b': 'Hello World'} <class 'dict'>
x_value y_value {'a': 1, 'b': 'Hello World'} <class 'dict'>

答案 1 :(得分:0)

让我们从实际解释python中***的含义开始。 -在Python中称为unpacking

如果我们以您的字典为例:

**{'xerr':cv_std} 

实质上,您是在告诉python将值解压缩为关键字参数;而您可以将其更改为:

*{'xerr': cv_std}

,这将指示python拾取键并将其作为参数(而不是关键字参数)传递。

总结一下,看看:

def my_function(*args, x, **kwargs):
    print(args, x, kwargs)

my_function(*{'xer': 1}, **{'x': 2})

将输出:

('xer',) 2 {}

解压缩与将字典解压缩为关键字参数或键元组相比,还有很长的路要走。

>>> a, *extras = [1, 2, 3, 4, 5]
>>> a
1
>>> extras
[2, 3, 4, 5]

以上内容称为扩展序列拆包。关于拆包,有很多信息可以讨论。我建议您阅读在线文章以获取更多信息。