繁体   English   中英

Python:在函数内部定义函数

[英]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

iinteger_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"

这取决于您打算如何处理。

  1. 您可以在函数内部调用它。

    如果内部函数需要访问外部函数的局部变量,则可能是这种情况。

  2. 您可以返回它以便从外部调用。

    这是很常见的,例如在装饰器的情况下。

如果要创建函数工厂,只需返回创建的函数!

def factory():
    def new_func():
        print 'Hello!'
  return new_func

f = factory()
f()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM