Diferències
Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
| Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
| info:cursos:python:codigofacilito [06/09/2021 04:06] – [diccionarios y métodos] mate | info:cursos:python:codigofacilito [10/06/2022 02:28] (actual) – [curso python (código facilito)] mate | ||
|---|---|---|---|
| Línia 1: | Línia 1: | ||
| = curso python (código facilito) | = curso python (código facilito) | ||
| - | [[https:// | + | {{tag> |
| + | [[https:// | ||
| == que es python | == que es python | ||
| * reminiscencias perl, pero más natual (pseudocódigo) | * reminiscencias perl, pero más natual (pseudocódigo) | ||
| Línia 312: | Línia 313: | ||
| </ | </ | ||
| == diccionarios y métodos | == diccionarios y métodos | ||
| - | * '' | + | * '' |
| * '' | * '' | ||
| * '' | * '' | ||
| Línia 320: | Línia 321: | ||
| * '' | * '' | ||
| + | == funciones de orden superior | ||
| + | * enviar funciones como variables y ejecutarla al usar **()** | ||
| + | * <code python> | ||
| + | def prueba(f): | ||
| + | return f() | ||
| + | def porEnviar(): | ||
| + | return (2+2) | ||
| + | print prueba(porEnviar) # sin parentesis en porEnviar | ||
| + | def seleccion(operacion): | ||
| + | def suma(n,m): | ||
| + | return n+m | ||
| + | def multi(n,m): | ||
| + | return n*m | ||
| + | if operacion == " | ||
| + | return suma | ||
| + | elif operacion == " | ||
| + | return multi | ||
| + | |||
| + | fGuardada = seleccion(" | ||
| + | print fGuardada(3, | ||
| + | fGuardada = seleccion(" | ||
| + | print fGuardada(3, | ||
| + | </ | ||
| + | |||
| + | == función MAP | ||
| + | * iteraciones de orden superior | ||
| + | * <code python> | ||
| + | def operador(n, | ||
| + | if n==None or m==None: | ||
| + | return None | ||
| + | |||
| + | return n+m | ||
| + | |||
| + | l1 = [1,2,3,4] | ||
| + | t1 = (9,8,7,6) | ||
| + | t2 = (5,4,3) | ||
| + | s1 = " | ||
| + | s2 = " | ||
| + | |||
| + | lr = map(operador, | ||
| + | |||
| + | print lr | ||
| + | |||
| + | print map(operador, | ||
| + | |||
| + | print map(operador, | ||
| + | </ | ||
| + | |||
| + | == función FILTER | ||
| + | * evalua a través de una función todos los elementos de una lista y retorna aquellos que son True | ||
| + | * <code python> | ||
| + | def filtro(elem): | ||
| + | return (elem > 0) | ||
| + | |||
| + | l = [1, | ||
| + | |||
| + | print filter(filtro, | ||
| + | </ | ||
| + | |||
| + | == función REDUCE | ||
| + | * reducir una secuencia a un elemento | ||
| + | * coge pares de elementos, el resultado de la anterior iteracción y el siguiente elemento. | ||
| + | * Para **(' | ||
| + | * <code python> | ||
| + | s = (' | ||
| + | |||
| + | def concatenar(a, | ||
| + | return a+b | ||
| + | |||
| + | print reduce(concatenar, | ||
| + | </ | ||
| + | |||
| + | == funciones Lambda | ||
| + | * función anónima | ||
| + | * siempre retorna algo | ||
| + | * sólo 1 línea | ||
| + | * uso en map, filter, reduce | ||
| + | * reduce el número de ciclos de computación usados. | ||
| + | * <code python> | ||
| + | li = [1,-2,1,-4] | ||
| + | lo = [5,3,6,7] | ||
| + | s = "Hola Mundo" | ||
| + | lf = lambda n,m: n+m | ||
| + | |||
| + | print map(lambda n,m: n+m, li,lo) | ||
| + | print filter(lambda n: n==' | ||
| + | print reduce (lambda n,m: n+m, lo) | ||
| + | |||
| + | print reduce (lf,lo) | ||
| + | print lf(3,4) | ||
| + | </ | ||
| + | |||
| + | == comprensión de listas | ||
| + | * reemplaza en python 3 a map, filter | ||
| + | * la operación a realizar se pone primero, las condiciones o recorridos detrás ¿?¿?¿? | ||
| + | * <code python> | ||
| + | l = [1,2,-3,4] | ||
| + | l2 = [" | ||
| + | |||
| + | print [num for num in l if num>0] | ||
| + | print [c * num for c in s | ||
| + | for num in l2] | ||
| + | print [c * num for c in s | ||
| + | for num in l2 | ||
| + | if num > 0] | ||
| + | </ | ||
| + | |||
| + | == Generadores | ||
| + | * equivalente a comprensión de listas | ||
| + | * recorre la lista, no devuelve una lista, si no los elementos | ||
| + | * <code python> | ||
| + | l = [1,2,-3,4] | ||
| + | l2 = [" | ||
| + | |||
| + | print [num for num in l if num>0] | ||
| + | print [c * num for c in s | ||
| + | for num in l2] | ||
| + | r1 = (c * num for c in s | ||
| + | for num in l2 | ||
| + | if num > 0) | ||
| + | print r1.next() | ||
| + | print r1.next() | ||
| + | |||
| + | for letra in r1: | ||
| + | print letra | ||
| + | | ||
| + | def factorial(n): | ||
| + | i = 1 | ||
| + | while n > 1: | ||
| + | i = n*i | ||
| + | yield i # ? objeto generador | ||
| + | n -= 1 | ||
| + | |||
| + | for e in factorial(5): | ||
| + | print e | ||
| + | </ | ||
| + | | ||
| + | == Decoradores | ||
| + | * función que recibe una función y devuelve una función decorada | ||
| + | * es decir, podemos añadir cosas antes (y supongo que después) de la ejecución de la función pasada por parámetro | ||
| + | * <code python> | ||
| + | def decorador(funcion): | ||
| + | def funcionDecorada(*args, | ||
| + | print " | ||
| + | funcion(*args, | ||
| + | | ||
| + | return funcionDecorada | ||
| + | |||
| + | def resta(n,m): | ||
| + | print n-m | ||
| + | | ||
| + | #decorando | ||
| + | print decorador(resta)(5, | ||
| + | decorada = decorador(resta) | ||
| + | decorada(6, | ||
| + | |||
| + | @decorador | ||
| + | def multi(n,m): | ||
| + | print n*m | ||
| + | |||
| + | multi(2,4) | ||
| + | </ | ||
| + | * se podrían anidar varios decoradores, | ||
| + | <code python> | ||
| + | loggeado = False | ||
| + | usuario = " | ||
| + | |||
| + | def admin(f): | ||
| + | def comprobar(*args, | ||
| + | if loggeado: | ||
| + | f(*args, | ||
| + | else: | ||
| + | print "no tiene permisos para ejecutar", | ||
| + | return comprobar | ||
| + | | ||
| + | @admin | ||
| + | def resta(n,m): | ||
| + | print n-m | ||
| + | </ | ||