Las funciones vistas anteriormente están todas definidas en el alcance global, son todas funciones globales. Python también admite funciones fijas en el cuerpo de la función, que se definen como funciones locales.
De manera predeterminada, las funciones locales están ocultas del mundo exterior. Las funciones locales solo son válidas dentro de sus funciones de cierre. Las funciones de cierre también pueden devolver funciones locales para que el programa use funciones locales en otros ámbitos.
>>> def ca (tipo, nn): def cuadrado (n): devuelve n * n def cube (n): devuelve n * n * n def fac (n): resultado = 1 para i en el rango (2, n 1 ): resultado * = i regrese resultado si el tipo == ' plaza ' : retorno cuadrado (nn) elif tipo == ' cubo ' : el retornocubo (nn) más : devuelve fac (nn) >>> ca ( ' cuadrado ' , 3 ) 9 >>> ca ( ' cubo ' , 3 ) 27
>>> ca ('', 3)
6
>>> ca ('', 4)
24
>>> ca ('3', 3)
6
>>> def foo (): name = ' bob ' def bar (): print (name) name = ' jeff ' bar () >>> foo () Traceback (última llamada): Archivo " <pyshell # 174 > " , línea 1, en <module> foo () Archivo " <pyshell # 173> " , línea 6, en foo bar () Archivo " <pyshell # 173> " , línea 4,en el bar print (nombre) UnboundLocalError: variable local ' nombre ' referenciado antes de la asignación
Python proporciona la palabra clave no local, a través de la declaración no local, puede declarar que la declaración de asignación de acceso solo accede a las variables locales de la función donde se encuentra la función.
>>> def foo (): nombre = ' bob ' def bar (): nombre no local print (name) name = ' jeff ' bar () >>> foo () bob
Las funciones no locales y globales son más o menos similares, la diferencia es que global se usa para declarar variables globales, y no local se usa para declarar variables locales de la función donde la función actual