2017-03-11 221 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)'.. 。 –