我想知道在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)
我的意思是我想创建和存储这个新功能供以后使用,也许我想推导它,或者整合或绘图或者我想做什么,我不想发送点(s )x用于在fourier_series(或func1(..))中进行评估,我只是说fourier_series创建一个带有变量x的新函数,这个函数可以在y = F(3)之后调用...如果我做的话我自己清楚了吗?
答案 0 :(得分:12)
您应该可以通过定义内联新函数来实现此目的:
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
答案 1 :(得分:3)
虽然我不能给你一个特定于你打算做什么的答案。 (看起来像我的联盟中的数学。)
我可以告诉你Python支持first-class functions。
Python可以从函数返回函数,将函数存储在集合(如列表)中,并且通常将它们视为任何变量。
很酷的事情,比如在其他函数中定义函数和返回函数都是可能的。
>>> def func():
... def func2(x,y):
... return x*y
... return func2
>>> x = func()
>>> x(1,2)
2
函数可以分配给变量并存储在列表中,它们可以用作其他函数的参数,并且可以像任何其他对象一样灵活。
答案 2 :(得分:1)
您可以在函数内定义函数并返回它们(我认为这些是技术上的闭包):
def make_f(a, b):
def x(a, b):
return a+b
return x(a, b)
答案 3 :(得分: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)
>>>
答案 4 :(得分:1)
我正在浏览一些文档,发现了这一点。
这是类似于您的代码的代码段:
tableView
现在,constant()函数同时接受a和b并返回一个名为“ Anonymous Function”的函数,该函数本身接受f,并使用a和b调用f。
这称为“ closures”。闭包基本上是一个函数的实例。
答案 5 :(得分: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
答案 6 :(得分: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的角度来看,重要的是:
return F
(返回函数对象)返回它,而不是调用函数并返回值的return F(x)