如何调用函数内的函数?我可以访问这些功能,还是像#34;辅助方法一样工作"?

时间:2013-05-03 11:55:41

标签: python python-3.x function-declaration

我正在通过Python教程学习Python,而我目前正在上课(第9章),但在解释“范围和名称空间”时我得到了一个问题。

作者举了这个例子:

def scope_test():
    def do_local():
        spam = "local spam"
    def do_nonlocal():
        nonlocal spam
        spam = "nonlocal spam"
    def do_global():
        global spam
        spam = "global spam"

    spam = "test spam"
    do_local()
    print("After local assignment:", spam)
    do_nonlocal()
    print("After nonlocal assignment:", spam)
    do_global()
    print("After global assignment:", spam)

scope_test()
print("In global scope:", spam)

来源:http://docs.python.org/3.3/tutorial/classes.html#scopes-and-namespaces-example

据我所知,直到现在,关键字def用于定义函数和函数放在类中,但在这种情况下他定义了一个函数内部的函数,那么这个函数在另一个函数内部是什么叫?

有没有办法可以从第一个函数的外部访问它?例如,从包含scope_test的命名空间开始。

这些函数内部的函数是否像“Java和C#”等其他编程语言中的“辅助方法”一样工作?它们是私有方法吗?

1 个答案:

答案 0 :(得分:2)

可以在任何地方定义功能。它们不需要在类中定义,也可以在其他函数中定义;在这种情况下,通常称为嵌套函数

您无法从scope_test()函数外部访问嵌套函数;它们是局部变量。该限制适用于函数中的所有局部变量。例如,spam中定义的scope_test名称​​也无法在函数外部访问。它们仅在函数局部范围内存在。

该函数可以通过返回函数使它们可用。 Python函数是第一类对象,因此您可以像其他值一样传递它们,您可以为它们指定其他名称,或者您可以只返回它们。

如果你愿意,你可以称他们为辅助功能;在Python中,如果要使用嵌套作用域,则通常嵌套函数,引用父作用域中定义的变量。装饰器通常使用它(定义包装函数的配置),事件处理程序也是如此。