Apuntes funciones y decoradores de Python
FreddyMTApuntes19 de Marzo de 2022
457 Palabras (2 Páginas)87 Visitas
palyndrome
def is_palindrome (string: str) -> bool:
string = string.replace(" ","").lower()
return string == string[::-1]
def run():
return is_palindrome(Ana)
if __name__ == '__main__':
run()
mypy te permite ver errores de tipado
Scope: alcance de las variables "Una variable solo esta disponible dentro de la region donde fue creada"
eje: Scope local
def my_func():
y = 5
print(y)
my_func()
eje: Global Scope
y = 5 #Global Scope
def my_func():
print(y)
def my_another_func():
print(y)
Eje2: Alcance local y global
z = 5
def my_func():
z = 2
print(z)
print(z)
Out: 2
5
4) Closures
Nested Functions (Funciones anidadas): funciones creadas dentro de una funcion
Eje:
def main():
a = 3
def nested():
print(a)
nested()
main()
Eje:
def main():
a = 3
def nested():
print(a)
return nested
my_func = main()
my_func() # 1
Closures: Cuando la variable de un Scope superior es recordada aun siendo borrada
Reglas para encontrar un closure:
· Debemos tener una nested funcion.
· La nested function debe referenciar un valor de un scope superior
· La funcion que envuelve a la nested function debe retornarla tambien
Eje:
def main():
a = 5
def nested():
print(a)
return nested
my_func() = main()
my_func()
del(main)
my_func() # 5 "Closures"
Eje:
def make_multiplier(x):
def multiplier(n):
return x * n
return multiplier
times10 = make_multiplier(10)
times4 = make_multiplier(4)
print(times10(3))
print(times4(5))
print(times10(times4(2)))
# 30 , 20, 80
Decoradores "Closure especial" Es una funcion que recibe como parametro otra funcion, le añade cosas, y retorna una funcion diferente
Eje:
def decorador(func):
def envoltura():
print('Esto se añade a mi funcion original')
func()
return envoltura
def saludo():
print('Hola!')
saludo() #Hola!
saludo = decorador(saludo) # Esto se añade a mi funcion original
# Hola!
Suggar Sintac (Lo pone bonito) obteniendo el mismo resultado (decorador usando @)
Eje:
def decorador(func):
def envoltura():
print('Esto se añade a mi funcion original')
func()
return envoltura
@decorador
def saludo():
print('Hola!')
saludo()
Eje2:
def mayusculas(func):
...