我是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,*))
请不要让我改变任何功能。他们来自图书馆,改变它们并不是很舒服。 非常感谢!
答案 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的名称。