从通用函数定义函数列表

时间:2013-11-13 16:12:02

标签: python metaprogramming decorator

说我有一个功能

def my_meta_function (a, b, c):
  pass

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

  • 这种类型的元编程有名字吗?
  • 装饰器适用于此吗?如果没有,为什么?

2 个答案:

答案 0 :(得分:6)

使用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

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

答案 1 :(得分:3)

你可以这样做:

>>> def func(c):
...    def wrapped(a, b):
...        return (a+b)*c
...    return wrapped
...
>>> funcs = [func(c+1) for c in xrange(100)]
>>> funcs[0](1, 2)
3
>>> funcs[1](1, 2)
6