python – 从泛型函数定义函数列表

说我有一个功能

def my_meta_function (a, b, c):
  pass

我想定义一个函数数组myfunctions = [f1,f2,f3,… f100],其中参数c固定为每个这样的函数的不同值,例如: c = [1,2,3,.. 100],函数只接受参数a和b.在实践中,我正在考虑的论点更复杂,但我试图理解如何在语言中这样做.

>这种类型的元编程有名字吗?
>装饰者是否适合这个?如果没有,为什么?

解决方法:

使用functools.partial

>>> from functools import partial
def func(a, b, c):
...     print a, b, c
...     
>>> funcs = [partial(func, c=i) for i in xrange(5)]
>>> funcs[0](1, 2)
1 2 0
>>> funcs[1](1, 2)
1 2 1
>>> funcs[2](1, 2)
1 2 2

出于学习目的,您也可以使用lambda:

>>> funcs = [lambda a, b, i=i:func(a, b, c=i) for i in xrange(5)]
>>> funcs[0](1, 2)
1 2 0
>>> funcs[1](1, 2)
1 2 1

但你不应该使用它,为什么?:

> Python: Why is functools.partial necessary?
> What do (lambda) function closures capture in Python?

上一篇:Python修饰一个类来改变父对象类型


下一篇:python,装饰和封闭混淆