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 鈥淗ola鈥.

Ahora supongamos que dentro de funci贸n 1, declaramos funci贸n 2, donde queramos agregar 鈥榤undo鈥 a nuestro mensaje, para que al final tengamos, 鈥楬ola 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 鈥淗ola 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? 鈥渁ma 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 鈥渧ive鈥 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 鈥渘iveles鈥 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 鈥榮cope鈥 o 鈥榓lcance鈥 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 鈥減ara 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:

鈥淣o 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 鈥楶ruebas 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鈥檚, 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.
鈥淧ractices 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 鈥渙tro_arg * 2鈥 por 鈥渙tro_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 鈥渇unc2鈥 @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/