在python函数中创建一个新函数作为return?
我想知道在python中是否可以执行以下操作:在python函数中创建一个新函数作为return?,python,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) 我的意思是,我想创建并存储这个
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)
我的意思是,我想创建并存储这个新函数,以备日后使用,也许我想对它求导,或积分或绘图,或者我想做的任何事情,我不想将点x发送到fourier_级数(或func1(..)中进行求值,我只想说fourier_级数创建了一个新函数,它取一个变量x,这个函数以后可以在外部调用,比如y=F(3)。。。如果我说得够清楚的话?如果在外部函数中定义函数,可以在内部函数的定义中使用传递给外部函数的参数,并将该内部函数作为外部函数的结果返回
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
您可以在函数中定义函数并返回这些函数(我认为这些函数在技术上是闭包):
您可以使用
lambda
(尽管我更喜欢其他解决方案,但我认为:):
def func2(c,d):
... 返回c,d
...
>>>def func1(a,b):
... c=a+1
... d=b+2
... 返回lambda:func2(c,d)
...
>>>结果=func1(1,2)
>>>打印结果
>>>打印结果()
(2, 4)
>>>
您应该能够通过定义一个新的内联函数来实现这一点:
fourier_series(f, N):
def F(x):
...
return F
您不限于传递给fourier\u级数的参数:
def f(a):
def F(b):
return b + 5
return F
>>> fun = f(10)
>>> fun(3)
8
我想你想做的是:
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的角度来看,重要的是:
是的,您可以在函数中编写函数
是的,您可以从函数返回函数。只需确保使用returnf
(返回函数对象)返回它,而不是使用调用函数并返回值的returnf(x)
虽然我不能给你一个具体的答案,你打算做什么。(看起来我的数学不行。)
我可以告诉你Python确实支持
Python可以从函数中返回函数,将函数存储在集合(如列表)中,并通常将其视为任何变量
很酷的事情,比如在其他函数中定义函数和返回函数都是可能的
>>> def func():
... def func2(x,y):
... return x*y
... return func2
>>> x = func()
>>> x(1,2)
2
函数可以分配给变量并存储在列表中,它们可以用作其他函数的参数,并且与任何其他对象一样灵活。我在浏览一些文档时发现了这一点
这是一个与您的代码类似的代码片段:
def constant(a,b):
def pair(f):
return(f(a,b))
return pair
a = constant(1,2) #If You Print variable-> a then it will display "<function constant.
#<locals>.pair at 0x02EC94B0>"
pair(lambda a, b: a) #This will return variable a.
def常数(a,b):
def对(f):
报税表(f(a,b))
返回对
a=常数(1,2)#如果打印变量->a,则它将显示“”
pair(lambda,b:a)#这将返回变量a。
现在,constant()函数接受a和b,并返回一个名为“匿名函数”的函数,该函数本身接受f,并用a和b调用f
这被称为“”。闭包基本上是一个函数的实例。我想这就是我需要的;)会看到它是否工作,并检查答案如果它对我的问题,我可能仍然需要一些帮助,谢谢大家,这是快速的:请考虑明确定义<代码> lambda < /代码>可能是唯一的方法,如果你不立即返回(例如,if..else
,其中返回f
作为true和g
else)。这还允许使用mypy
进行类型检查,例如,使用可调用的。
>>> def func():
... def func2(x,y):
... return x*y
... return func2
>>> x = func()
>>> x(1,2)
2
def constant(a,b):
def pair(f):
return(f(a,b))
return pair
a = constant(1,2) #If You Print variable-> a then it will display "<function constant.
#<locals>.pair at 0x02EC94B0>"
pair(lambda a, b: a) #This will return variable a.