Lo que entiendo al leer la documentación es que Python tiene un espacio de nombres separado para las funciones, y si quiero usar una variable global en esa función, necesito usarla global.
Estoy usando Python 2.7 y probé esta pequeña prueba
>>> sub = ['0', '0', '0', '0']
>>> def getJoin():
... return '.'.join(sub)
...
>>> getJoin()
'0.0.0.0'
Parece que las cosas funcionan bien incluso sin ellas global. Pude acceder a la variable global sin ningún problema.
¿Me estoy perdiendo algo? Además, lo siguiente es de la documentación de Python:
Los nombres enumerados en una declaración global no deben definirse como parámetros formales o en un objetivo de control de bucle, definición de clase, definición de función o declaración de importación.
Si bien los parámetros formales y la definición de clase tienen sentido para mí, no puedo entender la restricción para el objetivo de control de bucle y la definición de función.

def foo(): ...yfoo = ...al mismo tiempo). Crea un nuevo alcance para cada llamada a la función. (Pero, ¿cómo se diferencia de casi cualquier otro idioma de forma remota de alto nivel en el mundo?)Respuestas:
La palabra clave
globalsolo es útil para cambiar o crear variables globales en un contexto local, aunque la creación de variables globales rara vez se considera una buena solución.Lo anterior te dará:
Mientras que si usa la
globalinstrucción, la variable estará disponible "fuera" del alcance de la función, convirtiéndose efectivamente en una variable global.Entonces el código anterior te dará:
Además, debido a la naturaleza de python, también puede usar
globalpara declarar funciones, clases u otros objetos en un contexto local. Aunque recomendaría no hacerlo, ya que causa pesadillas si algo sale mal o necesita depuración.fuente
globalsdefinido automáticamente en todos los espacios de nombres (afortunadamente). Como señaló correctamente, un global está vinculado a un espacio de nombres dentro de un módulo, sin embargo, puede importarse a otro módulo comofrom module import variableoimport module.variable. En el primer caso, la importación haría accesible la variablevariablesin requerir referencia comomodule.. Si se considera global en el alcance del módulo, dependerá de dónde se importe. Véase tambiénnonlocalcomo una nueva palabra clave relacionada con el alcance en python 3.Si bien puede acceder a las variables globales sin la
globalpalabra clave, si desea modificarlas, debe usar laglobalpalabra clave. Por ejemplo:En su caso, solo está accediendo a la lista
sub.fuente
foo = 3sin trabajos globales, pero foo se define nuevamente localmente en elblubalcance de la función y no modifica la variable foo original. Esto fue bastante confuso para mí.Esta es la diferencia entre acceder al nombre y vincularlo dentro de un ámbito.
Si solo está buscando una variable para leer su valor, tiene acceso a un alcance global y local.
Sin embargo, si asigna a una variable cuyo nombre no está en el ámbito local, está vinculando ese nombre a este ámbito (y si ese nombre también existe como global, lo ocultará).
Si desea poder asignar el nombre global, debe decirle al analizador que use el nombre global en lugar de vincular un nuevo nombre local, que es lo que hace la palabra clave 'global'.
La vinculación en cualquier lugar dentro de un bloque hace que el nombre en todas partes de ese bloque se vincule, lo que puede causar algunas consecuencias de aspecto bastante extraño (por ejemplo, UnboundLocalError aparece repentinamente en el código que funcionaba anteriormente).
fuente
Las otras respuestas responden a su pregunta. Otra cosa importante que debe saber sobre los nombres en Python es que son locales o globales según el alcance.
Considere esto, por ejemplo:
Probablemente pueda adivinar que la
value = 0instrucción se asignará a una variable local y no afectará el valor de la misma variable declarada fuera de ladoit()función. Puede que se sorprenda más al descubrir que el código anterior no se ejecutará. La declaraciónprint valuedentro de la función produce unUnboundLocalError.La razón es que Python ha notado que, en otra parte de la función, se le asigna el nombre
value, y tampocovaluese declara en ninguna parteglobal. Eso lo convierte en una variable local. Pero cuando intenta imprimirlo, el nombre local aún no se ha definido. Python en este caso no recurre a buscar el nombre como una variable global, como lo hacen algunos otros idiomas. Esencialmente, no puede acceder a una variable global si ha definido una variable local con el mismo nombre en cualquier lugar de la función.fuente
global(ononlocalen Python 3.x) anula este comportamiento y le permite reasignar el nombre externo.letson no izada.globalo no importa?Acceder a un nombre y asignar un nombre son diferentes. En su caso, solo está accediendo a un nombre.
Si asigna a una variable dentro de una función, se asume que esa variable es local a menos que la declare global. En ausencia de eso, se supone que es global.
fuente
globalEjemplo:
fuente
Se supone que cualquier variable declarada fuera de una función es global, es solo cuando se declaran desde dentro de las funciones (excepto los constructores) que debe especificar que la variable sea global.
fuente
Esto se explica bien en las preguntas frecuentes de Python
https://docs.python.org/3/faq/programming.html#what-are-the-rules-for-local-and-global-variables-in-python
fuente
Significa que no debe hacer lo siguiente:
fuente
Global hace que la variable "Global"
Esto hace que 'x' actúe como una variable normal fuera de la función. Si eliminó el global, entonces daría un error ya que no puede imprimir una variable dentro de una función.
fuente