我想知道在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)
你可以使用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)
虽然我无法具体回答您计划做什么。(看起来数学超出了我的能力范围。)
我可以告诉你,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)
函数可以分配给变量并存储在列表中,它们可以用作其他函数的参数,并且与任何其他对象一样灵活。