为何添加逗号会使matplotlib变量类型变为Line2D而非列表?
关于matplotlib中ax.plot赋值类型差异的解释
首先明确ax.plot()的返回值:
matplotlib的ax.plot()函数,无论绘制一条还是多条曲线,返回的都是包含Line2D对象的列表——哪怕只画一条空曲线,返回的也是长度为1的列表。
接下来看两种赋值方式的区别:
var_2 = ax.plot([], []):直接把整个返回的列表赋值给var_2,所以var_2的类型自然是list。var_1, = ax.plot([], []):这是Python的序列解包语法。因为右边是长度为1的列表,带逗号的赋值会直接提取列表里的唯一元素(也就是那个Line2D对象)赋值给var_1,效果等价于var_1 = ax.plot([], [])[0]。
举个Python基础例子就能明白这个语法:
lst = [100] x, = lst # 解包提取列表中的唯一元素 y = lst print(type(x), type(y)) # 输出 <class 'int'> <class 'list'>
本质上这个差异和matplotlib无关,完全是Python赋值时的序列解包特性导致的。
内容的提问来源于stack exchange,提问作者rafaelcb21
相关产品推荐
相关产品推荐

