Python 他们说';有状态的';?
我对matplotlib-pyplot教程有一个问题,链接是 我以荷兰语为母语,能读标准英语。 我的问题不是关于一个不起作用的例子,而是关于文本。 在pyplot_教程的一章中,使用多个图形和轴时,他们使用了statefulness和stateful这两个词。我不明白他们的意思。我们没有荷兰语来形容它。我在网上搜索了一下,但什么也没找到。我认为有状态意味着完全,利用一切可能 我希望有人能给我一个答案。Python 他们说';有状态的';?,python,matplotlib,Python,Matplotlib,我对matplotlib-pyplot教程有一个问题,链接是 我以荷兰语为母语,能读标准英语。 我的问题不是关于一个不起作用的例子,而是关于文本。 在pyplot_教程的一章中,使用多个图形和轴时,他们使用了statefulness和stateful这两个词。我不明白他们的意思。我们没有荷兰语来形容它。我在网上搜索了一下,但什么也没找到。我认为有状态意味着完全,利用一切可能 我希望有人能给我一个答案。 我知道这不是一个要问的问题,因为它与编程无关,但我不知道还能问到哪里。在这种情况下,状态类似于
我知道这不是一个要问的问题,因为它与编程无关,但我不知道还能问到哪里。在这种情况下,状态类似于内存 你可以用一个类比来思考:
- 一个无国籍的人对他们从一项任务到下一项任务的生活没有记忆
- 一个有状态的人有记忆/从一项任务到下一项任务跟踪他们的生活
这避免了过多的内存消耗和处理开销。在这种情况下,最好通过一个简单的绘图示例来理解这种差异 首先是有状态的例子:
import matplotlib.pyplot as plt
plt.figure()
plt.plot([0,1], [1,0])
然后是无状态(或者更确切地说是面向对象的方法):
它们执行相同的步骤:
matplotlib.figure.figure
)matplotlib.axes.AxesSubplot
)并将其添加到图形中matplotlib.lines.Line2D
)fig
,ax
,li
)。引用在有状态接口中也不会丢失,但它们隐藏在matplotlib
中的某个地方
当我们尝试更改某些属性(例如图形的大小)时,这种差异变得明显。使用OO方法:
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
li = ax.plot([0,1], [1,0])
fig.set_size_inches([10, 8])
使用有状态方法,我们首先需要找到图形<代码>plt.gcf。因此:
plt.gcf().set_size_inches([10,8])
这几乎是一回事。在我们同时打开多个图形的情况下,“几乎”部分变得非常重要plt.gcf
返回“当前”数字,但很难判断哪个是当前数字
同样的情况在轴或线上重复出现。如果要调整绘图的x刻度,则:
ax.set_xticks([0,.5,1])
这很简单。通过有状态方法,它变成:
plt.gca().set_xticks([0, .5, 1])
其中gca()
返回“当前”轴。如果您有几个子地块,这将变得相当复杂
所以,问题是谁拿着这些东西。有状态接口只是面向对象信息的薄包装。所有参数都在对象中,一个绘图中有许多对象(数百个,甚至数千个)
matplotlib
有状态接口的一点是,它经常与运行在IPython
中的pylab
一起使用。这提供了有状态接口和一些带有名称空间的快捷方式。绘制正弦曲线非常简单:
x = linspace(0, 2*pi, 100)
plot(x, sin(x))
这可以说比:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 100)
fig = plt.figure()
ax = fig.add_subplot(111)
li = ax.plot(x, np.sin(x))
但是,
pylab
提供的快捷方式在交互式工作中非常方便,但在脚本中并不好用。我也使用了pylab
,但我以面向对象的形式展示了几乎所有与matplotlib
相关的答案,因为它更加透明。有一个很好的解释。除了在CS/编程领域之外,我在英语语言的其他任何地方都没有见过这个词。也许有人会更清楚…是matplotlib记住了你绘制的数字。除非你说plt.close()
。当您打印少量图像时,这不是一个大问题,但当运行循环并打印许多图像时,它将消耗大量内存。我不知道matplotlib,但通常有状态意味着记录了某些状态,这是当前“会话”中隐含的一种上下文。我通常认为有状态与无状态相反,在每次调用/使用时,您必须提供完整的上下文,因为它没有被保留。如果您可以附加pyplot教程的url进行确认,这是一个快速注释。这是一个很好的示例,但这个答案部分是不正确的:matplotlib.pyplot.figure
,虽然看起来更像OOP,但仍然提供绑定到pyplot
的有状态绘图实例matplotlib.figure.figure
将返回无状态版本。