【问题标题】:Is there a way to append a function with arguments into a list?有没有办法将带有参数的函数附加到列表中?
【发布时间】:2013-06-04 19:46:14
【问题描述】:

我创建了一个循环来运行列表中的函数。

在我运行的每个函数结束时,我将需要运行的下一个函数附加到此列表中。

这就是我将它们附加到列表中的方式:

self.FunctionBuffer["stack"].append( self.ApplyFunction )

我是这样称呼他们的:

if len(self.FunctionBuffer["stack"]) > 0:
    self.FunctionBuffer["stack"][0]()

除了现在我想为我附加的函数添加参数之外,一切都运行良好,并且似乎没有这样的语法:

self.FunctionBuffer["stack"].append( self.ApplyFunction(arg1, arg2, arg3) )

有没有办法可以将带参数的函数附加到列表中?

【问题讨论】:

  • 什么语言?蟒蛇?
  • 澄清一下,你想多次调用self.ApplyFunction(),每次使用不同的参数?
  • 如果您在列表中添加函数及其参数会怎样?

标签: python list function arguments append


【解决方案1】:

是的,使用 functools.partial() 创建一个 new 可调用对象,它将使用参数调用您的函数:

from functools import partial

self.FunctionBuffer["stack"].append(partial(self.ApplyFunction, arg1, arg2, arg3))

functools.partial 存储你的函数和你的参数,当你调用返回的部分对象时,它会依次调用带有这些参数的函数。您也可以在调用该对象时添加 extra 参数:

>>> from functools import partial
>>> def foo(bar, baz): print (bar, baz)
... 
>>> p = partial(foo, 1, 2)
>>> p()
(1, 2)
>>> p = partial(foo, 1)
>>> p(2)
(1, 2)

你可以用 lambdas 实现同样的事情:

self.FunctionBuffer["stack"].append(lambda: self.ApplyFunction(arg1, arg2, arg3))

partial() 更快,并且提供了传递更多参数的选项。

【讨论】:

    【解决方案2】:

    为什么不直接将包含参数的列表推入要附加到 FunctionBuffer 的列表的第二个元素中?

    self.FunctionBuffer["stack"].append([self.ApplyFunction,[arg1, arg2, arg3]])
    
    ...
    
    if len(self.FunctionBuffer["stack"]) > 0:
        self.FunctionBuffer["stack"][0][0](*self.FunctionBuffer["stack"][0][1])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      • 2022-01-21
      • 2019-01-09
      • 1970-01-01
      • 2021-12-06
      • 2020-06-24
      • 1970-01-01
      相关资源
      最近更新 更多