Python *、in*zip和*D.items()在做什么? *zip和*D.items()在以下代码中如何工作 *操作员做什么 导入matplotlib.pyplot作为plt D={u'Label1':26,u'Label2':17,u'Label3':30} plt.bar(*zip(*D.items())) plt.show() 与代码相关的星号运算符: 是一种可以迭代的东西 *解压iterable D.items()创建一个dict\u items对象,一个元组的列表。看到和 dict_项目([('Label1',26),('Label2',17),('Label3',30)]) zip(*D.items())中的*解压dict\u times对象,并聚合每个iterable中的元素。 ('Label1','Label2','Label3') (26、17、30) 创建一个(另一个iterable),如,它是元组的iterable *zip中的*解压生成器,因此绘图API可以访问两个元组 导入matplotlib.pyplot作为plt D={u'Label1':26,u'Label2':17,u'Label3':30} plt.bar(*zip(*D.items()))
更广义的星号运算符:Python *、in*zip和*D.items()在做什么? *zip和*D.items()在以下代码中如何工作 *操作员做什么 导入matplotlib.pyplot作为plt D={u'Label1':26,u'Label2':17,u'Label3':30} plt.bar(*zip(*D.items())) plt.show() 与代码相关的星号运算符: 是一种可以迭代的东西 *解压iterable D.items()创建一个dict\u items对象,一个元组的列表。看到和 dict_项目([('Label1',26),('Label2',17),('Label3',30)]) zip(*D.items())中的*解压dict\u times对象,并聚合每个iterable中的元素。 ('Label1','Label2','Label3') (26、17、30) 创建一个(另一个iterable),如,它是元组的iterable *zip中的*解压生成器,因此绘图API可以访问两个元组 导入matplotlib.pyplot作为plt D={u'Label1':26,u'Label2':17,u'Label3':30} plt.bar(*zip(*D.items())),python,matplotlib,Python,Matplotlib,更广义的星号运算符: 与代码相关的星号运算符: 是一种可以迭代的东西 *解压iterable D.items()创建一个dict\u items对象,一个元组的列表。看到和 dict_项目([('Label1',26),('Label2',17),('Label3',30)]) zip(*D.items())中的*解压dict\u times对象,并聚合每个iterable中的元素。 ('Label1','Label2','Label3') (26、17、30) 创建一个(另
- 是一种可以迭代的东西
解压iterable*
创建一个D.items()
对象,一个dict\u items
元组的
列表。看到和
dict_项目([('Label1',26),('Label2',17),('Label3',30)])
中的zip(*D.items())
解压*
对象,并聚合每个iterable中的元素。dict\u times
('Label1','Label2','Label3')
(26、17、30)
- 创建一个(另一个iterable),如
,它是元组的iterable
中的*zip
解压生成器,因此绘图API可以访问两个*
元组
导入matplotlib.pyplot作为plt
D={u'Label1':26,u'Label2':17,u'Label3':30}
plt.bar(*zip(*D.items()))
更广义的星号运算符:
*
解包:
>l=[1,2,3]
>>>打印(l)#==打印([1,2,3])
[1, 2, 3]
>>>打印(*l)#==打印(1、2、3)
1 2 3
基本上,print(l)
被转换为print([1,2,3])
,然后输出为列表本身[1,2,3]
。
另一方面,print(*l)
被转换为print(1,2,3)
,也就是说,列表被解包,每个元素作为单独的参数传递到print,因此输出是1 2 3
因此,在您的示例中,内部的*
解包每个项元组(('Label1',26)
,('Label2',17)
和('Label3',30)
),并将它们作为单独的参数传递给zip
(zip('Label1',26),('Label2',17),('Label3',30))
)。它返回另一个类似列表的对象,相当于传输这些序列,这就是,将每个iterable的所有第一个元素组合在一起,第二个元素组合在一起。。。([('Label1','Label2','Label3'),(26,17,30)]
)。outter*
将它们从类似列表的对象中解压出来,将每个元组传递给plt.bar
函数(plt.bar(('Label1','Label2','Label3'),(26,17,30))
)
与解包序列的
*
类似,有一个***
用于将映射解包到关键字参数中f(**{'a':1,'b':2})
与f(a=1,b=2)
我想在@TrentonMcKinney的回答中添加一些使用*
解包的示例:
>l=[1,2,3]
>>>打印(l)#==打印([1,2,3])
[1, 2, 3]
>>>打印(*l)#==打印(1、2、3)
1 2 3
基本上,print(l)
被转换为print([1,2,3])
,然后输出为列表本身[1,2,3]
。
另一方面,print(*l)
被转换为print(1,2,3)
,也就是说,列表被解包,每个元素作为单独的参数传递到print,因此输出是1 2 3
因此,在您的示例中,内部的*
解包每个项元组(('Label1',26)
,('Label2',17)
和('Label3',30)
),并将它们作为单独的参数传递给zip
(zip('Label1',26),('Label2',17),('Label3',30))
)。它返回另一个类似列表的对象,相当于传输这些序列,这就是,将每个iterable的所有第一个元素组合在一起,第二个元素组合在一起。。。([('Label1','Label2','Label3'),(26,17,30)]
)。outter*
将它们从类似列表的对象中解压出来,将每个元组传递给plt.bar
函数(plt.bar(('Label1','Label2','Label3'),(26,17,30))
)
与解包序列的*
类似,有一个***
用于将映射解包到关键字参数中f(**{'a':1,'b':2})
与f(a=1,b=2)
相同