2017-08-09 205 views
2

我是Python中的新手,但是第二次介绍了这个问题。 问题: 在一些库中有一些带参数的函数。有时,参数作为函数,像这样:如何将函数作为变量传递给固定参数

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

而且我想通过有一些其他的功能是这样的:

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

其中有多个参数。我想使一个参数静态,所以somefun除了func作为参数。

最后我想做一些循环,我可以改变静态参数。 事情是这样的:

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

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

+0

'def func2(y):return func(10,y)'? –

+1

您可以使用装饰器来进行pas功能。 – MishaVacic

+0

您可以更具体地了解您正在使用的库吗? –

回答

1

你可以使用拉姆达声明:

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

我与装饰解决方案

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你wish.You也可以将更多的功能layers.Without使用这个装饰的工厂,你会失去myfunc的名称和文档字符串。

1

它肯定听起来像你正在寻找functools.partial。从文档:

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

回报,要求在新partial对象会像func称为与位置参数args和关键字参数keywords

在你的榜样,你可以通过​​作为参数传递给somefun。或者你可以创建partial对象并在循环中使用它们:

for i in xrange(1,9): 
    somefun(partial(func, i)) 
相关问题