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())
    中的
    *
    解压
    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()))

更广义的星号运算符:

我想在@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)

我想在@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)
相同