2017-08-09 200 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)) 
相關問題