如何使用固定参数将函数作为变量传递

时间:2017-08-09 08:09:44

标签: python

我是Python的新手,但是我第二次遇到这个问题。 问题: 在某些库中有带参数的函数。有时会有作为函数的参数,如下所示:

def somefun(fun):
    x = [1,2,3]
    z = fun(x)
    return z

我想传递一些其他功能:

def func(x,y):
    return x*y

有多个参数。我想将一个参数设为静态,因此somefun除了func作为参数。

最后我想做一些我可以改变静态arg的循环。 像这样:

for i in xrange(1,9):
    somefun(func(i,*))

请不要让我改变任何功能。他们来自图书馆,改变它们并不是很舒服。 非常感谢!

3 个答案:

答案 0 :(得分:1)

您可以使用lambda语句:

somefun(lambda x: func(i, x))

答案 1 :(得分:1)

听起来好像在寻找functools.partial。来自文档:

  

functools.partial(func, *args, **keywords)

     
    

返回一个新的partial对象,该对象在调用时的行为类似func,并使用位置参数args和关键字参数keywords进行调用。

  

在您的示例中,您可以将partial(func, 10)作为参数传递给somefun。或者您可以创建partial个对象并在循环中使用它们:

for i in xrange(1,9):
    somefun(partial(func, i))

答案 2 :(得分:0)

我的装饰解决方案

from functools import wraps
import numpy as np

def p_decorate(f):
    @wraps(f)
    def wrapped(*args):
        z = f(*args)
        return z
    return wrapped

@p_decorate
def myfunc(a,b):
    """My new function"""
    z = np.dot(a,b)
    return z    

x = [1,2,3]
y = [4,2,0]
r = myfunc(x,y)
print (r)   

print (myfunc.__name__)
print (myfunc.__doc__)

您可以根据需要更改myfunc。您还可以插入更多功能层。如果不使用此装饰工厂,您将失去myfunc和docstring的名称。