Python 如何为存储在数组中的函数提供常量和动态参数

Python 如何为存储在数组中的函数提供常量和动态参数,python,arrays,Python,Arrays,我使用数组存储需要在行中调用的函数: def do_xslt(xsl, xml): newxml = dosomethingwithit(xsl,xml) return newxml TRANSFORM_PIPELINE = [ do_xslt('pass1.xsl'), do_xslt('pass2.xsl'), do_xslt('pass3.xsl'), ] 我现在要做的是调用带有给定参数和动态参数的TRANSFORM\u管道 我脑子里有这样的想法

我使用数组存储需要在行中调用的函数:

def do_xslt(xsl, xml):
    newxml = dosomethingwithit(xsl,xml)
    return newxml

TRANSFORM_PIPELINE = [
    do_xslt('pass1.xsl'),
    do_xslt('pass2.xsl'),
    do_xslt('pass3.xsl'),
]
我现在要做的是调用带有给定参数和动态参数的
TRANSFORM\u管道

我脑子里有这样的想法,应该在循环中调用
doxslt('passX.xsl',xml)

这种做法当然是错误的。但是如何在Python中使用正确的方法?

用于部分应用函数:

from functools import partial
TRANSFORM_PIPELINE = [
    partial(do_xslt, 'pass1.xsl'),
    partial(do_xslt, 'pass2.xsl'),
    partial(do_xslt, 'pass3.xsl')
]
调用
partial()
返回的函数将调用
do_xslt('pass1.xsl',*args,**kwargs)
,其中
*args
**kwargs
是传递给新函数的参数

演示:

用于部分应用该功能:

from functools import partial
TRANSFORM_PIPELINE = [
    partial(do_xslt, 'pass1.xsl'),
    partial(do_xslt, 'pass2.xsl'),
    partial(do_xslt, 'pass3.xsl')
]
调用
partial()
返回的函数将调用
do_xslt('pass1.xsl',*args,**kwargs)
,其中
*args
**kwargs
是传递给新函数的参数

演示:


使用
functools.partial()
-

或者,您也可以使用如下闭包:

def do_xslt(xsl):
    def inner(xml):
        newxml = dosomethingwithit(xsl,xml)
        return newxml
    return inner

这样,您就可以完全按照现在的方式保持转换管道。

使用
functools.partial()
-

或者,您也可以使用如下闭包:

def do_xslt(xsl):
    def inner(xml):
        newxml = dosomethingwithit(xsl,xml)
        return newxml
    return inner

通过这种方式,您可以完全按照现在的方式保持转换管道。

示例中没有,但实际函数将返回转换后的参数。不管怎样,我已经更新了。谢谢。部分函数起作用。这是最好的解决方案,因为我在TRANSFORM_管道中也有函数,它们不需要给定的常量(在进行xslt转换之前)。所以我可以在每次需要的时候使用partial。这个例子没有,但是一个实函数会返回转换后的参数。不管怎样,我已经更新了。谢谢。部分函数起作用。这是最好的解决方案,因为我在TRANSFORM_管道中也有函数,它们不需要给定的常量(在进行xslt转换之前)。所以我每次需要的时候都可以使用partial。
def do_xslt(xsl):
    def inner(xml):
        newxml = dosomethingwithit(xsl,xml)
        return newxml
    return inner