2017-03-11 220 views
2

功能比方說,我有功能僅傳遞一個變量在Python

def f(x,y): 
    return x+y 

,我想創建一個返回在一個特定的變量傳遞函數的函數:

def G(f,n,q): #a function in which the n-th variable of function f is passed the value q 
    return ?? 

現在的問題是:我應該如何定義G

例如,G(f,0,1)應返回變量0傳遞值爲1的函數f。換句話說,G(f,0,1)應該表現爲g,我通過

def g(x): 
    return f(1,x) 
+0

應該爲'G(f,1,2)'返回一個'def g(x)'的函數:return f(x,2)'? –

+0

@MosesKoledoye:我認爲他的意思是*索引* 0的變量。 –

+0

確實威廉,這就是我的意思。 – user1162809

回答

2

在這種情況下,您可以構造構造函數的函數。像:

def G(f,n,q): 
    def h(*args): 
     ls = list(args) 
     ls.insert(n,q) 
     return f(*ls) 
    return h 

您從而構造一個函數h其作爲輸入元件*args的任意數量。然後您將其轉換爲list(..),以便您可以更改列表。接下來,將給定參數q作爲索引n插入到列表中,並將該列表以星號傳遞給給定函數f

+0

是的,你有我的upvote –

+0

這很漂亮,謝謝! – user1162809

0

確定這裏有一個小的,簡單的,相關工作的例子。一般來說,你可能想閱讀關於python裝飾器和部分函數。

>>> def power(x): 
...  def foo(y): 
...   return y**x 
...  return foo 
... 
>>> square = power(2) 
>>> cube = power(3) 
>>> square(2) 
4 
>>> square(3) 
9 
>>> cube(2) 
8 
>>> cube(3) 
27 
>>> 
0

你可以看看functools模塊。

例如,使用partial方法,你可以這樣做:

from functools import partial 
def G(f, n, q): 
    return partial(f, n=q) 

這將替換名爲n關鍵字參數與q

你也可以更換位置參數,但他們必須是爲了:

from functools import partial 
def G(f, n, q): 
    return partial(f, q) 

這將替換第一個參數爲q

+0

如果'n'不是'0',那麼這不起作用:'G(f,1,1)'不能正常工作(如果你寫'f(x,y):return(x,y)'.. 。 –