2012-10-05 24 views
3

我在想,如果它是在Python可以做到以下几点:在python函数中创建一个新的函数作为返回?

def func1(a,b): 
    return func2(c,d) 

我的意思是,想我做一些与A,B这导致了一些系数,可以定义一个新的功能,我想如果使用a,b的操作确实可行并且能够在func1之外访问此功能,则创建此函数。

一个例子是一个简单的傅里叶级数给定函数f,F(X):

def fourier_series(f,N): 
    ...... math here...... 
    return F(x) 

我的意思是我想创造和存储这个新的功能以备后用,也许我想推导它,或整合或绘图或任何我想做的事情,我不想发送在fourier_series(或func1(..))中评估的点x,我只是说,fourier_series创建一个新函数需要一个变量x,这个函数可以稍后在外部调用,如y = F(3)...如果我让自己足够清楚了吗?

回答

4

您应该能够通过定义一个新的内联函数来做到这一点:

fourier_series(f, N): 
    def F(x): 
     ... 
    return F 

您不限于你传递给fourier_series参数:

def f(a): 
    def F(b): 
     return b + 5 
    return F 

>>> fun = f(10) 
>>> fun(3) 
8 
+0

我认为这是我需要的;)会看看它是否有效,并检查答案是否对我的问题,我可能仍然需要一些帮助,谢谢大家,这是快速的:D – arynaq

0

如果你定义外部函数内部功能,您可以使用传递给外部函数在内部函数中定义的参数和返回内部函数作为外部函数的结果。

def outer_function(*args, **kwargs): 
    def some_function_based_on_args_and_kwargs(new_func_param, new_func_other_param): 
     # do stuff here 
     pass 
    return some_function_based_on_args_and_kwargs 
1

你可以在里面函数定义函数,并返回这些(我觉得这些都是技术上的闭包):

def make_f(a, b): 
    def x(a, b): 
     return a+b 
    return x(a, b) 
1

你可以使用一个lambda(虽然我喜欢的其他解决方案有点多,我觉得:)):

>>> def func2(c, d): 
... return c, d 
... 
>>> def func1(a, b): 
... c = a + 1 
... d = b + 2 
... return lambda: func2(c,d) 
... 
>>> result = func1(1, 2) 
>>> print result 
<function <lambda> at 0x7f3b80a3d848> 
>>> print result() 
(2, 4) 
>>> 
0

我想你想要做的是:

def fourier_series(f,N): 
    #...... math here...... 
    def F(x): 
     #... more math here ... 
     import math #blahblah, pseudo code 
     return math.pi #whatever you want to return from F 
    if f+N == 2: #pseudo, replace with condition where f,N turn out to be useful 
     return F 
    else: 
     return None 

之外,你可以调用这个样:

F = fourier_series(a,b) 
if F: 
    ans = F(x) 
else: 
    print 'Fourier is not possible :(' 

从Python的角度来看,重要的是:

  1. 是的,你可以写一个函数
  2. 是内部的功能,你可以从一个函数返回的功能。只要确保使用return F(返回函数对象)相比,return F(x)它调用函数,并返回值
2

虽然我不能给你具体到你打算做什么的答案返回。 (貌似数学我配不上。)

我可以告诉你,Python做支持first-class functions

Python可能会从函数返回函数,将函数存储在列表等集合中,并且一般会像处理任何变量一样对待它们。

诸如在其他函数中定义函数和返回函数都是可能的。

>>> def func(x, y): 
...  def func2(x,y): 
...   return x*y 
...  return func2(x,y) 
>>> x = func(1,2) 
>>> x() 
2 

功能可以分配给变量和存储在列表,它们可以被用作其他函数的参数并作为任何其他对象作为柔性的。

相关问题