绘制返回两个列表的函数。我绘制它的第一种方法很好,第二种方法得到了一个奇怪的多色图。为什么python对这两者的解释不同?
import numpy as np
import matplotlib.pyplot as plt
def Triangle():
x_values = [0.0]
y_values = [0.0]
pos_step = 0
neg_step = 0
for x in range(0, 100):
pos_step += .01
neg_step -= .01
x_values.append(pos_step)
x_values.append(neg_step)
y_values.append(pos_step)
y_values.append(neg_step)
x_values.sort()
y_values.sort()
y_values = [abs(x) for x in y_values]
return x_values, y_values
x,y = Triangle()
plt.plot(x, y)
plt.show()
plt.plot(Triangle())
plt.show()
因为在第一个选项中,您要拆包值。让我解释一下:
x, y = something()
此函数返回一个包含两个值的元组,但使用所示语法将元组分离为两个自变量(x
和y
(。
z = something()
另一方面,我们有相同的函数,返回包含两个值的元组。但你不会打开它们。所以现在,z
包含一个元组(由两个元素组成,但仍然是一个元组(。
问题是,您试图使用plt.plot()
提供两个值,但在第二种情况下,您只提供了一个元组。该函数仍然可以工作,因为它需要任意数量的参数,并且可以通过它来创建绘图。
你能做什么?将拆包步骤移至plt.plot()
:plt.plot(*something())
。这个SO问题包含了许多关于使用此语法的有用信息:**(双星/星号(和*(星/星号(对参数有什么作用?。