我正在努力弄清楚这段代码中发生了什么,并使其适应我自己的代码。我不确定它是否是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
,但他在没有变量i
的情况下调用它。 animation.FuncAnimation
以某种方式知道在那里传递一个值或者它是如何工作的?
小一点 - 在任何重要的返回声明之后是逗号吗?
答案 0 :(得分:4)
当看到像这样的案例时,记住函数,就像Python中的其他内容一样,是对象是件好事。 。因此,除其他外,它们可以存储在数据结构中,重新分配名称并作为另一个函数参数传递。
查看 animation.FuncAnimation
的文档:
class matplotlib.animation.FuncAnimation(fig, func, frames=None, init_func=None, fargs=None, save_count=None, **kwargs)
基础:matplotlib.animation.TimedAnimation通过重复调用函数func,在fargs中传入(可选)参数来制作动画。
所以它只需要函数对象 animate
(在本例中)并使用fargs
中提供的参数调用它(如果未指定,则默认为{{ 1}})。
注意:查看FuncAnimation
的来源后,我意识到None
只是其他参数要传递给函数{{1如果fargs
它们默认为空元组,则表示没有参数。 (在这种情况下,animate
不应该确实指定,因为fargs=None
只接受一个参数)
使用fargs
调用函数animate
,其中animate
与最初传递的func(framedata, *self._args)
参数相关,framedata
是通过{{1}提供的任何参数}}。
完整调用(以下frames
实际上是您的self._args
函数):
fargs
所以,在内部,matplotlib使用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)
。它与以下内容相同:
framedata
答案 1 :(得分:1)
是的,它是元组的简写语法,所以...
return line, == return (line,)
我没有看过matplotlib,但我认为你对它的语法感到困惑。人们可以将函数作为参数传递。见下文
def foo(func,x,y,z): # foo takes in func,x,y,z
return func(z) # foo returns func(z)
def bar(a): # bar takes in a, return a*a
return a*a
print foo(bar,2,3,4) # foo returns bar(4)
答案 2 :(得分:1)
答案 3 :(得分:0)
对于您提出的部分,
我不确定它是否是Python函数的通用内容
我邀请您阅读本教程的第二行。 http://www.diveintopython.net/getting_to_know_python/everything_is_an_object.html
基本上,在使用Python进行编程时需要牢记,
一切都是一个物体,它可以像普通物体一样传递。
这意味着,类,函数,整数,字符串,列表,集合,元组......一切。因为如果您看到所有这些不同数据类型的基本类型,您会惊奇地发现,基本类型的所有内容都是<type 'type'>
进一步阅读:http://www.cafepy.com/article/python_types_and_objects/python_types_and_objects.html#basic-concepts