Python ¿por qué no cambia la variable después de la función?

Estoy haciendo una tarea para mi clase CompSci y surgió esta pregunta:

x = 6 def fun(x): y = x**2 x = y return(x) fun(x) 

Cuando se ejecuta esto, el valor que se imprime es 36, pero cuando se ejecuta una impresión (x), x sigue siendo 6.

Me gustaría saber por qué sucede esto; ¿Por qué x no cambia?

¡Gracias!

Esto se debe a que ‘x global’ es diferente de ‘x diversión’, ‘x diversión’ se superpone / enmascara a la ‘x global’, hace lo que sea que haga con ella y luego deja de existir. La máscara no está allí, por lo que la ‘x global’ vuelve a ser la ‘x’ actual.

Como se indica, puede superar esto utilizando ‘x global’ dentro de la función, observe la diferencia entre fun1 y fun2

 x = 10 print "'x' is ", x def fun1(x): print "'x' is local to fun1 and is", x x = x**2 print "'x' is local to fun1 and is now", x def fun2(): global x print "'x' is global and is", x x = x ** 2 print "'x' is global and is now", x print "'x' is still", x fun1(x) print "'x' is not local to fun anymore and returns to it's original value: ", x fun2() print "'x' is not local to fun2 but since fun2 uses global 'x' value is now:", x 

salida:

 'x' is 10 'x' is still 10 'x' is local to fun1 and is 10 'x' is local to fun1 and is now 100 'x' is not local to fun anymore and returns to it's original value: 10 'x' is global and is 10 'x' is global and is now 100 'x' is not local to fun2 but since fun2 uses global 'x' value is now: 100 
 x = 6 def fun(x): y = x**2 x = y return(x) # Reassign the returned value since the scope changed. x = fun(x) 

O

 x = 6 def fun(): # generally bad practice here global x y = x**2 x = y fun() 

Si desea modificar la variable global en función use la palabra clave global:

 global x 

de lo contrario se creará una variable local durante la asignación.