python将变量传递给函数参数

python将变量传递给函数参数,python,Python,我认为这是一个python初学者的问题 我的目标是将变量idx传递给作为参数给出的函数 我试图包装函数调用,将变量作为参数传递,但由于某些原因,结果并不像我预期的那样 代码如下: for idx, path in enumerate(paths): def _mf(t): return make_frame(t, idx) clip2 = VideoClip(_mf, False, 10) 此循环将迭代2个项目。这两个片段将分别调用make_frame函数。 但对于两个剪辑,

我认为这是一个python初学者的问题

我的目标是将变量idx传递给作为参数给出的函数

我试图包装函数调用,将变量作为参数传递,但由于某些原因,结果并不像我预期的那样

代码如下:

for idx, path in enumerate(paths):
  def _mf(t):
    return make_frame(t, idx)

  clip2 = VideoClip(_mf, False, 10)
此循环将迭代2个项目。这两个片段将分别调用make_frame函数。 但对于两个剪辑,第二个参数idx始终为1。我不明白

有人能帮我吗?谢谢

您可以试试:

def foo(idx):
    return lambda t: make_frame(t, idx)

for idx, path in enumerate(paths):
    clip2 = VideoClip(foo(idx), False, 10)

当我寻找这个问题的正确的DUP时,请看,解释它,以及如何做你想要的。如果你期待不同的结果,你就明白词法范围,并且来自C++之类的语言,其中每个块复合语句、嵌套语句、一对括号……是一个范围,Python的不同之处在于,大多数块不是作用域,而是函数和类定义。这有点过于简单了,但足够接近了。好吧,那么_mf函数将在迭代过程中被覆盖,对吗?解决办法是什么?我来自java和javascript世界……不,每次迭代都会得到一个名为_mf的单独函数,每个函数都有自己的闭包,但它们都是同一个idx变量上的闭包,在调用它时,它的值是2。无论是我在第一条评论中链接的常见问题解答,还是链接的重复问题的答案,都比我在评论中所能解释的要好得多,并且在这不是你想要的时提供了解决办法。如果不知道你已经了解了多少,就很难确切地知道如何解释这一点,但简单的回答是,我的目标是传递一个变量是错误的,这正是你正在做的,但你真正想要的是传递一个变量的当前值。您可以通过将其作为默认参数值传递,或使用创建并返回新函数的函数,或functools.partial,或除了在变量上实际创建闭包之外的任何其他方法来实现。非常感谢,它起作用了。因为您在别处抱怨我没有撤消对错误答案的投票,所以您更正了,我去寻找,找到了这个。有人对此投了反对票,大概再也没有回来过。我不知道他们这样做是因为和我评论中的问题一样的问题,还是只是那些喜欢惩罚回答问题的人中的一个,而这个问题显然应该作为十字军东征的一部分被关闭。但不管是什么原因,我都无法撤销别人的否决票。我可以删除我的评论,我会这么做。@abarnert Ok,我收回它。我很抱歉