Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Scope o Alcance

16/31
Recursos

Aportes 285

Preguntas 36

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Hice esta imagen a partir de esta clase, y la página https://www.w3schools.com/PYTHON/python_scope.asp Espero le sirva a alguien

![](

hola una forma de visualizar esto que explica el profesor es con herramienta como http://www.pythontutor.com/ aca no solo puedes ver como se ejecuta el codigo en python sino que tiene otros lenguajes de programacion.

Les comparto un vídeo que puede ser útil para comprender mejor los Scope
https://www.youtube.com/watch?v=-c0h05cluQA

El scope o alcance básicamente define las variables, funciones demás a los que una parte del código tiene acceso. El scope va cambiando conforme la ejecución avanza en el programa, por ejemplo, al invocarse una función, el scope actual queda guardado en memoria y se crear un nuevo scope para la función.

Se puede visualizar como esas muñecas rusas que se pueden meter una dentro de otra, de la misma forma hay scopes dentro de un scope dentro de otro scope y así sucesivamente.

Tengo un año intentanto programar, he hecho cosas siguiendo tutoriales y copiando y pegando líneas de código. Sin embargo, recién comienzo a entender un poco mejor, y cada día un poco más, la estructura lógica y la consecución de acciones que se siguen para saber lo que genera el código. Ha sido dificil, pero es muy satisfactorio cada día entender más.

Scope, creo qué es bastante parecido a derivar, una función dentro de otra, etc…

Y un pequeño aporte de su notación

Buen día a todos, como vi en los comentarios que han quedado algunas dudas respecto al scope, quise hacer mi aporte.

El Scope se puede ver como los permisos que se tiene para acceder a una variable.

Supongamos que tenemos esta función sencilla:

Como resultado tenemos un mensaje “Hola”.

Ahora supongamos que dentro de función 1, declaramos función 2, donde queramos agregar ‘mundo’ a nuestro mensaje, para que al final tengamos, ‘Hola mundo’:

Eso funcionaria?.. Pues no, aquí es donde entra en juego el scope de las variables y funciones.

El editor mismo marca un error antes de ejecutar (gracias a pylint), que nos dice que la variable mensaje es indefinida. Y si, intentamos igualmente ejecutar nuestro programa, la terminal nos muestra un mensaje como este:

Con un error haciendo referencia que queremos hacer referencia a la variable antes de haberla asignado.

Es aquí donde entonces tú dirás, entonces paso el mensaje como parámetro a la función 2 y listo!.. Y en la práctica si lo lograrías pero no como tu creerías que lo estás logrando, que es trabajando siempre sobre 1 misma variable que es mensaje, por la terminal tendría que salir solo nuestro “Hola mundo”, pero…:

¿Cuál sería nuestro output en la terminal de este código?

Y es aquí donde a todos nos explota la cabeza, ¿qué paso? ¿por qué ese resultado? “ama aiudaaa”… nos tranquilizamos, respiramos, respiramos, tomamos agüita y una vez calmados, entendemos que paso… y si, es eso que estás pensando… ¡EL SCOPE!.

Resulta que cuando definimos función 2 dentro de función 1, es como que hayamos creado un nuevo espacio donde no se hubiera declarado y asignado nunca de las variables que teníamos en función 1… es decir dentro de nuestro programa viven 2 variables mensaje, pero independientes cada una de ellas.

Por eso nuestro resultado en la terminal, mostrando 2 mensajes distintos, el contenido de mensaje que indicamos en función 1 sigue intacto, porque dentro de función 2, mensaje fue asignado en una nueva referencia a memoria, donde copio lo que tenía mensaje en función 1 y adicionalmente agrego nuevo contenido.

Este tema lo explica muy bien Oscar Barajas en el Curso de Closures y Scope en JavaScript.

Saludos y espero haberles podido ayudar.

Para entender mejor esta parte, les recomiendo que se vean la película inception (2010). ¡Es una forma divertida de entender los contextos!

Como yo comprendo el scope es un tema de jurisdicción. Es como las fronteras nacionales. En un hipotético caso dos personas tienen el mismo nombre y número de identificación, pero en nacionalidades distintas. Si uno de ellos viaja al país del otro no puede usar su ID pues no es válida donde va. Se usa entonces un pasaporte que le otorga una identificación diferente.
Asi mismo una variable o funcion “vive” dentro de el scope (nacionalidad) en la que se declara. Sin embargo es posible pasar su valor o funcionalidad a otro scope por parámetros lo que significa darle una nueva identidad limitada al ámbito de la función que la recibe.

Atentos al minuto 7:06.
Ahí se equivoca, lastimosamente. Dice: "Retornamos al contexto de FUNC2"
Cuando en realidad se esta regresando al contexto de FUNC1
Esto puede crear todo un lío en tu cabeza. Así que cuidado

Esto me recordó la película Inception… mindblowing

Para entender los diferentes scopes de las variables dentro y fuera de funciones es por ejemplo, imaginar que una función es un taller privado de coches, una carpinteria,etc, y las variables son las herramientas que tienes disponibles en ese taller, si una herramienta no está en tu taller puedes ir a buscarla a la calle( variables globales), pero si tienes esa herramienta en tu taller puedes usarla sin problemas dentro de tu taller( variables locales), pero si la herramienta solo se encuentra en otro taller, tu no puedes usarla. Para entender esto mejor dejo el siguiente enlace:

Hola, armé esta imagen para poder visualizar mejor como estaban fluyendo las variables entre los diferentes scopes. Espero les sirva si tienen dudas.

El Scope lo entiendo como “niveles” o una estructura para leer el codigo

TU TE COMPORTAS COMO UNA FUNCION TODO EL TIEMPO!

Imagina que estas sentado en tu laptop jugando y derrepente tu mamá te llama, ella quiere que vayas a comprar fruta, para eso tienes que ir por tu bicicleta y después comprar la fruta. Una vez comprada la fruta guardas tu bicicleta, le entregas la fruta a tu mamá y ahora si puedes seguir jugando.
¿Algo te suena?
A eso se le llama flujo de ejecución y toda pieza de software tiene uno.
La función 1 que llama a la función 2 tendrá que esperar a que la función 2 termine para poder seguir.
En el ejemplo anterior para que la función jugar() pueda terminar primero tiene que resolver ir_con_mama(), a su vez ir_con_mama() llama a la función comprar_fruta().
Una vez que comprar_fruta() acaba, continuamos con ir_con_mama() y una vez acabemos ahí podemos seguir con jugar().

def comprar_fruta():
	compras_hechas = True

def ir_con_mama():
	mandado = False
	comprar_fruta()
	mandado = True

def jugar():
	gta_v = False
	ir_con_mama()
	gta_v = True

jugar()

SPOILER ALERT 👀: Si bien se pueden usar, las buenas practicas de desarrollo prohiben el uso de variables globales, debido a que, en proyectos muy grandes, se podría perder el control de la misma generando bugs difíciles de encontrar.

Yo lo entiendo como si fuera una Matryoshka.
Esa fue la forma como me la enseñaron en la Universidad.

Tambien les recomiendo mucho este video: https://www.youtube.com/watch?v=-c0h05cluQA

También es bueno aclarar que la identación es muy importante al momento de ordenar funciones ya que si func1 y func2 estuvieran a la misma altura, Python lo leería diferente 😄

Yo lo entiendo como una especie de ovillo de lana. Es decir, tenemos que encontrar la punta del ovillo (la variable o función que da origen al código) para poder entender el código completo después. Para poder encontrarlo tenemos que entender cuando el ‘scope’ o ‘alcance’ de una variable es global o local.
Global: es cuando la variable se declara fuera de las funciones y puede ser usada tanto dentro como fuera de las funciones.
Local: es cuando la variable se declara dentro de una función específica y puede ser usada SOLAMENTE dentro de la función en donde fue declarada.

Eso es lo que entendí yo espero estar en lo correcto.

Allí podemos ver en el código como seria el escope señalado por colores como explica David en el vídeo

Yo lo veo mas que nada como una división de procesos donde el proceso global es el proceso principal, entonces a la hora de leer el código vas dividiendo este proceso principal en pequeños procesos

Es importante que muestren en el vídeo lo que está realizando David en el tablero.

Este post explica con algunos ejemplos:

https://platzi.com/blog/como-funciona-el-scope-en-javascript/#:~:text=El scope puede definirse como,global y el scope local.

aunque es en JavaScript es el mismo concepto

Hola
.
He pasado 5 horas en 2 dias entendiendo esta clase, es normal. He tomado la libreta para apuntes haciendo distincion con colores y ayuda
.
Paso a paso, paciencia y exito

Para empezar se puede trabajar con los mismos nombres de variables o funciones, para entender el contexto, y poder hacer la analogía “para empezar”.

Hay que prestar mucha atención para entender esta clase, y es que esto es tan importante para Python, como saber sumar.

[email protected] les comparto un recurso que uso mucho para analizar el Scope de mis programas y bases de datos. Se trata de un programa Open Source llamado DIA que permite crear diagramas fácilmente de forma rápida.

Por ejemplo, he creado un diagrama con el Scope de mi código del reto de la Raíz cuadrada:

Puedes descargarlo en su pagina oficial
Aquí

![](

Es como un juego de pelota donde le vas pasando la pelota al otro para poder anotar y cada jugador funciona de una manera distinta y necesita otras cosas para jugar. Al final el contexto global es todo el partido. 😉

Los aportes en los anteriores comentarios de los estudiantes Daniel Guarín García
https://www.youtube.com/watch?v=-c0h05cluQA
y de Orlando Ramírez http://www.pythontutor.com/, son excelentes para entender este tema de scopes

El Scope lo entiendo como los limites de donde se ejecuta una función, básicamente lo dividí en dos, como Scope Global y Scope Local. El Scope local depende de cada función que programemos y el Scope Global como el archivo en si.

Ejemplo visual, a veces sirve más:

“No todas las variables son accesibles desde todas las partes de nuestro programa, y no todas las variables existen por la misma cantidad de tiempo. Donde una variable es accesible y cuánto tiempo existe depende de cómo se define. Llamamos a la parte de un programa donde una variable es accesible su alcance, y la duración durante la cual la variable existe durante su vida útil”.

Me parece que en este video no se le entendio tan bien al profesor. Ademas que el ejemplo que puso no ayudo mucho(tratando de poner todos los casos en un solo ejemplo confundio mas en vez de ayudar). Creo que con unos ejemplos de codigo hubiera estado mucho mejor.

Es sencillo de comprender, pero lastima esta clase no este bien

Seria bueno que para los que empiezan hagan ejercicios de ‘Pruebas de escritorio’, esto ayuda a agilizar para leer código y saber como se comporta (Claro que solo es recomendable con ejercicios sencillos ya que en ejercicios complejos seria un infierno jajaja) pero es para aprender.

Interesante este termino, seria chevere conocer una herramienta que ayude a organizar mentalmente un programa mas complejo con mas procesos, pero pensándolo bien pienso que se podría dibujar un diagrama de flujo o un mapa mental.

Este articulo me ayudo a entender mas el concepto. Se los hago saber: https://blog.carreralinux.com.ar/2017/06/alcance-de-las-variables-en-python/

No se ve nada de las áreas coloreadas o dibujadas.

no se ven los colores :c

Aquí pueden encontrar un poco más de información:
https://codingornot.com/ambito-o-scope-en-programacion

Resultado 7

Entiendo el Scope como los componentes de un mecanismo en donde cada uno entra y sale del proceso según lo definido.

Excelente clase! En la web http://www.pythontutor.com/ se puede visualizar de otra manera lo explicado por el profesor.

Es importante conocer que además del contexto global, tenemos un contexto de bloque (que es lo que definimos con las tabulaciones y los :)
.
Por lo tanto, una variable está accesible en el contexto en el que se declare y en todos los contextos de bloque de sus hijos (ya sean funciones, whiles, for’s, etc)

para mi con todo respeto, la forma mas facil de entender esto es la siguiente. Si alguien dice pablo, en mi casa , se refiere a un primo, pero si alguien dice pablo en mi empresa, se refiere a un feje. pero si alguien dice oscar en mi casa, o en mi empresa, se refieren a mi. En este caso, Pablo es una variable/funcion local, y depende de donde estoy. Y Oscar es global y no depende de donde estoy. Saludos

En el siguiente enlace encontrar una explicación muy fácil de entender y con un ejemplo sobre el alcance de variables

https://blog.carreralinux.com.ar/2017/06/alcance-de-las-variables-en-python/#:~:text=En primer lugar%2C podemos decir,y las segundas variables locales.

En síntesis una variable local vive durante todo el procesamiento del programa una variable loca solo vive dentro de la función definida, la variable global la podemos utilizar en cualquier aparte, la loca solo dentro de la función.

El scope lo entiendo como el área visible dentro del que podemos acceder a la definición de una variable. Dentro de un scope podemos tener anidados otros scope y donde se cumple generalmente (?) estas dos cosas:

  1. Un scope interno tiene acceso a las definiciones realizadas en un scope superior.
  2. Un scope superior NO tiene acceso a las definiciones realizadas en un scoper inferior.
  3. El mayor scope que podemos tener es el global, el primer scope que se crea y en el cuál se genera la ejecución de nuestro programa.

Una manera (no se si habrán otras) de crear un scope en python es al declarar una función, es decir, dentro de la función podemos acceder a cualquier variable definida en sus scopes superiores pero estos no pueden acceder a las variables que definamos dentro de la función.

no quedo nada claro

Noto que hace uso de ejemplos en ocasiones muy complejos, para explicar un tema, lo cual dificulta en ocasiones la comprensión.

Si ya están un poco mas familiarizados con python les recomiendo el libro sobre buenas practicas y como funciona python.
“Practices of the python pro” Libro

Con el fin de avanzar en una carrera tan extensa como lo es la programación de computadores, este curso debe ser el inicial y general para todos los lenguajes de programación, en lugar de que en cada lenguaje nos estén ocupando gran parte del curso ensenando algo que ya sabemos, solo con un ejemplo en cada lenguaje ya sabremos como usarlo si algo cambia o la forma de como definir lo.

Notas de la clase
Apuntes

les comparto el zen de python

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

Notas de la clase ⚡
Scope o alcance.

  • Cuando ejecutamos una función, se entra a otro entorno de ejecución, donde solo podemos utilizar las variables dentro de ese entorno, las cuales están determinadas por el alcance de cada variable.
  • También podemos pasar funciones a una función, no solo primitivos.
  • Python se lee de arriba hacia abajo y de izquierda derecha.
  • El scope es el contexto al que pertenece una variable:
    • Global: Corresponden a las variables en el cuerpo principal del programa y se pueden usar en cualquier lado.
    • Local: Declaradas dentro de una función; se puede usar solo dentro de esa función o dentro de funciones interiores a esta.
  • Para declarar variables globales o cambiar el valor de una existente dentro de una función, puedes usar el keyword global.
#Este es un pequeño programa para mejorar el conocimiento de Scope Global y Scope Local.

print('Bienvenido a la lección de scope o alcance. Aquí trabajaras en tu definición de scope mediante ejercicios sencillos.')
print('Empecemos!!!')
print()

print('En primer lugar empezaremos en el Scope global.')
print()
print('El Scope global tiene:')

while True:
    opcion_1 = '1. Una funcion con el nombre saludo'
    opcion_2 = '2. Una segunda funcion con el nombre usuario'
    opcion_3 = '3. Y una llamada a la funcion saludo'

    print(opcion_1);print(opcion_2);print(opcion_3)

    print()
    print('¿Cuál opcion crees que python tomará primero?(Por favor, inserte un numero)')
    opcion = input('Numero: ')
    print()
    print(f'Usted a elegido la opción {opcion}')

    if opcion == '3':
        print('Bien hecho, su respuesta es correcta.')
        print()
        break
    else:
        print('Esta opcion esta incorrecta. Vuela a intentarlo')

print(f'Ahora que la funcion saludo fue llamada, y recordando que tenemos: {opcion_1}, {opcion_2} y {opcion_3}, ¿en cuál Scope estamos?')
print()

while True:
    opcion_1 = '1. Scope global'
    opcion_2 = '2. Scope local de la funcion saludo'
    opcion_3 = '3. Scope local de la funcion usuario'

    print(opcion_1);print(opcion_2);print(opcion_3)

    print()
    opcion = input('Numero: ')
    print()

    if opcion == '2':
        print('Bien hecho, su respuesta es correcta.')
        break
    else:
        print('Esta opcion esta incorrecta. Vuela a intentarlo')

print()

while True:
    print('Ahora, dejeme preguntarle, si desde el Scope local de la función saludo entramos a la función usuario y luego volvemos a la funcion saludo, ¿cuál seria el scope?')
    opcion_1 = '1. Scope global'
    opcion_2 = '2. Scope local de la funcion saludo'
    opcion_3 = '3. Scope local de la funcion usuario'
    
    print(opcion_1);print(opcion_2);print(opcion_3)

    print()
    opcion = input('Numero: ')
    print()

    if opcion == '2':
        print('Enorabuena, Usted a aprendido un poco más sobre Scope Global y Scope local!!!')
        break
    else:
        print('Esta opcion esta incorrecta. Vuela a intentarlo')```

Un scope puede definirse como un lugar desde el que puedes acceder a tu espacio de nombres sin ningún prefijo. El Scope se puede categorizar como: Ámbito de una función donde se tienen nombres locales. Ámbito de un módulo en el que se tienen variables globales.

Probé la variable mensaje en distintos contextos de ejecución, y con esto me quedó claro lo que se refiere esta clase 😃 . Ojalá les sirvan mis ejemplos:

def funcion1():
    return print(mensaje + ' alterno 1')

def funcion2():
    def funcion3():
        return print(mensaje + ' alterno 2')
    funcion3()

def funcion3(mensaje):
    return print(mensaje + ' alterno 3')

def funcion4():
    mensaje = 'Hola Mundo 2'
    def funcion5():
        return print(mensaje)
    funcion5()

def funcion5():
    mensaje = 'Hola'
    print(mensaje + ' Mundo 3')
    def funcion6(mensaje):
        mensaje = mensaje +' Mundo 4'
        return print(mensaje)
    funcion6(mensaje)

def funcion6(mensaje):
    return print(mensaje)


mensaje = 'Hola Mundo 1'

# Ejecutables:
print(mensaje)
# Devuelve Hola Mundo 1. La variable mensaje = 'Hola Mundo 1' (variable global)
funcion1()
# Devuleve Hola Mundo 1 alterno 1 . La variable mensaje = 'Hola Mundo 1' (variable global)
funcion2()
# Devuleve Hola Mundo 1 alterno 2 . La variable mensaje = 'Hola Mundo 1' (variable global)
funcion3(mensaje)
# Devuleve Hola Mundo 1 alterno 3 . La variable mensaje = 'Hola Mundo 1' (variable global)
funcion4()
# Devuleve Hola Mundo 2 . La variable mensaje = 'Hola Mundo 2' (prioridad variable local)
funcion5()
# Devuleve Hola Mundo 3 . La variable mensaje = 'Hola' (prioridad variable local)
# Devuleve Hola Mundo 4 . La variable mensaje = 'Hola' (prioridad variable local)
funcion6('Hola Mundo x')
# Devuleve Hola Mundo x . La variable mensaje = 'Hola Hola Mundo x' (prioridad variable del parametro de la funcion)   ```

Lo veo como una casa donde cada habitación tiene unas herramientas y puertas para entrar a las habitaciones continuas o una habitación al anterior y así sucesivamente.
Global Scope es la casa
Cada función es una habitación y lo que se ejecuta a dentro es para lo que sirve esa habitación, cuando hay una función dentro de otra función se puede ver como una habitación que por ejemplo tiene una habitación para hacer música dentro de ella, pero solo se puede acceder estando dentro de la habitación más grande.

Es una analogía que puede explicar el tema de Scope

En esta clase me perdí. No entiendo.

En este sitio en el capítulo de funciones @AlSweigart explica cómo se ejecutan los Frames o Contextos del programa que se está ejecutando, también a través de pythontutor se puede observar gráficamente su funcionamiento.

Al principio es un poco dificil de entender. Yo lo entendí gracias a JavaScript. De esta manera:
.
El scope es la capacidad de una función y/o variable para acceder a datos externos, es decir, datos que no están (o que sí están) dentro de su bloque de código. Esto permite acceder a una variable que fue declarada dentro de otra función, tal como se muestra en los ejemplos de esta clase.
.
Y también realicé un pequeño ejemplo también JS:

Para yo entender el scope hago uso de la teoría de conjuntos, siendo cada bloque de código un subconjunto del conjunto U.

Este aporte lo vi en la sección de comentarios, por si es que no lo encuentran les paso esta página http://www.pythontutor.com/visualize.html#mode=display la cual de ayuda a ver Frame by Frame cómo se lee un código en python.

No se ven los colores

Si no me equivoco sale 7

no se ven los colores

No puedo ver los colores de los contextos

No se ven los colores.

Les recomiendo el curso de Closures y Scope para profundizar mejor link: https://platzi.com/clases/scope/

Excelente clase, fundamental el entender esta parte

Creo que las funciones hacen que el codigo sea mas ordenado, no es tan facil de aplicar, manejar y comprender pero es muy util.

Me gusta demasiado eate curso, muy bien explicado.

el escope parece un juego de matrushkas

Creo que este concepto es mas fácil de entender con matemáticas, específicamente con funciones compuestas:
Dadas dos funciones f(x) y g(x) se define como la composición de f con g a (f o g)(x) o f(g(x)) donde x es nuestro argumento.

Yo creo que todo esto se puede asimilar como variables globales y locales. Rectifiquen si me equivoco

Yo lo entiendo, como los diferentes ámbitos o dominios que son tocados en cada una de las funciones, que son utilizadas en un programa.

Se entendió perfecto!

Comunidad, buenas noches, alguien por favor me puede explicar con valores como se ejecutaría esta función y cual seria el resultado?

He tratado de entender de diferentes formas pero no ha sido posible 😦

para entender mejor el scope pienso que seria con JavaScript

¿por que si ponemos

print(func1 (un_arg, cualquier_func))

no nos muestra el valor de un_arg pero si el valor de cualquier_func ?

Una acotación; la variable un_arg puede ser alcanzada por cualquier función.

De igual manera, cualquier variable declarada dentro de func1, puede ser alcanzada por func2.

Un ejemplo con la variable a, declarada dentro de func1:

def func1(un_arg,una_func):
	a="Prueba Scope"
	def func2(otro_arg):
		print(a)
		return otro_arg*2

	valor = func2(un_arg)
	return una_func(valor)

un_arg = 1

def cualquier_func(cualquier_arg):
	return cualquier_arg + 5


resultado = func1(un_arg,cualquier_func)
print(resultado)

Para comprender un poco mejor, les recomiendo cambiar el “otro_arg * 2” por “otro_arg + 2” y coloquen la sentencia print en func1 del contexto global. Asi podran seguir el procedimiento que explica el profesor y ver un resultado.

genial se entiende perfectamente haciendo el scope

y creo que el truco esta en que hay que reconocer donde enpiesa un codigo y donde termina, dentro de func1an definido func2 y eso lo complica.
pero si lo resuelves lo de adentro de la primera parte y consideras el un_arg=1 entonces la respuesta de la primera parte seria una_funcion (2) donde el valor seria dos.
ahora si concideramos la segunda duncion y incluimos la primera parte y la segunda definicion en el ultimo items
esto nos daria primero.
cualquier_func (valor=2)
y finalizaria con 2 + 5 = 7
esto se puede ver sin realizar programacion. saludos

@RichardLazaro: me perdí en el minuto 7:06 dice que lo ultimo que aremos dentro de la función " func2 " es ejecutar " una_func(valor) " pero "una_func(valor) " esta fuera de la función “func2” @JahzielCabrera: Se equivocó, realmente se referí a func1

En mis primeros acercamientos a la programación (con arduino) me costaba mucho esto del scope. Me costó mucho pero le entendí cuando agarré una libreta y paso a paso fui dandole seguimiento a las variables, linea por linea de programa fui siguiendo el comportamiento de un código hasta que entendí la manera en que los valores iban cambiando. Claro existen muchos métodos para entender un tema tan abstracto pero ese fue el que me funcionó a mi. Mucho éxito!

Para complementar pueden ver esta lectura del Curso Práctico de Python CRUD: https://platzi.com/clases/1378-python-practico/14336-scopes-and-namespaces/

😄

Este nuevo concepto me recuerdo a la composiciones de funciones reales salvo que en este caso le añadimos el concepto de alcance local y global de las variables. Es de aquellos conceptos que merecen un constante estudio , saludos a todos.

Esto es programación funcional.

Aclaraciones:
Contexto de ejecucion:
Contexto Global (variables globales)
Variables definidas directamente en el programa (fuera de cualquier funcion o clase), existen dentro de todo el programa
Contexto Global:
Variables definidas en una funcion o clase, solo existen dentro de este contexto (funcion o clase)

Ejemplo:

valor1=5
valor2=2

def operaciones(valor2,valor3):
    suma = valor1 + valor2
    resta = valor2 - valor3
    return (suma,resta)

multiplicacion = valor1 * valor2


datos=operaciones(4,8)
print(f'suma y resta {datos} multiplicacion {multiplicacion}')

Resultado:
suma y resta (9, -4) multiplicacion 10

Conclusiones:
-valor1, valor2: variables globales: existen en todo el codigo
-valor2, valor3: variables locales solo exixten dentro de la funcion operaciones
-La variable valor1 es valida tanto fuera como dentro de la funcion
-Dentro del contexto funcion, python prioriza las variables locales si tienen el mismo nombre (valor2=4 y no 2) pero no la sobreescribe
-Fuera de la funcion valor2 continua con el valor de 2 a pesar de que anteriormente trabajo con el valor 4 dentro de la funcion.
-Las variables suma y resta solo existen dentro de la funcion (no se pueden llamar fuera de esta)

¿Y en que punto entra self?

Alcance:
-Al ejecutar una funcion python entra a un nuevo contexto de ejecucion
-Cada contexto de ejecucion tiene sus propias variables; no puedes acceder a las variables fuera de su contexto de ejecucion

Lo entiendo más fácil al ver la ubicación del texto, que tan a la izquierda están, creo que Python es muy riguroso en eso y ayuda.

Encontré este recurso https://www.geeksforgeeks.org/scope-resolution-in-python-legb-rule/ que es una regla donde te explica los diferentes alcances que se tienen dentro de Python.

excelente tutor!!

Variables can only reach the area in which they are defined, which is called scope. Think of it as the area of code where variables can be used. Python supports global variables (usable in the entire program) and local variables
https://pythonspot.com/scope/