从python中的列表调用函数

时间:2016-12-21 17:14:58

标签: python

举个例子:

presets = [
    "eggs",
    "bacon"
    ]

print(presets[0])
>>> eggs

为什么不能做同样的事情,要执行的项目列表?举个例子:

from animations import animation_2, animation_3, animation_4
presets = [
    animation_2.iterate(animations_templates_path, thumbnails_final),
    animation_3.iterate(animations_templates_path, thumbnails_final),
    animation_4.iterate(animations_templates_path, thumbnails_final)
    ]

当我运行它(WITH和WITHOUT preset[n])时,它会执行列表中的所有三个命令。为什么是这样?我想有一个这些预设的列表,并通过索引号码调用它们。我做错了什么?

2 个答案:

答案 0 :(得分:2)

它执行这些项目,因为这就是你告诉它要做的事情。您的代码与此完全相同:

p1 = animation_2.iterate(animations_templates_path, thumbnails_final)
p2 = animation_3.iterate(animations_templates_path, thumbnails_final)
p3 = animation_4.iterate(animations_templates_path, thumbnails_final)
presets = [p1, p2, p3]

Python无法知道您不打算调用这些函数。

一种解决方案是存储元组:

presets = [
    (animation_2.iterate, animations_templates_path, thumbnails_final),
    (animation_3.iterate, animations_templates_path, thumbnails_final),
    (animation_4.iterate(animations_templates_path, thumbnails_final),

存储函数和参数而不调用函数。您可以在以后迭代列表并执行该功能。

答案 1 :(得分:1)

您可以将实际的功能对象存储在列表中

from animations import animation_1, animation_2, animation_3
presets = [
    animation_2.iterate,
    animation_3.iterate,
    animation_4.iterate
    ]

然后根据索引调用所需的函数。这样,在构造list时不会执行该函数,而只会在调用它时执行它。

presets[0](animations_templates_path, thumbnails_final)