[英]Python: defining a function inside of a function
我正在尝试编写一个可以定义函数的函数。
我尝试了这个:
def function_writer():
print "I am a function writer"
def new_function():
print "I am a new function"
pass
pass
function_writer()
new_function()
但是,我的调试器抱怨没有定义new_function,因此这显然不是实现它的方法。
有谁知道如何做到这一点?
谢谢。
您的代码失败的原因与以下代码抱怨未定义i
原因完全相同 :
def integer_writer():
i = 0
integer_writer()
i
i
是integer_writer
函数中的局部变量,而new_function
是function_writer function_writer
的局部变量。
您可以执行以下操作:
def function_writer():
print "I am a function writer"
def new_function():
print "I am a new function"
return new_function
new_function = function_writer()
new_function()
在这种情况下,似乎没有太多意义(就像定义通常返回0
的函数通常不会有太多意义一样),但是如果function_writer
要采用一些参数,以及这些参数是否在函数中使用它返回,那么您就可以做生意。
def function_writer():
print "I am a function writer"
def new_function():
print "I am a new function"
return new_function
fn_dynamic = function_writer()
fn_dynamic() #call new_function
也许您在寻找什么? (这几乎是装饰器的工作……除了它们修改传入的方法外)
另一个解决方案(这不是一个好的建议,但可以回答问题)
def function_writer():
print "I am a function writer"
def new_function():
print "I am a new function"
globals()['new_function'] = new_function
function_writer()
new_function()
在python中通常避免这种类型的功能,除非您有一个非常令人震惊的原因,这绝对是您所需要的...
当然,这将导致错误,因为new_function
仅限于function_writer
范围。
def function_writer():
print "I am a function writer"
def new_function():
print "I am a new function"
pass
return new_function
a = function_writer()
#output: "I am a function writer"
a()
#output: "I am a new function"
这取决于您打算如何处理。
您可以在函数内部调用它。
如果内部函数需要访问外部函数的局部变量,则可能是这种情况。
您可以返回它以便从外部调用。
这是很常见的,例如在装饰器的情况下。
如果要创建函数工厂,只需返回创建的函数!
def factory():
def new_func():
print 'Hello!'
return new_func
f = factory()
f()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.