Jose: Hola bienvenido de nuevo.
En esta conferencia, estamos hablando de filtro.
Ahora que tenemos
nuestros generadores, iteradores e iterables fuera del
camino, podemos comenzar con algunas funciones divertidas incorporadas.
La función de filtro es una función
incorporada en Python a la que puede llamar desde cualquier archivo
o programa, eso es lo que significa
construir y requiere dos argumentos.
El primer argumento para la
función de filtro
es otra función y también toma un iterable.
Así que va más o
menos así, busquemos una
lista de amigos como Rolf, José, Randy, Anna y Mary y sé que me
he perdido uno.
Y ahora vamos
a usar la función de filtro para que solo obtengamos los
amigos que comienzan con la letra R.
Entonces, comience con R, va
a ser filtro, esta es la función,
ahora toma una función
primer argumento, arg 1, función que devuelve verdadero o falso.
Entonces, el primer argumento para esta función
de filtro debe ser otra función que devuelva verdadero o
falso dependiendo de lo que queramos filtrar.
Así que déjame definir una función aquí arriba.
Empieza com R.
Volver amigo punto comenzar con R.
El punto amigo comienza con R va a ser
cierto si este argumento aquí comienza con una R, será
falso si no lo es.
Entonces, el primer argumento para la función de filtro
tiene que ser
esto comienza con la función
R y el segundo argumento debe ser iterable,
sabemos qué son estos amigos, así que es iterable
porque podemos iterar sobre él, es
una lista y eso es es así como se ve
la función de filtro y lo que hace es
que solo mantiene los elementos para los que esto devuelve verdadero.
Entonces, la primera vez que
se ejecuta la función de filtro, te dará Rolf, Rolf
irá con los amigos, el amigo
comienza con R, será cierto, por lo
que Rolf se mantendrá con la función de filtro.
Luego irá de nuevo, y esta vez con José, José
comienza con R es falso, por lo que
el filtro lo eliminará e ignorará y así
sucesivamente para cada amigo aquí.
Lo interesante es que el filtro
en realidad devuelve un generador
para que
sea un poco más
eficiente, en lugar de copiar su lista
con solo los elementos que desea mantener, debe llamar al siguiente, comenzar con
el elemento R para obtener el siguiente disponible El elemento que
es este caso será Rolf.
Y si haces eso una y otra vez, obtendrás a
Randy y
finalmente obtendrás esta excepción de detención de iteración de la que hablamos
anteriormente, es lo
que señala el final de una secuencia
o un generador o
un iterador cuando alcanzas el Al final, ¿de acuerdo?
Cuando haces un bucle for, lo
que el bucle for está
haciendo en segundo plano es solo llamar a continuación y
tan pronto como llegas a esta iteración
stop, el bucle for
se detiene y no te da este
error porque la iteración stop ha sido diseñada
para significar eso y el ciclo for es una construcción
que usa la iteración stop para saber cuándo ha llegado al final, ¿de acuerdo?
Ahora, por supuesto, si hace una lista de inicio con R, le
dará una lista de todos
los elementos en
el generador, revisará cada elemento y lo colocará
en una nueva lista.
Ahora, si lo vuelves a hacer, ¿qué
crees que va a pasar?
Bueno, obtendrás una lista vacía, el objeto
de la lista aquí no genera una iteración de detención, pero ve que la iteración
de detención se eleva y simplemente no
te da nada,
solo te da una lista vacía
ahora porque el generador ya se ha utilizado
y recuerda que ha llegado al final, por
lo que no puede darle nada más.
Es por eso que explico generadores, iteradores
e iterables antes de entrar en esta función de filtro, ¿de acuerdo?
Ahora, por supuesto, en lugar de definir una función
aquí que toma
un parámetro y los retornos del parámetro
comienzan con R, podríamos usar una lamda.
Esta función lamda es exactamente lo mismo,
por lo que toma un parámetro y después
de los dos puntos definimos lo que devuelve y lo
que devuelve es x dot comienza con R, por lo que
esto es verdadero o
falso dependiendo de si x comienza con R.
Si te hace sentir mejor, puedes llamar
al parámetro amigo y de esa manera tal vez
sea un poco
más claro que tal vez esta
función operará en estos
amigos aquí, entonces ya no la necesitas allí.
Y tampoco necesitamos más este comentario
ya que sabemos lo que significa ahora.
Esta función de filtro aquí
es idéntica
a esta expresión generadora aquí, esta
comprensión generadora que dice, F
para F en amigos, si F punto comienza con R.
Entonces estos dos son idénticos, ¿de acuerdo?
Aquí tenemos una expresión generadora, una comprensión
generadora que coloca a cada amigo
en un nuevo generador, pero solo si F comienza con R,
entonces estos dos son iguales, ¿de acuerdo?
¿Cuál es más rápido?
¿Cuál se desempeña mejor?
Este, la comprensión del generador funciona mejor en
este caso, al menos.
Y la razón de
esto es porque tiene que crear esta función lamda en este
filtro y no tiene que crear
una función lamda en la expresión del generador.
Si ya tiene su función definida
en otra parte de su
programa, la función de filtro puede funcionar mejor y,
en algunos casos, creo
que la función de filtro puede ser más legible, aunque en muchos
otros casos, creo
que la comprensión de la lista es más legible.
Depende de usted
cuál usa, normalmente voy por las comprensiones, también
es un poco más Pythonic.
Y, por cierto, solo para
completar lo que está claro exactamente lo que
está sucediendo, estos dos filtros y esta comprensión
del generador son idénticos a esta
otra función que voy a definir.
Es otra función de
filtro, muy
parecida a esta, que toma una
función y un iterable y va a iterar sobre el
iterable, va a verificar si la función
devuelve verdadero o no y va a
producir I al final si la
función es verdad.
Entonces, imaginemos que llamamos a mi filtro personalizado aquí.
Lamda friend comienza con R es
esta función, la iterable es nuestra lista de amigos.
Repetimos el iterable, obtenemos el primer elemento que
es Rolf.
Si es así, amigo comienza con R es cierto, lo
cual es, entonces vamos a ceder
I, ese es Rolf.
Cuando llamemos a continuación a esta función, vamos a buscar
a Rolf y luego nos
detendremos justo después de la línea nueve.
Cuando volvamos a llamar
a continuación, volveremos a la cima, ese
soy yo, vamos, ese es José, por
cierto, la
cadena José, vamos a verificar si la función
coincide, será falso, así que no vamos a producir nada,
no nos detenemos, pasamos al siguiente elemento del ciclo,
verificamos si Randy comienza con R y
lo es, así es, entonces cedemos a Randy y nos detenemos.
La próxima vez que llamemos a continuación, vamos
aquí y es Anna, es falso, así que no cedemos, continuamos, yo
soy Mary, es falso para que no cedamos,
continuamos, llegamos al final, eso es un detener la iteración
para que lleguemos al final del objeto generador y esa
es otra detención de la iteración que nos dice
que hemos llegado al final.
Entonces, con suerte, esto tiene sentido,
está comenzando a profundizarse un poco más, más en
lo que se trata Python, que es el manejo de
datos y el envío de datos de un
lugar a otro
y el rendimiento es
extremadamente poderoso porque le permite detenerse y generar los valores
uno por uno sin tener que guardarlos todos
en la memoria al mismo tiempo.
De todos modos, eso
es todo para este video, solo quería mostrarles esta función
de filtro y cómo se usa.
La función de filtro
también está presente en muchos
otros lenguajes de programación, por lo que la
verá en todas partes a medida que desarrolle sus
habilidades de programación y continúe su viaje de programación.
Entonces, sí, eso es todo y nos
vemos en el próximo video.