¿Qué hace la nonlocal
declaración de Python (en Python 3.0 y posterior)?
No hay documentación en el sitio web oficial de Python y help("nonlocal")
tampoco funciona.
¿Qué hace la nonlocal
declaración de Python (en Python 3.0 y posterior)?
No hay documentación en el sitio web oficial de Python y help("nonlocal")
tampoco funciona.
"There is no documentation for nonlocal".
En realidad, puedes hacerlohelp(keyword_in_string)
para documentaciones en Python 3 y superiorRespuestas:
Compare esto, sin usar
nonlocal
:Para esto, usando
nonlocal
, dondeinner()
'sx
es ahora tambiénouter()
' sx
:fuente
En resumen, le permite asignar valores a una variable en un ámbito externo (pero no global). Ver PEP 3104 para todos los detalles sangrientos.
fuente
Una búsqueda en Google de "python nonlocal" arrojó la Propuesta, PEP 3104 , que describe completamente la sintaxis y el razonamiento detrás de la declaración. en resumen, funciona exactamente de la misma manera que la
global
declaración, excepto que se usa para referirse a variables que no son globales ni locales para la función.Aquí hay un breve ejemplo de lo que puede hacer con esto. El generador de contadores se puede reescribir para usar esto de modo que se parezca más a los modismos de idiomas con cierres.
Obviamente, podría escribir esto como un generador, como:
Pero si bien esta es una pitón perfectamente idiomática, parece que la primera versión sería un poco más obvia para los principiantes. El uso adecuado de generadores, llamando a la función devuelta, es un punto común de confusión. La primera versión devuelve explícitamente una función.
fuente
nonlocal
declaración en Python; Si desea una secuencia de números naturales, el idioma de Python es en realidaditertools.count()
@ooboo:
Lleva el "más cercano" al punto de referencia en el código fuente. Esto se llama "alcance léxico" y es estándar por más de 40 años.
Los miembros de la clase de Python están realmente en un diccionario llamado
__dict__
y nunca serán alcanzados por el alcance léxico.Si no especifica
nonlocal
pero lo hacex = 7
, creará una nueva variable local "x". Si lo especificanonlocal
, encontrará la "x" más cercana y se la asignará. Si especificanonlocal
y no hay "x", le dará un mensaje de error.La palabra clave
global
siempre me ha parecido extraña ya que felizmente ignorará todas las otras "x", excepto la más externa. Extraño.fuente
Fuente: Referencia del lenguaje Python
fuente
help()
palabras clave (y ahora mi mente está asombrada:help()
sin argumentos se vuelve interactivo ).Cita de la referencia de Python 3 :
Como se dijo en la referencia, en el caso de varias funciones anidadas, solo se modifica la variable en la función de cierre más cercana:
La variable "más cercana" puede estar a varios niveles:
Pero no puede ser una variable global:
fuente
fuente
Mi comprensión personal de la declaración "no local" (y discúlpeme ya que soy nuevo en Python y la Programación en general) es que "no local" es una forma de usar la funcionalidad Global dentro de funciones iteradas en lugar del cuerpo del código en sí . Una declaración global entre funciones, por así decirlo.
fuente
con funciones internas 'no locales' (es decir, funciones internas anidadas) puede obtener permiso de lectura y ' escritura ' para esa variable específica de la función primaria externa . Y no local solo puede usarse dentro de funciones internas, por ejemplo:
fuente