gpt4 book ai didi

python - 调用 Python 函数而不向其传递参数 - animate(i)

转载 作者:太空宇宙 更新时间:2023-11-03 13:39:26 24 4
gpt4 key购买 nike

我正在努力弄清楚这段代码中发生了什么,并对其进行调整以使我自己的代码正常工作。我不确定它是 Python 函数通用的东西还是 matplotlib 动画包特有的东西。

代码来自Jake Vanderplas animation tutorial但网络上有类似的例子。

这是调用的动画函数:

# animation function.  This is called sequentially
def animate(i):
x = np.linspace(0, 2, 1000)
y = np.sin(2 * np.pi * (x - 0.01 * i))
line.set_data(x, y)
return line,

这是调用它的行:

anim = animation.FuncAnimation(fig, animate, init_func=init,
frames=200, interval=20, blit=True)

animate 接受参数 i 但他调用它时没有变量 ianimation.FuncAnimation 是否知道要在其中传递一个值,或者它是如何工作的?

小题外话 - return 语句后面的逗号有什么意义吗?

最佳答案

当看到像这样的案例时,最好记住函数就像 Python 中的其他一切一样,是对象。因此,除其他外,它们可以存储在数据结构中,重新分配名称并作为另一个函数参数传递

查看 animation.FuncAnimation 的文档:

class matplotlib.animation.FuncAnimation(fig, func, frames=None, init_func=None, fargs=None, save_count=None, **kwargs) Bases: matplotlib.animation.TimedAnimation

Makes an animation by repeatedly calling a function func, passing in (optional) arguments in fargs.

所以它简单地获取函数对象 animate(在本例中)并使用 fargs 中提供的参数调用它(如果不是指定,默认为 None)。

注意:查看FuncAnimation 的源代码后我意识到 fargs 只是传递给函数 animate附加参数,如果 fargs=None 它们默认一个空元组意味着没有参数。 (在这种情况下,实际上不应指定 fargs,因为 animate 只接受一个参数)

animate 函数调用使用:func(framedata, *self._args) 其中 framedataframes 最初传递的参数和 self._args 是通过 fargs 提供的任何参数。

完整的调用(下面的self._func实际上是你的animate函数):

 # Call the func with framedata and args. If blitting is desired,
# func needs to return a sequence of any artists that were modified.
self._drawn_artists = self._func(framedata, *self._args)

是的,matplotlib 在内部使用 framedata 参数调用您的函数。


作为 return 中的尾随逗号,这意味着它将返回值作为具有单个元素的元组,在本例中为 line。它与以下内容相同:

>>> i = 1,
>>> i
(1,) # tuple with single element

关于python - 调用 Python 函数而不向其传递参数 - animate(i),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34291135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com