说我有一个功能
def my_meta_function (a, b, c):
pass
我想定义一个函数数组myfunctions = [f1, f2, f3, ... f100]
,其中每个这样的函数的参数c
固定为不同的值,例如c = [1,2,3, .. 100]
,函数只接受参数a
和b
。在实践中,我正在考虑的论点更加复杂,但我试图了解如何用语言做到这一点。
- 这种类型的元编程有名字吗?
- 装饰器适合这个吗?如果不是,为什么?
说我有一个功能
def my_meta_function (a, b, c):
pass
我想定义一个函数数组myfunctions = [f1, f2, f3, ... f100]
,其中每个这样的函数的参数c
固定为不同的值,例如c = [1,2,3, .. 100]
,函数只接受参数a
和b
。在实践中,我正在考虑的论点更加复杂,但我试图了解如何用语言做到这一点。
>>> 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
但是你不应该使用它,为什么?:
你可以这样做:
>>> 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