Scope o Alcance
Clase 16 de 31 • Curso de Introducción al Pensamiento Computacional con Python
Contenido del curso
Clase 16 de 31 • Curso de Introducción al Pensamiento Computacional con Python
Contenido del curso
Daniel Serna
Miguel Angel Gómez Pirazán
Braian Javier Fernandez
Juan Mercado
Cristian Antonio García González
Luis Alonso Hernández Galván
Orlando Ramirez
jonathan franz Torrez soria
Roberto Rodrigo Ruiz
Daniel Miranda
Maria Guadalupe Diaz Escobar
Lorenzo Enrique Piñango Cerezo
Daniel Guarín García
Brian Ricardo Sanchez Lopez
Luis Fernando Pedroza Taborda
Fernando Andres Muñoz Suazo
Daniela Funes
Alejandro Ching
Misael Jesús Rubio Espinosa
Emmanuel Guerra Sánchez
Nicoll Idaly Angulo Mejia
Carlos Mario Henao González
Sebastian Cifuentes
Maria Guadalupe Diaz Escobar
Miguel Figueroa
Cristian Antonio García González
Josue Granados
Héctor Soto Huamaní
Denisse Rivas
Jose Antonio Rojas Ollarves
Jose Balmore Ramirez Medrano
Josue Farley Lopez Carvajal
Edwin Francisco Hernandez
Juan David Cepeda López
Paula Scatarelli
Fabrizio Fasanando Sotelo
Javier Daza
López Ary Dani
Mauricio Gomez
Daniel Miranda
Emilio Francisco Romero Guzman
Julián Andrés Santos Méndez
José Ocando
Jessica Moreno Salinas
Andrés David Solarte Vidal
Josué Esteban Cordero Ruvalcaba
Korpi delfin
Josué Esteban Cordero Ruvalcaba
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
Muchas gracias por tu aporte, me ayudo mucho :)
Excelente aporte! :)
, que nos dice que la variable mensaje es indefinida. Y si, intentamos igualmente ejecutar nuestro programa, la terminal nos muestra un mensaje como este:
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.
Que explicación tan clara, muchas gracias. Para los que estamos empezando estas explicaciones son la gloria porque nos permiten entender lo que no nos queda claro algunas veces. Gracias otra vez 💚
Me gusto mucho la explicación, y logré entender más, pero al final como haría para que la variable 'mensaje' sea la misma en fuc1 y fuc2?
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.
La única manera de romper las reglas es saber las reglas, sigue esforzándote y obtendrás buenos resultados!
Me pasa de igual forma ahora estoy entendiendo la lógica
Scope, creo qué es bastante parecido a derivar, una función dentro de otra, etc...
Y un pequeño aporte de su notación
Se entiende, gracias.
Gracias
Para entender mejor esta parte, les recomiendo que se vean la película inception (2010). ¡Es una forma divertida de entender los contextos!
Jajajaja ni que lo digas, junto con Leonardo DiCaprio en sueños ahora se me hace divertido pensar que el scope es un sueño atrapado dentro de otro sueño y que para llegar al primer sueño se tiene que despertar de los demás sueños.
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()
Excelente explicación. :D
Hola, armé esta imagen para poder visualizar mejor como estaban fluyendo las variables entre los diferentes scopes. Espero les sirva si tienen dudas.
Excelente
Gracias
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
Es verdad, lo identifique en el acto y simplemente ignore lo que dijo para saber que era FUNC1.
ya es complicado para quienes somos newbies, y encima esto gracias por avisar
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:
Te faltó pegar el enlace. Buen ejemplo
Cual enlace??
✖╭╮✖
Esto me recordó la película Inception.... mindblowing
Excelente analogía!
El Scope lo entiendo como "niveles" o una estructura para leer el codigo
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.
Muchas gracias!!!
Yo lo entiendo como si fuera una Matryoshka. Esa fue la forma como me la enseñaron en la Universidad.
De casualidad alguien conoce el nombre de la app con la que el profe dibuja para explicar la clase??
Es Sketchbook de Autodesk :D
Muchas gracias @korppiii !!