在python函数中创建一个新函数作为返回?

ary*_*naq 12 python

我想知道在python中是否可以执行以下操作:

def func1(a,b):
   return func2(c,d)
Run Code Online (Sandbox Code Playgroud)

我的意思是假设我用a,b做某事导致一些系数可以定义一个新函数,我想创建这个函数如果a,b的操作确实可行并且能够在func1之外访问它.

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

def fourier_series(f,N):
   ...... math here......
    return F(x)
Run Code Online (Sandbox Code Playgroud)

我的意思是我想创建和存储这个新功能供以后使用,也许我想推导它,或者集成或绘图或者我想做什么,我不想发送点x为在fourier_series(或func1(..))中的评估,我只是说fourier_series创建一个带有变量x的新函数,这个函数可以在y = F(3)之后调用...如果我让自己足够清楚?

dck*_*ney 16

您应该能够通过内联定义新函数来实现此目的:

fourier_series(f, N):
    def F(x):
        ...
    return F
Run Code Online (Sandbox Code Playgroud)

您不仅限于传递给的参数fourier_series:

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

>>> fun = f(10)
>>> fun(3)
8
Run Code Online (Sandbox Code Playgroud)


Roc*_*key 5

你可以使用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)
>>>
Run Code Online (Sandbox Code Playgroud)


Ijw*_*jwu 5

虽然我无法具体回答您计划做什么。(看起来数学超出了我的能力范围。)

我可以告诉你,Python确实支持一等函数

Python 可以从函数返回函数,将函数存储在集合(例如列表)中,并且通常像对待任何变量一样对待它们。

很酷的事情,例如在其他函数中定义函数和返回函数都是可能的。

>>> def func():
...     def func2(x,y):
...         return x*y
...     return func2
>>> x = func()
>>> x(1,2)
2
Run Code Online (Sandbox Code Playgroud)

函数可以分配给变量并存储在列表中,它们可以用作其他函数的参数,并且与任何其他对象一样灵活。