Dominio de Python: el curso intermedio definitivo para 2025 | Arno Pretorius | Skillshare
Buscar

Velocidad de reproducción


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Dominio de Python: el curso intermedio definitivo para 2025

teacher avatar Arno Pretorius, Developer | AWS Solutions Architect

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      Introducción al curso

      3:02

    • 2.

      Proceso de pensamiento

      3:55

    • 3.

      Recursos del curso

      0:51

    • 4.

      Acceso a recursos del curso en línea

      1:30

    • 5.

      Python: instalación y configuración - Windows

      4:26

    • 6.

      Código VS: instalación y configuración - Windows

      1:56

    • 7.

      Cómo empezar con nuestro proyecto: ventanas

      6:27

    • 8.

      Python: instalación y configuración - MacOS

      2:28

    • 9.

      Código VS: instalación y configuración - MacOS

      1:19

    • 10.

      Cómo empezar con nuestro proyecto: MacOS

      5:25

    • 11.

      Mejora tu flujo de trabajo con Code Runner - [Opcional]

      4:44

    • 12.

      Expresiones regulares

      0:57

    • 13.

      Trabajar con expresiones regulares - [Laboratorio]

      10:17

    • 14.

      Impresión de valores múltiples

      3:37

    • 15.

      Trabajar con diferentes resultados - [Laboratorio]

      3:35

    • 16.

      Enunciados de casos de coincidencia

      3:08

    • 17.

      Trabajar con declaraciones de casos de coincidencia: [Laboratorio]

      8:26

    • 18.

      Módulos

      1:43

    • 19.

      Navegación por el índice de módulos de Python

      1:22

    • 20.

      Integrar módulos personalizados e incorporados: [Lab]

      9:14

    • 21.

      Paquetes, Pip y PYPI

      2:03

    • 22.

      Cómo usar paquetes externos - [Lab]

      10:55

    • 23.

      Recursos útiles

      1:24

    • 24.

      Generar números aleatorios

      0:56

    • 25.

      Profundizar en el módulo aleatorio - [Laboratorio]

      16:07

    • 26.

      Exploración del módulo secretos - [Laboratorio]

      4:01

    • 27.

      Profundizar en el módulo numpy - [Laboratorio]

      14:20

    • 28.

      Decoradores

      2:10

    • 29.

      Cómo crear nuestro primer decorador - [Lab]

      8:57

    • 30.

      Trabajar con decoradores - [Laboratorio]

      10:32

    • 31.

      E/S de archivos

      6:01

    • 32.

      Realización de operaciones de archivos - [Lab]

      11:20

    • 33.

      Cómo obtener metadatos de archivos

      1:09

    • 34.

      Atributos de los metadatos de salida del archivo - [Lab]

      4:23

    • 35.

      Parámetros y argumentos

      4:51

    • 36.

      Diferenciación entre parámetros y argumentos: [Laboratorio]

      7:13

    • 37.

      Argumentos posicionales y palabras clave

      5:37

    • 38.

      Mapa de argumentos posicionales y palabras clave: [Lab]

      16:35

    • 39.

      Mezcla de tipos de argumentos - [Laboratorio opcional]

      10:28

    • 40.

      Argumentos predeterminados

      4:35

    • 41.

      Trabajar con argumentos predeterminados - [Laboratorio]

      11:53

    • 42.

      Argumentos de longitud variable

      4:09

    • 43.

      Uso de argumentos de longitud variable - [Lab]

      8:50

    • 44.

      Desembalado de contenedores

      5:21

    • 45.

      Realización del desembalaje de contenedores: [Laboratorio]

      13:31

    • 46.

      Argumentos locales y globales

      2:35

    • 47.

      Análisis del alcance de los argumentos - [Laboratorio]

      4:09

    • 48.

      Utilizar la palabra clave global: [laboratorio opcional]

      4:29

    • 49.

      Envío de variables como argumentos

      1:48

    • 50.

      Trabajar con variables como argumentos - [Laboratorio]

      4:02

    • 51.

      Pasado de parámetros por valor o referencia

      1:48

    • 52.

      Explora los valores de los parámetros y las referencias - [Laboratorio]

      12:01

    • 53.

      El operador de asterisco

      1:44

    • 54.

      Aplicación del operador asterisco: parte 1 - [Laboratorio]

      16:54

    • 55.

      Aplicación del operador asterisco: parte 2 - [Laboratorio]

      6:04

    • 56.

      Funciones de Lambda

      1:58

    • 57.

      Realiza operaciones con Lambda - [Lab]

      13:28

    • 58.

      Aplicar funciones lambda a otras funciones

      1:38

    • 59.

      Incorporar lambda con otras funciones - [Lab]

      11:05

    • 60.

      ¿Qué es la programación orientada a objetos?

      1:09

    • 61.

      Clases y objetos

      3:32

    • 62.

      Creación de nuestra primera clase y objeto: [Lab]

      7:38

    • 63.

      Profundidad sobre las clases y los objetos - [Laboratorio opcional]

      6:12

    • 64.

      Métodos personalizados

      1:45

    • 65.

      Integración de métodos personalizados (Instancia): [Laboratorio]

      9:33

    • 66.

      Trabajar con métodos estáticos y de clase - [Laboratorio]

      12:28

    • 67.

      ¿Qué es la herencia?

      1:47

    • 68.

      Uso de la herencia: [Laboratorio]

      12:43

    • 69.

      Abstracción

      1:51

    • 70.

      Trabajar con la abstracción - [Lab]

      17:07

    • 71.

      Colecciones

      3:06

    • 72.

      Explora el módulo de colecciones - [Lab]

      15:38

    • 73.

      Itertools

      1:38

    • 74.

      Trabajar con itertools - [Laboratorio]

      18:42

    • 75.

      Administradores de contexto

      2:40

    • 76.

      Trabajar con administradores de contexto: [Laboratorio]

      7:50

    • 77.

      Gestores de contexto integrados vs. personalizados

      1:27

    • 78.

      Crea un gestor de contextos personalizado: [Lab]

      17:31

    • 79.

      Generadores

      4:13

    • 80.

      Trabajar con generadores - [Laboratorio]

      7:23

    • 81.

      Eficiencia de la memoria del generador

      2:47

    • 82.

      Copias superficiales y profundas

      0:55

    • 83.

      Usa textos superficiales y profundos: [Lab]

      8:41

    • 84.

      Registro

      1:38

    • 85.

      Implementar mensajes de registro: [Laboratorio]

      15:57

    • 86.

      JSON

      0:42

    • 87.

      Trabajar con JSON - [Laboratorio]

      9:19

    • 88.

      Colas

      2:43

    • 89.

      Consulta de colas: [Lab]

      8:13

    • 90.

      Recursión

      0:41

    • 91.

      Realización de llamadas recursivas - [Laboratorio]

      11:19

    • 92.

      Comprensiones

      1:54

    • 93.

      Uso de comprensiones de lista: [Laboratorio]

      13:09

    • 94.

      Uso de comprensiones de diccionarios: [Laboratorio]

      15:33

    • 95.

      Hilos y procesos

      4:36

    • 96.

      Multiprocesamiento

      0:28

    • 97.

      Multihilo

      0:35

    • 98.

      Integración de multiprocesamiento - [Lab]

      6:28

    • 99.

      Integrar varios hilos: [Lab]

      6:31

    • 100.

      Pruebas de unidad

      0:56

    • 101.

      Realiza pruebas unitarias estándar: [Laboratorio]

      12:14

    • 102.

      Entornos virtuales

      0:43

    • 103.

      Creación de un entorno virtual - [Laboratorio]

      7:53

    • 104.

      Crea tu propio proyecto

      0:46

    • 105.

      ¡Gracias!

      0:44

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

14

Estudiantes

--

Proyecto

Acerca de esta clase

Qué necesitas:

Este curso está diseñado para aquellos que tienen conocimientos básicos de Python y quieren llevar sus habilidades al siguiente nivel. Ya deberías saber cómo trabajar con variables, tipos de datos, condicionales básicos, bucles y funciones, etc.

Si eres nuevo en Python, te recomiendo que empieces con mi Python: curso definitivo para principiantes para 2025 en Skillshare. Veremos los conceptos básicos que necesitarás antes de sumergirte en este curso intermedio.

En este curso, usarás código Visual Studio (código VS) como editor de programación. Es gratuita, ligera, y muy utilizada por desarrolladores de todo el mundo. Te guiaré a través del proceso de configuración, incluido cómo instalar Python y configurar el código VS. Solo necesitas una computadora de escritorio o laptop y conexión a Internet.

Lo que aprenderás:

En este curso, aprovecharás tus conocimientos básicos de Python para dominar los conceptos de programación intermedios en este lenguaje versátil y poderoso. El curso equilibra la teoría con la práctica práctica, para enseñarte a escribir código Python eficiente y escalable mientras te centras en aplicaciones prácticas.

Al final del curso, tendrás una sólida comprensión de los conceptos intermedios de Python, confianza para desarrollar aplicaciones más complejas y una apreciación del potencial de Python para resolver problemas del mundo real.

Estos son los temas clave que dominarás en este curso:

  • Expresiones regulares
  • Impresión de valores múltiples
  • Caja de cerillas
  • Módulos
  • Paquetes, PIP y PYPI
  • Generar números aleatorios
  • Decoradores
  • E/S de archivos
  • Cómo obtener metadatos de archivos
  • Parámetros y argumentos
  • Argumentos posicionales y palabras clave
  • Mezcla de tipos de argumentos
  • Argumentos predeterminados
  • Argumentos de longitud variable
  • Desembalado de contenedores
  • Argumentos locales y globales
  • Envío de variables como argumentos
  • Pasado de parámetros por valor o referencia
  • El operador de asterisco
  • Funciones de Lambda
  • Aplicar funciones lambda a otras funciones
  • Programación orientada a objetos
  • Clases y objetos
  • Métodos personalizados
  • Métodos estáticos y de clase
  • Herencia
  • Abstracción
  • Colecciones
  • Itertools
  • Administradores de contexto
  • Gestores de contexto incorporados vs. personalizados
  • Generadores
  • Generadores: eficiencia de la memoria
  • Copias superficiales y profundas
  • Registro
  • JSON
  • Colas
  • Recursión
  • Comprensiones
  • Hilos y procesos
  • Multihilo y multiprocesamiento
  • Pruebas de unidad
  • Entornos virtuales

Qué harás:

A lo largo del curso, comenzarás por aprender los fundamentos teóricos de los conceptos clave, seguido de ejercicios prácticos de laboratorio que te permitirán aplicar lo aprendido. Estos ejercicios prácticos te ayudarán a reforzar tu comprensión y te asegurarán de que estés listo para abordar tareas más complejas.

A medida que avanza el curso, trabajarás en unos pocos miniproyectos que pondrán en práctica todos los conocimientos y habilidades que has adquirido hasta ahora.

Por último, en la sección Proyectos y recursos, crearás tu propio proyecto. Aquí es donde tomarás las habilidades aprendidas y las usarás para diseñar y crear algo útil para ti mismo. Ajustarás todo de una manera práctica y personalizada.


Beneficios del curso:

Este curso incluye:

  • Más de 10 horas de video bajo demanda
  • Lecciones teóricas para aprender conceptos fundamentales
  • Ejercicios prácticos de laboratorio para aplicar tus conocimientos
  • Minideproyectos de práctica con soluciones
  • Más de 100 lecciones en total

Acerca de tu instructora:

Hola, soy Arno Pretorius, profesor de TI calificado con experiencia en la enseñanza tanto en las aulas como en línea, así como conocimientos profesionales de AWS y desarrollo de software. Me apasiona hacer que la programación sea accesible y agradable para todos, sin importar su origen.

¿Quieres aprender más?

Si disfrutaste este curso y quieres mantenerte informado de posibles cursos en el futuro, asegúrate de seguirme en Skillshare.

Conoce a tu profesor(a)

Teacher Profile Image

Arno Pretorius

Developer | AWS Solutions Architect

Profesor(a)

Arno is a software developer and a solutions architect who has a passion for web development, cloud computing and DevOps. He specialises in creating and deploying Django applications to AWS.

Holding a BSc in Information Technology, he is also an AWS Certified Solutions Architect and Developer. In his spare time, he enjoys content creation, reading and discovering new hobbies/interests.

To stay up to date with his courses, follow his Skillshare profile to receive the latest updates and announcements.

Ver perfil completo

Level: Intermediate

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

Transcripciones

1. Introducción al curso: Hola a todos. Y bienvenidos al curso PysonUtimate Intermedio Así que sólo un poco sobre mí. Hola, soy Ono. Soy desarrollador de software y arquitecto de soluciones que tiene experiencia en creación e implementación de aplicaciones basadas en PySon Jango en la nube de AWS También tengo una EEB en tecnología de la información, y soy arquitecto y desarrollador de soluciones certificado por AWS arquitecto y desarrollador de soluciones También tengo una gran pasión por el mundo de las TI y la enseñanza, más específicamente, todos los campos únicos que coexisten en TI misma Entonces con todo eso dicho, confía en mí, estás en buenas manos. Bien, entonces probablemente te estés preguntando a continuación, ¿qué aprenderás en este curso? Así que vas a aprender a avanzar en tus habilidades PySon y a profundizar tu comprensión de los conceptos básicos de programación También vas a dominar PySon intermedio con estructuras de datos, programación funcional y concurrencia Y también vas a aprender a resolver problemas del mundo real de manera eficiente usando PySon Derecha. Otra cosa que voy a mencionar es que una descripción completa de lo que vamos a cubrir en este curso se enumerará bajo la sección about de este curso. Para que puedas seguir adelante y echar un vistazo y ver si hay ciertos conceptos que estás ansioso o ansioso por aprender. Ahora lo siguiente va a estar enfocado en para quién es este curso. Este curso está diseñado para aquellos que ya tienen un conocimiento básico de PySon y para aquellos que quieren profundizar sus habilidades con conceptos intermedios Si eres un estudiante, un profesional que busca cambiar carrera o simplemente alguien que tiene curiosidad por la codificación, este curso está diseñado para ayudarte a construir una base sólida en PySon Lo siguiente es la pregunta sobre prerrequisito. Entonces, ¿son los prerrequisitos? Desafortunadamente, hay un requisito previo para este curso ya que se trata de un curso intermedio. lo que el requisito previo es que este curso esté diseñado para quienes ya tienen un conocimiento básico de PySon es ideal para quienes quieran sumar a sus conocimientos existentes de pyson Así que ten eso en mente que debes asegurarte de tener una base sólida en pyson antes de decidirte una base sólida en pyson antes a continuar con este curso Derecha. Entonces otra cosa quiero mencionar es que este curso se acopla con laboratorio teóricos y prácticos ejercicios de laboratorio teóricos y prácticos para asegurar que entiendas el seri de Bye y cómo puedes aplicar esa serie en los ejercicios de laboratorio Ahora, cada lección de este curso está estructurada cuidadosamente para maximizar la simplicidad y eficiencia. Y lo siguiente que probablemente te estés preguntando es, ¿hay algún apoyo para este curso? Entonces la pregunta es, sí. Entonces, si tiene alguna pregunta o necesita asistencia en cualquier aspecto, no dude en hacer uso de la sección de discusión de este curso, y estaré muy contento de atenderle y responder cualquier pregunta que pueda tener. E incluso podría darse el caso de que otro compañero de estudios te ayude antes de que pueda responder a tu pregunta. Bien, así que eso es todo. Gracias por ver y espero verte en este curso. 2. Proceso de pensamiento: Hola, Eon. Y bienvenidos a la siguiente lección, que va a estar enfocada en el proceso de ordenar. Entonces en esta conferencia, solo voy a darte algunas palabras de consejo, que puedes seguir si quieres sobre cómo estructurar nuestro proceso de sal al momento de emprender este curso. Así que sigamos adelante y comencemos. Entonces ordenar el proceso. Ahora, antes de sumergirnos en el curso, necesitamos estructurar nuestro proceso de selección. Entonces solo quiero darte algunas palabras de consejo. Entonces sigamos adelante y lleguemos a ello. Entonces el primer consejo que me gustaría darte es que lo des paso a paso. Así que toma este curso paso a paso. Por favor, no cepille, ¿verdad? Tómate tu tiempo. Si una lección en particular te está tomando mucho tiempo dominar, no pierdas la esperanza. Lo entenderás con el tiempo. Algunas personas entienden diversos conceptos inmediatamente como primera vez. Otros tardan más en comprender ciertos conceptos. Y como yo, como aprendiz ciertas materias en mi vida, por supuesto, me he tomado mucho tiempo en ciertas áreas de conceptos para entender y en otros temas particulares que domino casi instantáneamente Para todos, es diferente. Todo el mundo va a tener un reto en algún momento de algo, así que por favor no te desanimes y solo tómalo con calma y calma y constante Otro consejo que me gustaría darle es que fije un horario y se apegue a él. Ahora, por supuesto, no necesitas ser extremadamente riguroso y detallado en tu horario. lo que me refiero con esto, no es necesario planificarlo por los minutos y las horas exactas y el tiempo, etcétera Lo que quiero decir con eso es tener un horario que no te va a abrumar, sino que te va a empujar lo suficiente para mantenerte consistente y disciplinado e incluso motivado para completar el Así que tenlo en mente. Entonces, en mi experiencia aquí, te recomendaría elegir un horario que sea más flexible para ti. mí mismo no me gusta sentarme rigory y exactamente por ¿cómo puedo decir los tiempos y los minutos pasados y las horas gastadas No me gusta ir con ese enfoque. O con fechas, me gusta mantenerlo más flexible y decir: Bien, quiero gastar una cierta cantidad al mes trabajando en este curso, y solo quiero terminar unas cinco a diez lecciones. Entonces ese sería mi enfoque y cómo lo hago. Por lo que dependería de cómo prefieras seguir adelante. Sólo te estoy dando un ejemplo. Pero de todos modos, es bueno tener al menos un horario base para seguir junto con. Ahora bien, el consejo más importante que quiero compartir con ustedes aquí es el último, que es mantenerse positivo y saber que no es una carrera para completar el recorrido, sino más bien un viaje lento y constante para adquirir conocimientos a largo plazo para obtener los mejores resultados aquí. Esto es a lo que me refiero aquí. No quieres apresurarte por este curso, más bien tómate tu tiempo, aunque sientas que los conceptos son muy fáciles de entender, más bien tómate tu tiempo. Llévala estable y trabaja en él en el curso de vez en cuando o con regularidad, dependiendo de tus horarios. Eso es algo muy importante que quiero mencionar aquí. Nuevamente, esto ata muchas cosas aquí en el enfoque de mantenerse positivo. De nuevo, por supuesto, si ciertos conceptos tardan algún tiempo en comprender, trabajar a través de él, poner en el esfuerzo, y vas a llegar ahí. Mantente positivo y sabe que va a tomar algún tiempo, pero tómalo con calma, y relájate a medida que avanzas por el curso. He hecho todo lo posible aquí para que sea tan simple como libre de estrés a lo largo de este curso. Así que ten en cuenta aquí solo para relajarte, tomar una respiración profunda y pasar tranquilamente por el curso y disfrutar. Muy bien, chicos. Entonces eso es todo lo que quería mencionar aquí en términos de proceso de pensamiento. 3. Recursos del curso: Hola a todos. Y bienvenidos a la siguiente lección, que va a estar enfocada en los recursos del curso. Entonces echemos un vistazo. Bien, entonces probablemente te estés preguntando, bien, ¿cómo programaremos? Entonces, lo primero que debemos asegurar es que tenemos Python instalado en nuestro dispositivo. Entonces, ya sea que estemos trabajando en una PC con Windows o si estamos trabajando en un dispositivo macOS. Entonces vamos a instalar y configurar el código de Visual Studio, comúnmente conocido como código VS, y este es un editor de codificación que nos va a permitir crear y ejecutar nuestros programas PySon Ahora, sé que esto puede sonar un poco estresante y preocupante, pero no te preocupes. Voy a desglosarlo lo más fácilmente posible para ti, y te voy a mostrar exactamente cómo vamos a empezar con todo. Así que no te preocupes. Estás en buenas manos. 4. Acceso a recursos del curso en línea: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en acceder a nuestros recursos del curso en línea. Lo que quiero decir con esto es, solo voy a mostrarte cómo puedes seguir adelante y acceder a los sitios web requeridos para descargar y configurar PySon y también para configurar el código de Visual Studio Sólo voy a mostrarte cómo acceder a los sitios web. En las lecciones posteriores, realidad voy a mostrarte cómo instalarlos y configurarlos. Esto es solo una lección sobre cómo acceder a ellos. Así que puedes dirigirte a Google y solo puedes escribir PySon Download, y luego solo podemos decir Búsqueda de Google Y en este enlace aquí, verás que se llamará Descargar PySon y quieres dar click sobre eso Eso te va a llevar a la siguiente página aquí, que es una Python o slash forward download forward slash Así que ya no vamos a instalar PySon. Solo quiero ayudarte a llegar al sitio web. A continuación, también vamos a estar utilizando Visual Studio Code. Entonces lo que puedes hacer es seguir adelante en Google y escribir Visual Studio Code Download. Míralo la búsqueda de Google. Y verás aquí este enlace que aparece que dice descargar Visual Studio Code, Mac Linux y Windows, para que podamos abrirla. Y aquí está la página que vamos a necesitar para seguir adelante y configurar código de Visual Studio como nuestro editor de codificación. Muy bien chicos. Eso es todo para esta lección, muy simple. Solo quiero mostrarte cómo puedes acceder a estos sitios web para futuras referencias en las próximas lecciones. 5. Python: instalación y configuración - Windows: Hola a todos. Bienvenido a la siguiente lección, que va a estar enfocada en instalar PySon en un dispositivo Windows. Empecemos. Ahora, lo primero que debes hacer es dirigirte a la siguiente dirección web, que está en python.org, fordslash Después de ingresar en esa dirección web, serás redirigido a la siguiente página como puedes ver aquí mismo Lo que vamos a hacer es descargar PySon para Windows ahora. Ahora en cuanto a la versión que se te da cuando te dirijas a esta página, no tiene que ser exactamente la misma versión, así que no te estreses siempre y cuando no esté muy lejos. Bien, lo que podemos hacer es seguir adelante y ver descargar Pisón. Ahí está la configuración para nosotros aquí, que podemos seguir adelante y abrir. Nos va a llevar a través del asistente de configuración. Entonces lo que vamos a querer hacer es que vamos a querer asegurarnos de que estamos usando privilegios de administrador al instalar Pit Ex, y también queremos agregar el PysonTex a nuestro pase Ahora bien, esto es muy importante solo para asegurar que todos nuestros usuarios en nuestro sistema puedan ejecutar PySon dentro de cualquier tipo de aplicación que permita ejecutar Python ¿Hay alguna restricción? Entonces quieres decir instalación personalizada. Bien, asegúrate de que todo esté seleccionado, como puedes ver aquí. Entonces podemos ver a continuación. Y entonces quieres decir instalar PySon para todos los usuarios aquí, en este caso, es 3.13. Así que solo asegúrate de seleccionar la siguiente opción, y esto solo va a asegurar que todos los usuarios tu dispositivo podrán usar PySon Después de hacerlo, puedes seguir adelante y decir Instalar. Aparecerá un mensaje en tu pantalla, y el mío está atenuado actualmente, y solo quieres decir que sí a ese aviso de seguridad Así podemos ver que la configuración está en curso. Entonces solo va a tomar un momento más o menos hasta que PySon esté instalado en nuestro sistema Así que sólo vamos a tener que ser un poco pacientes hasta que esté configurado y terminado. Así que vamos a darle un momento. Todo bien. Bienvenido de nuevo. Enhorabuena por configurar correctamente PySon en tu PC con Windows Como podemos ver ahora, que la configuración fue todo un éxito, bien hecho. Ahora podemos seguir adelante y cerrar esto y sólo voy a minimizar esto. Ahora bien, para asegurar que todo se haya instalado correctamente y que no haya problemas, le recomendaría encarecidamente que lo haga ahora es reiniciar su PC. Así que por favor asegúrate de hacer esto. Esto es muy importante. Entonces, lo que puedes hacer es simplemente dirigirte a tu PC y puedes seguir adelante y decir que reinicio se lleva bien. Y luego, por supuesto, una vez que tu PC se haya reiniciado, te llevaré a través de la prueba de confirmación final para asegurarme de que PySon efectivamente se haya instalado en tu sistema y que el pase haya sido mente de sistema en Entonces eso es lo principal. Por lo tanto, la variable de entorno para PySon necesita ser cargada y configurada Entonces sigamos adelante y hagamos eso. Así que reiniciemos las PC y luego volveremos en cuanto se hayan reiniciado nuestras computadoras Bien, así que bienvenido de nuevo. Entonces confío a estas alturas que ya has reiniciado tu PC. Ahora, todo lo que vas a querer hacer para la confirmación final de que PySon se ha configurado correctamente en nuestros sistemas es buscar el símbolo del Simplemente puedes escribir CMD para encontrarlo rápidamente. Así que aquí está nuestro símbolo del sistema. Y todo lo que voy a hacer ahora es solo voy a ajustar esto solo para tu placer visual, y solo voy a decir PySon versión dash dash Entonces puedes seguir adelante y escribir esto también, y luego podemos presionar Enter. Y si todo fue un éxito, debería dar salida a la versión PySon que tengas instalada en tu sistema Y esto es como una comprobación final de confirmación para asegurarnos de que todo ha corrido sin problemas y que estamos bien para ir. Todo bien. Así que asegúrate de que puedas ver esto y que hayas instalado PySon en tu máquina, y eso es todo Entonces así es como puedes instalar PySon en tu sistema y también verificar que no haya problemas ni conflictos ni nada y que se haya instalado correctamente Bien, vete. Entonces, para esta lección, así es como puedes seguir adelante e instalar PySon en un dispositivo Windows 6. Código VS: instalación y configuración - Windows: Hola a todos. Y bienvenidos a la siguiente lección, que va a estar enfocada en descargar y configurar código de Visual Studio en un dispositivo Windows. Así que comencemos. Ahora, lo primero que debes hacer es dirigirte a la siguiente URL, la cual puedes agregar como código visualstudio.com flash Download, va a llevar a esta página aquí donde puedes descargar código de Visual Studio para tu sistema operativo designado Ahora caso, va a ser en Windows. Podemos seguir adelante y seleccionar la opción aquí para Windows ten y 11, así podemos hacer click en eso y eso nos va a descargar la guía de instalación para nosotros y el asistente de configuración. Podemos seguir adelante y abrirla. Solo seamos pacientes a medida que se abre. Queremos aceptar el acuerdo. Pasemos a la siguiente etapa. Lo va a guardar en una carpeta de destino. Pasemos a la siguiente etapa. Podemos ver así es como podemos acceder a él en el menú de inicio como código de Visual Studio siguiente. Te recomendaría solo crear un icono de escritorio por ahora. Siempre se puede quitar esto. Podemos decir siguiente e instalar. Ahora va a instalar código de Visual Studio en nuestro equipo. Todo lo que vamos a querer hacer ahora es ser pacientes ya que ese proceso se completa. Bien, entonces, bienvenido de nuevo. Como puede ver, el código de Visual Studio se ha instalado con éxito en nuestra máquina, y ahora podemos lanzar Visual Studio Code. Entonces, si esta opción no se ha marcado por ti en la casilla de verificación, puedes seguir adelante y verificarla, y puedes ver terminar, y eso nos va a abrir el código de Visual Studio. Entonces podemos decir terminar. Y aquí estamos. Así que aquí estamos en el código de Visual Studio. Entonces, bien hecho. Ha descargado y configurado correctamente código de Visual Studio en su PC con Windows. Tan bien hecho. 7. Cómo empezar con nuestro proyecto: ventanas: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en comenzar con el código de Visual Studio. Bien. Ahora, lo que vamos a querer hacer es crear nuestro proyecto, que albergará nuestros archivos Python. Bien, así como pueden ver, no tenemos carpetas abiertas ni nada por el estilo. Entonces lo que vamos a hacer es dirigirnos al escritorio, y voy a hacer click derecho y voy a decir nuevo va a decir carpeta y voy a darle a esta carpeta un nombre que va a ser adecuado. Así que vamos a estar trabajando con nuestro código Python. Entonces pensaría que un nombre sencillo aquí se llamaría Mi Proyecto. Ahí vamos. Ahora podemos navegar de nuevo al código de Visual Studio, y ya puedes decir ahora carpeta abierta, o puedes hacer clic en el icono en la parte superior izquierda, ir a Archivo, luego abrir carpeta. Después podremos navegar a nuestro escritorio y luego seleccionar mi proyecto. Aquí es donde se alojará nuestro código PyCon. Entonces podemos decir seleccionar carpeta. Todo bien. Perfecto. Entonces esta es la carpeta con la que estaremos trabajando para almacenar nuestros scripts PySon Derecha. Ahora lo siguiente que quieres hacer es resaltar o pasar el cursor sobre tu carpeta de proyectos aquí y verás algunos íconos Queremos dar click en Nuevo Archivo, y este va a ser nuestro archivo de script PySon Entonces aquí es donde agregaremos todo nuestro código PySon, y luego vamos a ejecutar el código basado en los comandos que se han definido en este archivo Entonces solo voy a llamar a esto por ahora punto principal pi. Puedes darle el nombre que desees, y puedes presionar Enter. Ahora, en cuanto hayas pulsado Enter, vas a obtener un prompt aquí que dice: ¿Quieres instalar el PysoneTension recomendado de Microsoft para el lenguaje PySon de Microsoft para el Entonces te recomendaría que lo hicieras. Te va a novia con algunas características extra y tal. Entonces yo recomendaría seguir adelante e instalar eso. Entonces se puede decir instalar. Por lo que va a tomar unos minutos instalar esta extensión en el código de Visual Studio. Ahora, todo lo que necesitas hacer ahora es ser un poco paciente, y una vez que esté instalado, podemos continuar desde ahí. Cierto, así que bienvenidos de nuevo ya que podemos ver que la extensión Python se ha instalado el código Visin Visual Studio, así podemos cerrar esto Y lo que también podemos hacer es dirigirnos a Explorer. Y aquí podemos seguir adelante y alternar la siguiente opción para maximizar nuestro script aquí llamado main dot pie, por ejemplo. Y si queremos ver nuestro directorio, que alberga nuestro proyecto y los archivos asociados, por supuesto podemos simplemente navegar hacia atrás. Todo bien. Entonces solo algo que también quería mencionar en esa nota. Derecha. Ahora lo que queremos hacer es que queremos agregar en nuestro código Python a este script, y luego queremos ejecutar este script y queremos ver el resultado de salida. Ahora, lo primero es que sigamos adelante y empecemos y creamos un programa sencillo. Sólo voy a definir una variable conocida como nombre, y decimos iguales y establecemos eso al valor de no entonces voy a imprimir esta variable y va a dar salida al valor asociado al nombre que es no. Ahora, hay dos formas en las que puedes seguir adelante y empezar con esto. Ahora, la forma manual, te voy a mostrar primero, que es que puedes seguir adelante y hacer clic en el icono que fluye en la parte superior izquierda. Entonces quieres ir a la terminal, y quieres abrir tu terminal. Bien, así que aquí lo tenemos. nuestra terminal aquí en el lado izquierdo. Y con esta consola de depuración, puedes seguir adelante y simplemente cambiarlo. Y lo que te recomiendo que hagas ahora es reabrir tu terminal A veces lleva un momento configurarlo. Así que siempre seguiría adelante y solo decía: Matar terminal. Entonces la voy a cerrar, y luego volvemos a terminal y luego la abrimos otra vez. Y aquí vamos. Bien, así que ahora podemos seguir adelante y comenzar Ahora, lo que vas a querer hacer es ejecutar tu archivo de script PySon según el nombre Entonces esto se llama Min Dot Pie, y podemos ver el directorio que tenemos configurado aquí. Entonces actualmente nuestro terminal está mirando al usuario aquí, que es Ono, en el escritorio en la carpeta Mi Proyecto, que es la carpeta que creamos aquí llamada Mi Proyecto. Y como pueden ver, también está disponible aquí, Mi Proyecto, y tenemos Min Dot Pi, que está dentro de esta carpeta Mi Proyecto. Vamos a querer hacer para ejecutar cualquier código que esté en este archivo py punto principal es el siguiente. Solo quieres escribir Python. Y entonces solo puedes referirte al nombre del archivo, que es el punto principal py. Pero todo lo que quieres hacer es decir PySon punto principal pi, y entrar, y ahí puedes ver que da salida a nuestro código para nosotros. Entonces esa es la forma más sencilla en la que puedes seguir adelante y ejecutar tu código PySon dentro del código Visual Studio y usando este terminal. Derecha. También podemos escribir claro y eso va a ayudar a despejar la terminal también. Entonces esa es la primera forma en la que puedes ejecutar código. Entonces es una especie de forma manual que se podría decir. Ahora, la manera más fácil es que podamos seguir adelante y ocultar este panel. Ahora verás si instalaste la extensión Python, ahora tendrás la oportunidad de pasar el cursor sobre el siguiente icono y ejecutar tu archivo Python Esto lo hace automáticamente por ti, per se. Simplemente podemos hacer click en Ejecutar PysonFle dando click sobre este icono, y eso nos va a abrir la terminal y ya vas a ver que va a ejecutar Aquí tenemos el pastel de punto principal, que se ejecutó y la salida aquí, que está en él. Esa es otra forma en la que puedes hacerlo. Hay dos maneras. Todo bien. Eso es, chicos. Así es como podemos seguir adelante y comenzar con el código de Visual Studio y establecer nuestras bases para nuestro proyecto PySon Así que ya podemos seguir adelante y ver aquí. Todo bien. Entonces así es como podemos seguir adelante y comenzar eso y poner todo en, como, en su lugar. 8. Python: instalación y configuración - MacOS: Hola a todos. Bienvenido a la siguiente lección, que va a estar enfocada en instalar PySon en un dispositivo macOS Lo primero que quieres hacer es dirigirte a la siguiente URL, que está en python.org forwardslash Descargas forwardlas Quieres asegurarte de dirigirte a esta URL. Después de ingresar eso en, serás redirigido a la siguiente página aquí, que se encuentra en la página de Descargas de Python Entonces quieres descargar PySon para que puedas hacer click sobre este botón aquí Eso nos va a descargar el asistente de configuración y podemos seguir adelante y abrirlo de la siguiente manera. Aquí hay un asistente de configuración. Sólo queremos continuar, continuar, reñir y estar de acuerdo con los términos. Entonces quieres decir instalar e ingresar tu contraseña e instalar este software en tu sistema. Todo bien. Ahí vamos. Podemos cerrar aquí lo siguiente. Ahí estamos. PySon se ha instalado correctamente en nuestro dispositivo Sólo podemos decir cerca. Sólo podemos decir mantener, eso está bien. Ahora lo que te recomiendo que hagas es dirigirte a tu ícono de Apple y simplemente reiniciar tu dispositivo macOS. Esto es solo para asegurar que todo esté configurado correctamente PySon en términos de variables de entorno y tal Después de hacerlo, lo que puedes hacer es dirigirte a tu launchpad y quieres buscar tu terminal Simplemente puedes escribir en terminal y abrirla. Este es el equivalente CMD en Windows para confirmar que PySon se ha instalado y la versión designada específicamente que has instalado, solo puedes decir PySon tres, space, dash dash version, Ahí estamos, podemos ver que la versión que queríamos instalar y la instalación de PySon ha sido un éxito ya que podemos ver la salida es la siguiente Eso es solo una confirmación para mostrar que PySon ha sido instalado en nuestro sistema Bien, así es todo para este video, es como puedes asegurarte de que Python esté instalado en tu dispositivo macOS. 9. Código VS: instalación y configuración - MacOS: Hola a todos. Bienvenido a la siguiente lección, que va a estar enfocada en descargar e instalar código de Visual Studio en nuestros dispositivos macOS. En primer lugar, quieres asegurarte de que estás en la siguiente página aquí, que es accesible si te diriges a URL y escribas el código visualstudio.com para slash Descarga tu URL, en la que serás redirigido a A continuación, lo que quieres hacer es que quieras seguir adelante e instalarlo para un Mac, que podamos seguir adelante y dar click en el siguiente icono. Eso va a descargar el asistente de configuración que necesitamos para acceder al código de Visual Studio. Sólo tenemos que darle unos momentos. Si por alguna razón la descarga no inicia por ti, puedes continuar y hacer clic en el enlace de descarga directa en su lugar. Solo dale un momento y ya veremos que está hecho y podemos seguir adelante y abrir el código de Visual Studio. Después de hacer clic en él, verás este aviso aquí y todo lo que quieres hacer ahora es abrirlo. El código de Visual Studio es una app descargada de Internet y queremos abrirla. Ahí estamos. Aquí lo tenemos. Este es el código de Visual Studio. Así es como puedes seguir adelante y configurar fácilmente este editor de codificación. 10. Cómo empezar con nuestro proyecto: MacOS: Hola a todos. Bienvenido a la siguiente lección que va a estar enfocada en comenzar con el código de Visual Studio para que podamos configurar nuestro PysonPject Lo primero que quiero que hagamos es minimizar el código de Visual Studio por el momento. Lo que vamos a hacer es ir a una cobertura y crear una nueva carpeta en nuestro escritorio, que albergará nuestro archivo PySon en su momento. Vamos a hacer click derecho y luego podemos decir nueva carpeta y tengo esta carpeta creada y voy a dar click sobre esto y cambiarle el nombre. Voy a llamarlo MP check. Puedes darle cualquier nombre que desees, ahí tenemos esa carpeta y queremos abrir esta carpeta en código de Visual Studio. Es para abrir el código de Visual Studio, maximizarlo. Entonces podemos ir y dar click en Archivo. Navegue hasta abrir la carpeta. Entonces queremos ir al escritorio porque ahí es donde creamos esa carpeta. Entonces podemos seleccionar esa carpeta llamada mi proyecto y decir open, y podemos cerrar este prompt y ahí podemos ver que ahora tenemos acceso a esta carpeta. Perfecto. Bien hecho. Ahora queremos crear nuestro archivo PysonScripting, se podría Aquí es donde vamos a agregar todo nuestro código PySon y también vamos a ejecutar nuestro código basado en el contenido del archivo S. Eso va a estar dentro de nuestra carpeta de proyectos aquí. Puedes pasar el cursor sobre él y luego verás un ícono que te permitirá crear un nuevo archivo Quieres hacer clic en eso. Dale un nombre a tu archivo aquí. Voy a llamarlo punto principal py, por ejemplo. Necesito ser un dotpi que código de Visual Studio sepa que este va a ser un archivo basado en Python y podamos presionar Enter Ahí lo tenemos, el archivo principal punto Pi. Ahora, como es la primera vez que estamos usando PySon en el código de Visual Studio, vamos a tener un prompter que va a sugerir que instalemos la extensión Python recomendada de Microsoft para el lenguaje Python Esta extensión solo nos da algunas características adicionales que podemos utilizar y, en general hace que nuestra experiencia con la codificación de Python en código de Visual Studio sea mucho más competente y agradable Podemos decir instalar. Eso va a instalar la extensión. Ahí vamos. Se ha instalado, por lo que podemos cerrar la siguiente página aquí y podemos navegar hasta el icono aquí, que es Explorer. Eso solo va a mostrar nuestro directorio que, por supuesto, nuestros archivos en nuestro directorio. También podemos cerrar Explorer aquí para maximizar el archivo que tenemos aquí ya abierto. En realidad es algo que también quería seguir adelante y mencionar. Todo bien. Sigamos adelante y ejecutemos algún código y realicemos algunas pruebas. Ahora, lo primero que quiero, por supuesto, hacer es simplemente seguir adelante y crear un programa sencillo. Voy a decir nombre igual, y sólo voy a decir honor. Estoy creando un nombre de nombre de variable y asignándolo al valor del honor En la siguiente diapositiva, voy a decir print y quiero sacar dicho valor. Sigamos adelante y hagamos eso. Dentro de la declaración de impresión, voy a poner en nombre Ahora, lo que puedes hacer es que puedas seguir adelante y guardar tu código aquí, y luego podemos seguir adelante y ejecutarlo dando clic en el siguiente icono aquí para ejecutar el PisonFle Ahí vamos. Podemos ver que ha ejecutado el archivo en consecuencia aquí. También puedo minimizar esta terminal de aquí solo para darte un poco más de espacio. Podemos ver la salida ahí, que era ni y se ha ejecutado con éxito. También podemos ver que se configura automáticamente nuestro pasado para nosotros. Estamos corriendo dentro del directorio Mi proyecto, y está ejecutando el archivo punto pi principal aquí específicamente para generar cualquier código que se haya enviado aquí. Y también puedes borrar tu terminal aquí escribiendo claro y eso lo borra por ti También puedes seguir adelante y cerrarlo. Ahora esa es la forma automatizada de seguir adelante y ejecutar tus programas en código de Visual Studio. Lo que también puedes hacer es que puedes seguir adelante y dar click en el directorio de la terminal aquí y decir nueva terminal, y eso la va a abrir aquí de la siguiente manera. Lo que podemos hacer es, por supuesto, solo podemos darnos algo de espacio aquí y también puedes ejecutar los comandos aquí también. Esa es otra forma de hacerlo. Si quieres seguir adelante y ejecutarlo en la terminal aquí lugar de seguir adelante y decir ejecutar el archivo Python, necesitas hacerlo manualmente de acuerdo con el nombre del archivo. Pero vas a querer decir PySon tres, espacio, y luego tu nombre de archivo Aquí voy a decir punto principal pi, y Enter. Ahí va a dar salida en consecuencia de la siguiente manera. Correcto, así es como puedes ir en una cobertura y utilizar el terminal y el código de Visual Studio Y podemos teclear claro aquí y eso nos despejará la terminal. Ahora, al menos recomendaría que prefieras simplemente hacer clic en la opción Ejecutar PysonFle aquí para que se ejecute por usted, luego tománicamente ingrese nombre del archivo Esto solo te ahorrará algo de tiempo y tal. Muy bien chicos, eso. Así es como podemos comenzar con PySon y cómo podemos comenzar más específicamente con PySon en el código de Visual Studio 11. Mejora tu flujo de trabajo con Code Runner - [Opcional]: Hola a todos. Bienvenido a la siguiente lección, que se centrará en mejorar nuestro flujo de trabajo utilizando la extensión del ejecutor de código. Ahora bien, esta va a ser una lección opcional. No tienes que hacerlo si no quieres. Pero digamos por ejemplo, estás trabajando con tu terminal y quieres tener una salida más limpia. En lugar de ver esos archivos desordenados cada vez y luego la salida del código que realmente estás esperando, entonces el corredor de código realmente puede ayudar a que eso sea mucho más fácil y mucho más agradable a la vista, debería decir En lugar de ver todos esos pases de archivos y nombres incluidos con la salida y desea limpiar la salida, puede usar el ejecutor de código. Así que sigamos adelante y comencemos. Bien, entonces tenemos que navegar hasta la extensión, así verás designado por el ícono que fluye. Ahora podemos simplemente dar click en este campo de entrada, y solo voy a quitar lo que hay en él. Y queremos buscar código runner. Sólo voy a escribir, por supuesto, el código que fluye. Corredor. Y vamos a ver éste de aquí mismo. Entonces verás que tendrá este logo dot run, así que code runner, y quieres instalar esta extensión en particular. Bien. Así que vamos a darle un momento más o menos para que se instale, y ahí vamos. Podemos ver que efectivamente se ha instalado en nuestro sistema. Bien, para que podamos cerrar esa extensión ahora, de cabeza atrás, y la tenemos en su lugar. Ahora, hay algunos ajustes que necesitamos confirmar y asegurarnos de que tenemos en su lugar para tener esa salida limpia. Entonces sigamos adelante y hagamos precisamente eso. Entonces quieres navegar hasta el siguiente ícono. Entonces quieres ir a Archivo, luego puedes desplazarte hacia abajo hasta que veas las preferencias. Entonces quieres pasar el cursor sobre las preferencias, y luego quieres hacer clic en la configuración Así que adelante y da click en eso. Eso te va a llevar a la siguiente zona aquí. Entonces aquí por configuración de búsqueda, podemos simplemente seguir adelante y poner en código. Bien. Y podemos simplemente poner en Runner. Bien, ahí vamos. Bien, entonces tenemos algunos ajustes aquí. Entonces, antes que nada, tenemos corredor de código claro salida anterior. Por lo que queremos asegurarnos de que esto ha sido verificado. Eso solo va a asegurar que muestre la salida más fresca cada vez que hagamos una ejecución de código Bien, así que sigamos adelante y continuemos. Entonces solo queremos buscar las opciones clave ahí. ¿Bien? Para que podamos dejar todo como está. Sólo quieres enfocarte en las que te he mencionado. Aquí, también tenemos código ejecutar y ejecutar en terminal. ¿Bien? Quieres asegurarte de que esto ha sido desmarcado, que no está marcado, así que simplemente podemos dejarlo en blanco como está Entonces ese es otro que quieres para asegurarte de haber comprobado. Bien, y claro, podemos ver que también tenemos guardar archivo antes de ejecutar. Entonces eso va a asegurar que queremos guardar el archivo actual antes de ejecutarlo. Y lo que quieres hacer por este de aquí es que quieres asegurarte de que se mantenga a la verdad. Y entonces tenemos mensaje de ejecución de show, ¿de acuerdo? Así que no queremos ver nada como correr o abajo ni nada por el estilo. Queremos que sea claro, limpio y sencillo. Así que asegúrate de que eso haya sido desmarcado. Así que solo quieres verificar esas cuatro opciones que he entrado en detalles ahora solo para asegurarte de que todo esté despejado y organizado para que el corredor de código funcione en su lugar. Bien, así que sigamos adelante y cerremos esto ahora. Ten nuestro código aquí, pero ahora para ejecutar realmente code runner, lo que puedes hacer, es muy sencillo. También vamos a hacer clic en Ejecutar, pero quieres hacer clic en esta flecha desplegable aquí, y verás ahora que tenemos una opción para decir ejecutar código en lugar de ejecutar Pis y archivo Entonces quieres dar click en Ejecutar código, y ahí vamos. Tenemos esa salida limpia, sencilla. No se puede ver más desorden. Es mucho más fácil de usar, y ahora está en su lugar como debería estar. Bien, entonces lo que voy a hacer ahora es simplemente cambiar ese valor, y solo voy a decir John. Y ahora si sigo adelante y de forma manual basta con hacer clic en la opción aquí, van a ver que el predeterminado será el código de ejecución ahora, y habrá Ha. Bien, así que ahí vamos. Así es como puedes seguir adelante y utilizar el corredor de código. Entonces puedes ver que nos da una salida limpia, mucho más fácil a la vista también, y mucho mejor en general para que lo utilicemos de tal manera. Muy bien, chicos. 12. Expresiones regulares: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en las expresiones regulares. Entonces echemos un vistazo. Muy bien, así expresiones regulares, comúnmente referidas como rechazos Entonces, las expresiones regulares en Python se utilizan básicamente para identificar patrones en el texto, como en números, palabras, o incluso en una dirección de correo electrónico, por ejemplo. Ahora, en lugar de buscar coincidencias exactas, rejec sigue reglas específicas para detectar patrones específicos per Ahora, PySon ya nos proporciona un módulo incorporado llamado RE para trabajar con expresiones regulares, llave inglesa Entonces eso es suficiente para la visión general teórica. Sigamos adelante y apliquemos nuestros conocimientos en la utilización de expresiones regulares en PySon 13. Trabajar con expresiones regulares - [Laboratorio]: Hola a todos, y bienvenidos al próximo ejercicio práctico de laboratorio, que se centrará en trabajar con expresiones regulares comúnmente conocidas como rejec dentro Sigamos adelante y comencemos. Vamos a quitar lo que tenemos aquí y sólo voy a alejar un poco de tabulación. Derecha. Bien, entonces lo primero que vamos a querer hacer es simplemente repasar qué tipo de ejemplos vamos a repasar con expresiones regulares. Entonces, para tener una mejor comprensión de las expresiones regulares, voy a pasar por algunos ejemplos y ejercicios con Z y van a ser a saber los siguientes. Te voy a mostrar cómo puedes encontrar todos los dígitos, es decir, números en un determinado conjunto de texto, cómo reemplazar los dígitos con ciertos caracteres, y también cómo verificar si una cadena comienza con el dígito. Esto te ayudará a tener una mejor comprensión de cómo puedes usar las funciones que vienen con el módulo RE y tal. En fin, sigamos adelante y empecemos. Entonces, en todos los ejemplos, necesitamos antes que nada, importar el módulo RE, que viene con muchas funciones integradas junto con él. Así podemos ver Importar RE. Derecha. Ahora necesitamos agregar en algún ext, y el primer ejercicio va a enfocarse en encontrar todos los números o dígitos en un conjunto dado de checkt Entonces voy a decir ext, iguales, y aquí entre comillas, voy a decir que tengo tres manzanas. Y dos pares. Ese es mi ejemplo. Y como pueden ver ahí, tengo dos dígitos. Tengo tres, y tengo dos. Entonces, claro, queremos extraer dichos valores, técnicamente. Entonces necesitamos especificar un patrón. Ahora, el nombre de la variable aquí, puedes dar cualquier nombre que desees. Sin embargo, lo estoy llamando patrón porque ese es esencialmente el patrón que voy a configurarlo como. Ahora, siempre vas a querer comenzar con R para tu expresión aquí, la R antes de una cadena dada va a asegurar que la cadena sea una cadena sin procesar, lo que significa que todas las barras inversas se tratan normalmente en lugar de como secuencias de escape Entonces agregaremos en nuestras cotizaciones y luego la diagonal hacia atrás D. Esa va a ser la parte importante que necesitamos agregar aquí Ahora bien, esta diagonal D de aquí, es, por supuesto, va a ser una expresión regular que va a igualar contra cualquier dígito Eso es lo que necesitamos antes que nada, especificar lo siguiente que vamos a querer hacer es que vamos a querer especificar otra variable, podemos llamar a estos números y vamos a utilizar el módulo R E de vez especificar lo siguiente que vamos a querer hacer es que vamos a querer especificar otra variable, podemos llamar a estos números y vamos a utilizar el módulo R E vamos a invocar el find en cuando vamos a invocar el find o función que viene incorporado con el módulo RE, y vamos a poner en dos parámetros Primero será patrón y luego texto. Entonces, para reiterar esta línea aquí sobre patrón, esto es para encontrar todos los dígitos en un conjunto dado de texto, que va a ser este texto aquí. Y lo que estamos haciendo es usar el hallazgo o función para hacer precisamente eso. Entonces el find o función va a querer conocer el patrón y luego las comprobaciones para aplicar esto también. Entonces el patrón va a estar basado en los dígitos, esta diagonal D para encontrar y hacer coincidir dígitos, y queremos encontrar todos los dígitos en este texto que dice que tengo tres manzanas y dos pares Puedes s para ti mismo, es por supuesto, va a dar salida tres y dos. Confirmemos esto. Entonces puedes decir imprimir números y ejecutar tu código. Aquí se puede ver que da salida tres y dos. Ahí lo tenemos. Así es como podemos encontrar dígitos en un conjunto de texto dado. Ahora, ajustemos esto ahora y voy a alargarlo. Voy a decir que tengo tres manzanas, dos pares, y cuatro naranjas Guarda el código. Corre. Ahora se puede ver que da salida a tres, dos y cuatro. Bien. Para que pueda ver allí, recogerá y verificará dónde puede recuperar todos los números dados utilizando la función find all. Ahora, digamos por el bien de la discusión, queremos hacer algo diferente. Digamos que queremos reemplazar los dígitos por un carácter específico. Digamos con una etiqueta hash. No queremos que se filtre el número o número de teléfono de alguien filtre el número o número de teléfono de Sólo queremos verlo siendo, se podría decir, oculto por hashtags. Entonces sigamos adelante y hagamos eso. Así podemos eliminar este código por ahora. Voy a quitar eso, y voy a decir texto de nuevo. Y aquí voy a decir mi número es, y voy a decir uno, dos, tres, cuatro, cinco, como ejemplo. Entonces el patrón que vamos a establecer. Así que comillas dobles, barras invertidas D. Así que vamos a buscar cualquier patrón que coincida con los dígitos Entonces podemos decir nuevo texto de subrayado porque vamos a modificar este texto para decir que mi número es, y luego vamos a agregar un carácter específico para ocultar estos números, por ejemplo Bien. Entonces vamos a decir RE, vamos a utilizar el módulo punto. La función que usaremos esta vez se llama sub. Entonces sub es una función, que comúnmente se conoce como sustituto o sustitución, pero el nombre de la función real es sub. Por lo que queremos esencialmente sustituir un valor alternativo para reemplazar un dígito per se. Entonces necesitamos aplicar el patrón que queremos usar para hacer coincidir dígitos. Y donde veamos dígitos, queremos reemplazarlo o modificarlo con una etiqueta hash en el texto dado. Como puedes esperar ahora lo que va a pasar es que dirá mi número es, y va a mostrar hashtag, hashtag, hashtag, hashtag y hashtag. Si dijéramos imprimir y luego nuevo texto subrayado y ejecutar ese código, podemos ver aquí en las salidas, mi número es hashtag, hashtag, hash, hasta hashtag Ahora, digamos que sólo pongo uno y dos. Y volvemos a correr, solo muestro los dos primeros hashtags. Bien, entonces esta es una muy buena manera si quieres sustituir o reemplazar dígitos o números dentro de un conjunto de texto dado. Utilizaría la subfunción o la función de sustitución. Ahora también puedo hacer esto más largo y correr eso, y se puede ver que sólo va a hacer lo siguiente. Ahora, también puedo cambiar esto a, digamos, símbolo de $1, así puedo cambiarlo a eso y pongámoslo al original, y hace lo mismo. Entonces así es como se puede sustituir en consecuencia. Bien, así es como podemos reemplazar los dígitos. Ahora bien, lo último que quiero mostrarte es cómo puedes verificar si una cadena empieza con un dígito, así que si empieza con un número. Entonces hagámoslo. Vamos a quitar esto. Bien, texto. Y lo que voy a hacer ahora es voy a decir tres pares en la canasta. Bien. Entonces podemos ver aquí ya que la cadena empieza con un dígito. Todo bien. Entonces el patrón. Bien, vamos a tener R, y vamos a tener que poner aquí un carácter especial, así que va a ser una flecha que va hacia arriba o como el poder dos especie de símbolo. Y eso va a significar el inicio de la cuerda. Entonces al inicio de la cadena, quiero buscar cualquier dígito coincidente de ahí la barras inversas y D. Así es como puedes aplicar estos caracteres juntos en términos de las Entonces, esencialmente, esta línea ahora de código va a coincidir si la cadena comienza con el dígito y vamos a aplicar esto ahora. Una declaración if. Entonces voy a decir que coincido con puntos, así que estamos usando la función de coincidencia, el patrón y la verificación. Entonces vamos a comprobar si este patrón en particular coincide en este texto. Entonces, en otras palabras, si este texto aquí comienza con un dígito, según el patrón, entonces vamos a generar una respuesta específica. Entonces como esta es una declaración if, voy a agregar en un kern al final, y luego puedo decir print, sí, empieza con un dígito Si por alguna razón no lo hace, puedo decir más e imprimir. No, no empieza con un dígito. Bien, así que sigamos adelante y veamos. Entonces en este caso, podemos ver que comienza como un dígito, por lo que debería devolver la declaración aquí. Sí, empieza con un dígito ya que es cierto. Así que vamos a ejecutar esto y ya podemos ver aquí. Dice, sí, empieza con un dígito. Ahora déjame cambiar y quitar los tres y solo decir, empareja en una canasta y correr. Ahí va a sacar aquí el enunciado que, claro, dice que no, no empieza con un dígito. Bien. Así es como también podemos usar la función match. Ahora bien, cuando estamos trabajando con expresiones regulares, hay muchas funciones que vienen con R E, pero esto es solo un poco de tés ae para que puedas tener una comprensión de las expresiones regulares y cómo puedes aplicarlas de acuerdo a un patrón dado que decidas establecer en tu propio código. Bien, chicos. Entonces eso es todo para este ejercicio práctico particular. 14. Impresión de valores múltiples: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en imprimir múltiples valores. Echemos un vistazo. Derecha. Ahora, cuando estamos imprimiendo múltiples valores, lo que puede hacer es utilizar la concatenación de cadenas y la concatenación de cadenas es esencialmente el proceso de combinar múltiples Ahora, la forma más común concatenar cadenas es usando el operador plus y luego agregar espacios entre sus cadenas para Ahora, lo que también puedes hacer es usar una coma en su lugar dentro de tu función de impresión, y luego puedes mostrar múltiples valores, y esto automáticamente va a agregar esos espacios por ti, y esto puede hacerlo mucho más legible y también ahorrarte algo de tiempo Entonces déjame mostrarte gráficamente lo que quiero decir con esto. Entonces digamos, por ejemplo, tenemos este programa. Muy sencillo. dos variables que hemos definido aquí, nombre y apellido, tomando en su nombre y apellido, por supuesto, John y Doe Entonces lo que necesitarás hacer normalmente es crear otra variable. En este caso, el nombre completo sería apropiado. Y luego para combinar nombre y apellido juntos, lo que tendrás que hacer es decir nombre y luego más y luego agregar en el espacio con comillas y luego más otra vez, y luego el apellido. Eso va a combinar a John y hacer juntos y también dejar un espacio entre ellos ya que agregaste en esas dos citas. Como puede ver, está agregando el operador plus aquí para la concatenación de cadenas Cuando imprima el nombre completo, va a imprimir John space do en un bonito formato. Sin embargo, esto puede ser un poco tedioso dependiendo de la situación y el contexto Una manera más fácil sería simplemente seguir adelante y agregar en su función de impresión y luego simplemente agregar directamente su nombre y apellido juntos, separarlos por una coma, eso también va a imprimir exactamente el mismo resultado en una menor cantidad de código que haya estado en su lugar Entonces eso es algo que quería mencionar aquí que si estás imprimiendo tus valores y están siendo de salida, también puedes hacerlo mucho mejor y más fácil para ti mismo si solo agregas una coma dependiendo de ciertas circunstancias Ahora, hay algo más que quiero mencionar sobre este tema. Entonces, para asegurar que te sientas más cómodo con el uso de ambas opciones, voy a usar tanto el operador plus para la concatenación de cadenas como también coma a lo largo Bien. Ahora bien, la razón por la que estoy haciendo esto es solo para ayudar a solidificar tus habilidades con el aprendizaje de cosas nuevas, y para aplicar todo para que puedas aprender más Así que solo quiero, ya sabes, desafiarte un poco solo a, ya sabes, realmente enfocarte en las lecciones que tenemos a mano y a sentirte cómodo no solo con usar un tipo de método, sino también sentirte cómodo siguiendo otros métodos también. Entonces en este caso, seguir la concatenación de cadenas, reconocerla, aplicarla Y luego en otro contexto dado, para ser como, Bien, en este caso, necesito usar una coma o tengo ganas de usar una coma, pero también lo entiendo Entonces esto es solo un poco de mi perspicacia en términos de cómo debes ir imprimiendo tus valores y demás. Lección muy sencilla, ¿debería decir? También voy a dar seguimiento a esto con un breve ejercicio práctico también. Es muy fácil, pero solo quiero que practiquemos y nos pongamos cómodos trabajando en otros métodos y técnicas. 15. Trabajar con diferentes resultados - [Laboratorio]: Hola a todos. Bienvenido al próximo ejercicio práctico de laboratorio, que va a estar enfocado en imprimir múltiples valores. Solo vamos a hacer un poco de práctica sobre cocnación de cadenas y también cómo podemos utilizar una coma en el contexto apropiado también, solo para guardarnos algunas líneas de código y tal y también para mejorar la legibilidad de nuestro Empecemos. Para empezar , lo mantendremos sencillo. Diré nombre de primer subrayado, igual, diré honor, y diré apellido subrayado, y diré Pretorio Bien, entonces con la concatenación de cadenas, sería mejor entonces en este caso dado definir otra variable, a que me referiré como nombre completo igual, y luego diré primero nombre de subrayado Entonces estoy usando el operador plus y luego agrego en un espacio con las comillas designadas plus nuevamente, y luego quiero agregarle un apellido, así que no va a mostrar ningún espacio Pretoris Entonces puedo decir imprimir. Y voy a incluir el nombre completo aquí dentro del paren ss y eso va a imprimir en un Pretorius en Ahí lo tenemos. Como podemos ver, está imprimiendo lo siguiente y mi nombre completo. Ahora, digamos que no quiero agregar en una concatenación de cadenas y quiero que esto sea mucho más simple con menos líneas de código Solo puedo quitar lo siguiente y solo decir en la función print dentro de príncipes, primero underscrena seguido de una coma y luego decir último undersCun y ejecutar el código e imprime exactamente el mismo resultado y salida en el salida Puedes ver lo fácil que es que te ahorra mucho tiempo. Pero claro, también depende de la situación. Sigamos adelante y eliminemos esto. Vayamos por otro ejemplo. Digamos que tenemos a Siti y aquí voy a decir Ciudad del Cabo Y vamos a tener país, y voy a decir Sudáfrica. Entonces tengo dos variables definidas. Así que tengo eso en su lugar. Ahora lo siguiente que voy a querer seguir adelante y hacer es especificar una variable aquí. Así que puedo simplemente seguir adelante y decir ubicación, es igual, y puedo decir ciudad más, agregar en el espacio, más, y voy a tener país. Entonces puedo decir ubicación de impresión. Ejecutar el código, Ciudad del Cabo Sudáfrica. Todo bien. Ahora, veamos si podemos simplificar esto con solo usar una coma, así podemos simplemente eliminar siguiente y solo podemos decir print Ciudad seguida por país. Ejecuta el código, y luego tenemos Kick towns of Africa. Entonces ahí vamos. También hemos guardado algunas líneas de código allí también. Muy bien, para que veas que es mucho legible en este ejemplo cuando estamos usando una coma Bien, bien, vaya. Así que eso es todo para este práctico ejercicio de laboratorio. Es bastante corto, pero solo quería darte un poco de práctica aquí. Así que ten en cuenta aquí, mira el programa en el que estás trabajando y los contextos y luego decide lo que sientes que será apropiado. Bien, vete. Entonces eso es todo para este ejercicio práctico de laboratorio. 16. Enunciados de casos de coincidencia: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en las declaraciones de casos coincidentes. Entonces echemos un vistazo. Entonces probablemente te estés preguntando, Bien, ¿qué es un matchcase Entonces, una declaración match ka funciona como una sentencia switch en Java y C si tienes alguna experiencia con esos lenguajes de programación. Entonces, esencialmente, esta sentencia MatchK va a verificar un valor contra varios casos, y luego lo que va a hacer, va a ejecutar entonces el bloque coincidente que encuentra en aquellos casos que ha coincidido Ahora bien, a diferencia de la declaración I ELF que tenemos en PySon, va a ofrecer una coincidencia de patrones más limpia y legible Entonces es muy similar a los condicionales I, podría decir, hasta cierto punto, por supuesto, ahora, también puede hacer coincidir listas, tuplas y objetos, y no solo números aleatorios y cadenas Entonces podemos ver que hay un rango muy grande cuando está utilizando una declaración de caso coincidente. Ahora, déjeme seguir adelante y explicar esto en un formato visual, así tendría más sentido entender. Entonces aquí hay un ejemplo práctico. Digamos que queremos hacer un programa de verificación de color muy simple. Por lo que queremos comprobar a qué se le asigna color y tal. Entonces aquí en este programa, podemos ver que el color que se ha asignado es el rojo. Entonces vamos a estar utilizando la declaración de coincidencia aquí. Entonces vamos a igualar según el valor del color. Ahora, el color es rojo. Entonces vamos a tener casos individuales. Entonces primero, tendremos nuestro partido para el color. Entonces vamos a tener un caso y este caso puede ser cualquier cosa. Entonces en este caso, el caso va a ser rojo. Y si el color coincide la caja del rojo según su valor asociado, entonces va a imprimir el color es rojo. Podemos tener otro caso aquí que sea azul para comprobar si el color designado es azul, y también tenemos un tipo especial de frase clave aquí donde tenemos en caso y luego subrayado El subrayado es muy similar a una declaración en si condicionales Si el caso está arriba, no aplique, entonces va a imprimir otra opción aquí, que va a ser de color desconocido. En este caso, tenemos rojo, y estamos poniendo en dos casos separados para comprobar si el color es rojo o azul. Ahora bien, si por ejemplo, el color es verde, morado, gris, etcétera, entonces va a ejecutar el bloque asociado al subrayado del caso y va a imprimir color desconocido Intenta ver las similitudes con las declaraciones I Elef y L en Python para tener una idea aproximada de cómo funciona este caso de coincidencia Todo bien. Muy bien chicos. Eso es todo para esta lección teórica sobre las declaraciones del partido K. Vamos a tener un ejercicio práctico de laboratorio, vamos a bucear más profundo y aprender haciendo. 17. Trabajar con declaraciones de casos de coincidencia: [Laboratorio]: Hola a todos y bienvenidos al próximo ejercicio práctico de laboratorio, que se centrará en trabajar con declaraciones de casos coincidentes en Hyson Así que comencemos. Mantengamos nuestro primer programa muy sencillo. Voy a definir una variable, y voy a llamar a este color, y voy a asignar eso al color del rojo. Entonces quiero armar mi caso de partido. Entonces voy a decir partido. Y quiero que esto esté basado en el color. Entonces voy a estar emparejando colores. Y después quiero precisar los casos. Los casos van a ser los valores explícitos que se pueden asociar con la variable que se está emparejando aquí, en este caso, el color. Entonces podemos decir caso, por ejemplo, rojo, colon. Y entonces si el valor del color coincide con el caso del rojo, entonces podemos imprimir una declaración aquí y decir print el color es rojo. Ahora, digamos, por ejemplo, el color es el azul. Entonces voy a decir caso, y vamos a manejar si es azul. Entonces diríamos print, el color es azul. Ahora, digamos por el bien del argumento, el valor asociado no es rojo ni azul, y queremos atender a cualquier otra cosa. Entonces es como una declaración. Podemos decir caso, subrayado, dos puntos, y luego podemos decir imprimir El color no es rojo ni azul. Eso podemos decir. Bien, así que tenemos eso listo. Ahora bien, si echamos un vistazo aquí a nuestro código, podemos ver que la salida aquí, eso es correcto, será el color es rojo porque el caso aquí se establece en rojo, y eso coincide con el valor de lo estamos emparejando valor asociado. Entonces si ejecuto este código, podemos ver aquí que esa salida al final el color es rojo. Ahora déjenme cambiar esto a azul. Guarde mi código y ejecútelo. Ahora, dice que el color es azul. Ahora, permítanme poner en un color diferente que no sea rojo ni azul, esencialmente lo que va a pasar entonces es el caso aquí con este subrayado especial, entonces va a desencadenar y sacar la siguiente declaración, que es el color no es rojo ni azul Déjame cambiar esto a verde, por ejemplo, y ejecutar el código, y va a decir que el color no es rojo ni azul. Bien. Entonces así es como podemos implementar una declaración de caso de coincidencia muy simple y cómo podemos integrarla. Todo bien. Entonces así es como podemos seguir adelante y configurarlo en consecuencia. Lo que quiero que hagamos ahora es que vayamos un poco más allá y quiero creamos un programa que va a tomar un valor de entrada. Entonces vamos a ingresar un valor específico y luego el caso saldrá de acuerdo con el valor que hayamos ingresado por los casos que hemos configurado en la sentencia match. Bien, así que vamos a continuar y crear un programa que vaya a comprobar de dónde es alguien. Dónde se basa la nacionalidad. Entonces voy a crear una declaración de impresión simple, antes que nada, así que voy a decir print, y voy a plantear una pregunta. Entonces voy a decir, de dónde eres. Bien, muy sencillo. Entonces queremos hacer uso de una función de entrada que va a ser asignada a una variable conocida como país, y vamos a hacer coincidir país en nuestras declaraciones de casos coincidentes. Entonces voy a decir país es igual, y voy a decir entrada, así como así. Entonces podemos seguir adelante y configurar nuestras declaraciones de casos de coincidencia. Entonces voy a seguir adelante y decir match country. Y luego voy a meter algunos casos. Entonces voy a decir caso, y predigo que tendremos Sudáfrica, por ejemplo, entonces el resultado de impresión aquí será, usted es de Sudáfrica. Voy a ser un poco descarado aquí, y no quiero seguir teniendo diferentes casos Sólo voy a tener algo así como un caso se. Entonces voy a decir caso, subrayado, dos puntos, y voy a decir imprimir aquí No eres de Sudáfrica. Es muy sencillo. Como puedes ver, vamos a tener una consulta que va a estar en la salida que dice, de dónde eres cuando ejecutamos nuestro código. Entonces vamos a tener ingresar el país del que somos, y ese valor que ingresamos se asignará al país variable. Entonces vamos a aplicar esto a nuestro caso de partido aquí. Vamos a decir match country. Entonces el primer caso que vamos a verificar es si el usuario ingresó Sudáfrica. Si lo hicieron y coincide con entrada, vamos a imprimir tú eres de Sudáfrica y si ese usuario ingresó algo más, va a decir que no eras de Sudáfrica. Bien, ahora, lo que vamos a querer hacer en este caso, es que vamos a querer ejecutar el PysonFle y no Ahora, con el código Run aquí con el corredor de código, ¿de acuerdo? No va a funcionar tan bien porque run code solo nos da salida, sino porque tenemos una entrada que queremos introducir en algunos datos, no tenemos más remedio que seguir adelante y ejecutar el archivo PySon, pero volveremos a cambiar esto cerca del final. ¿Bien? Entonces voy a decir ejecutar PysonFle que va a dar salida a esta consola de depuración aquí Y ahí dice, ¿de dónde eres? Bien, entonces aquí, sólo voy a decir, Sudáfrica, dice, Eres de Sudáfrica. Entonces es imprimir lo que tenemos configurado aquí. Bien, así que sigamos adelante y volvamos a ejecutar el programa y esta vez, lo que voy a hacer es que voy a poner algo que sea diferente a Sudáfrica. Entonces voy a ejecutar el programa otra vez. Y dice, claro, de dónde eres. Entonces aquí, esta vez, voy a decir USA. Entra y dice, No eres de Sudáfrica. Entonces evalúa este resultado aquí donde dice, no eres de Sudáfrica en este caso, porque este caso aquí de Sudáfrica es falso Bien. Entonces así es como esencialmente podemos ir a una cobertura e integrar esta funcionalidad, para que también podamos probar de acuerdo con los valores de entrada y utilizar nuestros casos en consecuencia Bien, chicos. Entonces, eso es todo. Todo lo que quiero hacer ahora es cambiar esto para ejecutar código, y solo podemos detenerlo por ahora. Ahí estamos. Bien, entonces ahora vamos a tener código de ejecución, y solo podemos realizar una prueba simple para asegurarnos de que eso está bien. Sólo voy a decir nombre sano. Entonces hagamos una prueba final aquí, y vamos a decir caso de nombre de coincidencia, podemos decir John. Podría decir imprenta. Hola, John, y luego voy a decir el caso aquí y eso va a ser honor y voy a decir honor impreso. Entonces si no es ninguno de ellos, solo podemos decir imprimir hola, amigo. Bien, así que sigamos adelante y asegurémonos de que estamos ejecutando código, y ahí lo tenemos. El resultado aquí es alto no, porque eso es lo que establecemos aquí como valor asociado. Muy bien, chicos. Entonces eso es todo para este ejercicio de laboratorio en particular sobre cómo puede usar las declaraciones de coincidencia K. Como pueden ver, es muy similar a nuestras declaraciones I ELF y s. Sin embargo, hay un poco de diferencia, pero es muy útil, y definitivamente recomendaré utilizarla en tus programas si puedes. Bien, así que eso es todo para este ejercicio práctico de laboratorio. 18. Módulos: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en los módulos. Ahora, con los módulos aquí, esto va a ser una especie de lección de actualización, bien, ya que es un poco amigable para principiantes, se podría decir, pero sí quiero profundizar un poco más en los ejercicios prácticos de laboratorio cuando me voy a centrar en crear tus propios módulos y luego también usar los módulos incorporados de Pierson Entonces solo quiero mencionar el por adelantado para que estés enterado Bien, entonces módulos. Entonces como repaso, solo quiero pasar por lo básico Entonces un módulo es esencialmente una extensión PysonFle punto PYS que almacena funciones, variables y clases para su reutilización en otros archivos, muy similar a una caja de herramientas, se podría decir, en términos de una perspectiva de Ahora, en lugar de repetir código, puedes definirlo en un módulo y acceder a él siempre que lo necesites. Ahora, lo que también puedes hacer es crear tus propios módulos o puedes ingresar los integrados que vienen con PySon por defecto Ahora, en esa nota, una lista completa de todos los módulos PySon integrados en puede encontrar una lista completa de todos los módulos PySon integrados en la siguiente URL, y esto es algo que voy a profundizar brevemente en la siguiente lección Pero yo sólo quiero hacerte consciente aquí. Entonces, lo principal a tener realmente en cuenta, aparte de la definición de un módulo es que puedes crear tus propios módulos o puedes usar los módulos integrados que vienen con PySon por sí mismos Bien, así que eso es todo lo que quiero mencionar en los módulos desde un punto de vista teórico 19. Navegación por el índice de módulos de Python: Hola a todos. Bienvenido a la siguiente lección, que va a ser una lección muy corta solo para darte un descuido sobre el índice del módulo PySon Ahora bien, esto es algo que mencioné en la lección anterior cerca del final cuando quieres profundizar en todos los módulos integrados que vienen con PySon fuera de la caja Aquí está el índice PySon Module. Aquí puedes leer todo sobre el módulo PySon incorporado. También quiero darles algo de claridad en una lección previa que cubrimos donde usamos un módulo específico. Si recuerda en la lección de expresiones regulares y más específicamente en el ejercicio práctico de laboratorio para ese tema, utilizamos el módulo RE para expresiones regulares. Técnicamente aquí, si tuvieras que seguir adelante y escribir RE, puedes decir ir, y luego puedes desplazarte hacia abajo en este glosario y aquí puedes ver que tenemos este módulo RE PySon aquí, la operación de expresión regular, y puedes por supuesto, dar seguir adelante y escribir RE, puedes decir ir, y luego puedes desplazarte hacia abajo en este glosario y aquí puedes ver que tenemos este módulo RE PySon aquí, la operación de expresión regular, click en Puedes leer más sobre ese módulo que utilizamos, que es un módulo Python incorporado, no uno personalizado. Sólo un poco de información que quería compartir con ustedes. Así es como también puedes leer un poco más para aquellos que estén interesados en simplemente navegar un poco a través de algunos de los conceptos y módulos disponibles. 20. Integrar módulos personalizados e incorporados: [Lab]: Hola a todos, y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en trabajar con métodos personalizados y también métodos incorporados. Así que sigamos adelante y comencemos. Ahora, lo primero que quieres hacer para crear tu primer módulo en Python es que quieres dirigirte a Explorer, y luego puedes ver en el lado izquierdo que tienes tus proyectos. Entonces mi proyecto, y dentro de eso, tenemos nuestro archivo principal dot py. Ahora queremos almacenar la funcionalidad dentro de nuestro módulo en otro archivo. Ahora bien, dependiendo de la lógica que tengas en el archivo Said, lo mejor sería mantenerlo apropiado a lo que planeas poner en el archivo Said. Entonces voy a pasar el cursor sobre mi proyecto aquí y decir nuevo archivo, y voy a llamar a este saludo punto pi Ahora puedes ver que tengo una pila de puntos de saludo y un archivo py de punto principal dentro de mi proyecto. Entonces comencemos. Todo bien. Ahora bien, lo primero que vas a querer hacer es definir alguna lógica. Quiero crear una función que diga hola. Voy a decir sordo y decir, decir subrayado, hola, y luego agregar un codón Así es como vamos a definir una función, y luego podemos simplemente decir return y podemos decir hola, no, por ejemplo. Entonces definamos también una variable aquí en este archivo mientras nosotros addi Aquí voy a decir saludo favorito subrayado, y aquí voy a decir, bienvenidos. Muy sencillo. Entonces aquí, hemos definido nuestro archivo de saludo punto pi, y esto podrías tratar como tu módulo. Ya que un módulo, por supuesto, va a ser un PysonFle existente cual va a tener, por ejemplo, funciones, clases, etcétera, métodos, todo en módulo S en Ahora queremos hacer uso de nuestro módulo aquí y la funcionalidad que hemos establecido en saludos punto pi. que pueda navegar hasta su archivo dotp principal, y todo lo que necesita hacer es decir Importar y luego referirse a ese nombre de archivo exacto Entonces aquí se llama saludo. Entonces voy a decir saludo, y ahí vamos. Hemos importado con éxito nuestro propio módulo personalizado en pyson Ahora queremos que sea utilizable. Así que podemos utilizar nuestra declaración impresa y decir print. Entonces quieres referirte al modelo. Punto, y luego puedes referirte a la función que definiste, que en nuestro caso dirá subrayado, hola Se puede decir punto, digamos, subrayado, hola. I paréntesis es donde lo vas a dejar como está porque no hemos definido ningún parámetro ni nada por el estilo, y eso va a devolver hola o. digamos que quiero obtener el valor de salida de bienvenida Solo necesitamos referirnos al nombre de la variable aquí, que es saludo favorito y solo puedes decir print y puedes decir saludo, punto, y luego puedes decir saludo de subrayado favorito Eso va a dar salida al valor asociado a dicha variable. Ahora si ejecutamos el código, vamos a ver que dice bienvenido no y bienvenido. Está devolviendo lo que definí en mi función y también va a imprimir el valor de la variable asociada que se definió anteriormente. Bien, así que esa es una forma muy sencilla en la que podemos ir a un seto y configurarlo todo. Pero digamos que queremos ir un poco más en detalle, queremos que esto esté un poco más involucrado. Para que podamos eliminar estas líneas. Vuelve a saludar, y cambiemos esto un poco. Se puede quitar eso. Lo que quiero hacer es que quiero mantener la misma función, saludar, pero quiero pasar por un parámetro aquí. Voy a decir nombre y luego con la declaración return aquí, voy a usar cadenas F. Voy a decir F y voy a saludar y luego voy a agregar en un marcador de posición que será nombre Vamos a pasar por el argumento en nuestro archivo Pi principal, que luego va a apoderarse de nombre aquí, que luego se va a pasar a este marcador de posición para nombre Bien. Entonces podemos tener otra función para decir adiós, así puedo decir sordo, digamos, subrayado, bueno Adiós. Volveremos a decir nombre. Retorna, y tendremos una cadena F que diga Good Bye, agrega tu marcador de posición, y tendremos Name. Así como así. Entonces ahora si vamos a nuestro punto principal por archivo, lo que podemos hacer es muy similar a antes. Podemos decir imprimir. Y nuevamente, vamos a referirnos a nuestro módulo personalizado que es el punto de saludo. Y claro, nuestro nombre de función dirá subrayado hola, digamos, subrayado Y ahora vamos a pasar por un argumento, que va a sustituir nuestro parámetro aquí, y luego va a caer en esta declaración return el marcador de posición para lo que hemos definido Entonces vamos a definir el argumento ahora, y aquí voy a decir Jack. Entonces voy a ir a la siguiente diapositiva y decir imprimir saludo, punto, decir, y el nombre de la función era decir subrayado, adiós Voy a decir decir subrayado, bueno, adiós. Y aquí, sólo voy a decir, Katie. Nuevamente, va a ocurrir el mismo proceso. Vamos a invocar esa función y pasar por encima del argumento y sustituirlo por el nombre aquí, el parámetro name, y luego pasarlo a la sentencia return dentro del marcador para decir adiós, Katie Así que vamos a ejecutar esto ahora, así que debería decir hola Jack y adiós Katie ya que hemos pasado los argumentos aquí dentro. Vamos a ejecutar este código. Y como podemos ver, dice, Hola Jack y adiós Katie. Todo bien. Entonces así es como podemos trabajar y agregar en nuestros propios módulos. Ch. Así es como podemos seguir adelante y configurarlo. Podemos simplemente mover eso y vamos a eliminar este archivo, así que podemos simplemente hacer clic derecho en Greeting dot pie y decir eliminar. Y D ahora estamos trabajando con nuestro archivo principal punto Pi otra vez. Bien, entonces eso es módulos personalizados. Digamos que puedes crear tus propios módulos personalizados. Ahora, digamos que queremos trabajar con módulos integrados. Así que ya has aprendido antes cuando estábamos utilizando el módulo RE cuando estamos trabajando con expresiones regulares. Ahora, sólo voy a mostrarte un poquito más solo para darte una idea. Así que construido en los módulos es Python. Podemos utilizar el módulo de masa. Entonces voy a decir importación masiva. Y digamos que quiero obtener la raíz cuadrada de un valor particular. Entonces aquí voy a decir, el número equivale a 16. Entonces puedo decir print, refiérase al módulo de masa, y quiero utilizar la función de raíz cuadrada, y quiero obtener la raíz cuadrada del número que acabo de configurar aquí. Quiero obtener la raíz cuadrada de 16 esencialmente. Entonces ahora si ejecuto esto, va a decir cuatro, 4.0. Así que tenemos ese derecho. Bien, así es como podemos utilizar el módulo masivo, por ejemplo. Digamos que queremos sacar un número aleatorio 1-10. Entonces, lo que podemos hacer por eso, esencialmente, es que podemos seguir adelante y utilizar el módulo aleatorio. Entonces voy a decir importar al azar, y luego voy a decir imprimir. Entonces vamos a referirnos al módulo random, y luego random tiene una función rand int. Así que genera un entero aleatorio entre, por supuesto, los parámetros que establecemos. Entonces podemos decir rand int, la función rand int, y luego queremos decir entre. Entonces quiero sacar un número aleatorio entre, digamos, uno y diez. Entonces el mínimo, puede ser es uno y el máximo, puede ser diez. No vas a conseguir 11, 12, 13, ni nada parecido al tipo. Si ejecuto esto, va a decir seis. Ahora, digamos que lo vuelvo a ejecutar, dice dos. Es así como podemos ver que esto va a generar un número aleatorio 1-10. Todo bien. Este es el ejemplo de los módulos incorporados . Todo bien. Eso es todo para este práctico ejercicio de lámpara. Esperemos que a estas alturas, comprenda cómo puede crear sus propios módulos y utilizar los módulos integrados en pyson 21. Paquetes, Pip y PYPI: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en paquetes, PIP, y PY PI. Entonces echemos un vistazo. Bien, entonces paquetes. Ahora, en PySon, un paquete es una carpeta que agrupa múltiples módulos PySon para una mejor organización Ahora, lo que los desarrolladores pueden hacer y lo suelen hacer es que instalarían paquetes usando PIP de PYPI, de lo contrario comúnmente conocido como el índice PysonPackage para agregar funcionalidad adicional a agregar funcionalidad adicional Ahora bien, esto es muy permanente en áreas de desarrollo web donde los desarrolladores están utilizando frameworks web basados en PySon como Jango o FLASK cuando se dirigen a PYPI para instalar un paquete específico para agregar un pequeño toque de funcionalidad a sus a PYPI para instalar a FLASK cuando se dirigen a PYPI para instalar un paquete específico para agregar un pequeño toque de funcionalidad También puedes utilizar esto en el programa pyson normal, también muy pequeños con un script Python Bien, entonces PIP y PYPI. Ahora, PIP es esencialmente una herramienta para instalar y administrar paquetes PySon Esto ayuda a facilitar la descarga y actualización de todas las bibliotecas externas en lugar de codificar todo desde cero con muchos y muchos módulos agrupados. Ahora, PYPI, que es el índice PysonPackage, este es esencialmente un repositorio en línea que mantiene miles de paquetes PySon, que podemos descargar y utilizar Ahora PIP obtiene paquetes de PYPI para que los puedas usar en tus proyectos Bien. Bien, chicos, eso es todo en paquetes, PYPI y configurando todo de acuerdo con PIP también En el impuesto especial práctico de laboratorio, vamos a profundizar y vamos a trabajar con algunos ejemplos para mejorar nuestro programa 22. Cómo usar paquetes externos - [Lab]: Hola a todos. Bienvenido al próximo ejercicio práctico de laboratorio, que va a estar enfocado en trabajar con paquetes. Ahora bien, este es el sitio web de PI al que puedes dirigirte a pypi.org y que te llevará a este Aquí es donde puedes navegar por miles de proyectos y cómo puedes implementar solo una pequeña aplicación o biblioteca dentro de tu PysonPject Este es el índice PysonPackage. También podemos buscar proyectos aquí y luego integrarlos dentro de nuestras aplicaciones PySon Derecha. El primero que voy a ver va a ser sencillo. Quiero que agreguemos algunos emojis a nuestro código. Al menos eso es lo que vemos en nuestra ventana de salida. Lo que voy a hacer es que voy a buscar imagen y buscarla. Bien. Y aquí tenemos uno. Entonces emoji, que es el emoji para PySon. Y se puede ver que podemos instalarlo diciendo perp stallimogi Derecha. Así que vamos a querer introducir algunos comandos. Ahora, lo que vamos a tener que hacer por ahora es que podemos cambiar para ejecutar el archivo PySon solo por ahora Bien. Y aquí lo tenemos todo aquí. Vamos a aclarar esto. Bien, ahí vamos. Y lo que también voy a hacer es simplemente cerrar algunas de estas terminales aquí y reabrir Allá vamos y despejamos Ahí lo tenemos. Aquí está nuestra terminal ahora. Ahora podemos seguir adelante y ejecutar algunos comandos. Digamos que queremos instalar este paquete emoji. Podemos simplemente seguir adelante y copiar lo siguiente, dirigirnos a nuestra terminal, y por supuesto podemos, hacer clic derecho y se pegará automáticamente para usted. Podemos decir Pep instalar Emoji. Bien. Y como puede ver ahí, hemos instalado paquetes de precios en el entorno global, lo que puede causar conflictos. Puedes seguir adelante y crear un entorno virtual para aislar tu dependencia. Por lo que este es un tema que entraremos en detalle más adelante en este curso. Así que no te preocupes, vamos a llegar a eso momentáneamente. Entonces solo podemos decir por ahora no vuelvas a mostrar. Bien, así como podemos ver ahora en segundo plano y seguimos adelante e instalamos ese paquete Emoji. Ahí vamos. Entonces ya podemos aclarar esto. Bien, perfecto. Entonces ya tenemos eso instalado. Ahora vamos a seguir adelante e integrar esto. Entonces aquí tenemos nuestro código. Ahora, lo que voy a hacer es que voy a importar esas bibliotecas en particular. Voy a decir importmoji y después queremos agregar un emoji a nuestro texto Entonces por ejemplo, aquí voy a tener una declaración que dice print, y voy a referirme a ese módulo emoji, y voy a decir punto. Y tiene una función conocida como emojis. Entonces es EMO J, I Z E. Y dentro de esta función aquí, vamos a agregar lo que queremos agregar en las comprobaciones que queremos generar, junto con emote o emoji que queremos emitir también Entonces aquí, por ejemplo, voy a decir que tu contraseña está lista. Derecha. Ahora lo siguiente que harías es sumar en tus emerges. Puedes agregar en un espacio, y luego los Imoges en pyson se determinan agregando en dos puntos y luego el nombre de tu emoji, voy a agregar en clave y luego cerrarlo con Ahora, hay un sitio web que puedes usar aquí en copy dm dot kitp dot IO Me referiré a este recurso en particular en la siguiente lección, para que puedas echar un vistazo aquí a todos los emoges individuales Pero como se puede ver, dictaron por los dos puntos a cada lado y el nombre del valor S justo en el medio. Todo bien. Entonces eso es exactamente lo que estoy haciendo aquí y lo estoy configurando para una llave. Así que sigamos adelante y ejecutemos nuestro código. Y aquí puedes ver que dice que tu contraseña está lista. Así podemos ver que es agradable y limpio que también tenga esa llave. Así que también puedo aclarar esto. Y permítanme establecer esto ahora para verificar la marca de subrayado, guardar el archivo Y esta vez voy a ejecutarlo manualmente. Voy a decir Python. Pastel de punto principal. Y ahí puedes verlo salidas, tu contraseña está lista. Así que muy limpio y muy astuto, podría decir. Y ahí vamos. Entonces así es como podemos utilizar imágenes en PySon. Ahora, sigamos adelante y agreguemos Vamos a agregar colores a nuestro terminal aquí, a nuestro texto y a nuestro texto de salida también. Para que podamos volver atrás. Y queremos buscar algo conocido como ColorRama Para que puedas entrar aquí, ColorRama y luego puedes seguir adelante y presionar Enter Por favor aquí lo tenemos, un texto de terminal de color multiplataforma. Y queremos copiar lo siguiente, diríjase a nuestra terminal, haga clic derecho y diga Pep y almacene ColorRama Es solo instalando, ahí vamos. Se ha instalado. Vamos a aclarar esto. Y lo que podemos hacer es ir a un seto y quitar este código Bien, entonces queremos ir a un seto y agarrar el módulo Clama para que podamos decir desde Carlo Rama, así que ese es el módulo, y queremos importar las cuatro clases Entonces esto funciona como una clase. Y lo que vamos a querer hacer es usar la sentencia print, y vamos a seguir adelante y decir cuatro, que es la clase, y luego vamos a especificar el atributo de las clases. Entonces digamos que queremos que nuestro texto sea rojo, simplemente vamos a decir rojo. Entonces podemos decir más, y luego aquí en nuestras citas de trabajo, podemos decir que este es texto rojo. Bien, así que sigamos adelante y ejecutemos nuestro código PySnMin punto pi. Y ya se puede ver que todo está en rojo. Entonces los cheques aquí que hemos impreso están en rojo, y también el color terminal también está en rojo. Entonces, si tuviera que aclarar esto, se puede ver que ahora está en rojo. Digamos que quiero cambiar esto a verde, por ejemplo, solo puedo cambiar el atributo aquí a verde. Guarda mi archivo, y solo puedo decir Python main dot pi. Y ahí vamos, podemos seguir adelante y ver ahora que se cambia a verde. Sólo necesito cambiar ahí el texto a verde, y ahí vamos, es texto verde. Bien, para que podamos ver que es verde. Vamos a poner esto en azul, azul, y vamos a decir que esto es azul. Texto, pastel de punto principal de MSN, y este es texto azul. Bien, para que podamos ver así es como podemos cambiar esos colores. Puede ver qué tan efectivo es utilizar paquetes dentro de sus programas. Volvamos al valor por defecto, que es, por supuesto, blanco. Entonces voy a decir que este es texto blanco. Y puedes presionar la flecha superior tu teclado para buscar rápidamente los comandos PysmMinpi y luego volvemos en Así que sólo podemos eliminar eso. Ahí vamos. Vamos a usar otro paquete que nos va a permitir generar una contraseña. Así que una contraseña segura, y vamos a determinar los caracteres que queremos ins password. Entonces esto puede ser útil si quieres dar una lista de contraseñas para que tu amigo elija si está luchando por elegir una contraseña que sea segura. Así podemos buscar el paquete y luego es PWN, así que contraseña Gen como el término abreviado Aquí lo tenemos, PWGen y podemos copiar lo siguiente, agregarlo a tu terminal, dar click derecho y pegarlo en y Enter Recuerda que el tiempo para la instalación va a variar entre todos, así que no te preocupes si lleva algún tiempo instalar y todo para obtener el siguiente aviso de tipo. Se ha instalado, y sigamos adelante y configuremos esto. Queremos importar el módulo PWGen. Entonces lo que queremos hacer es definir una variable, que voy a establecer como contraseña, y luego voy a agarrar el módulo PWGen, y luego vamos a referirnos a la función de PWGen que por cierto también es el mismo Y aquí vamos a definir las longitudes para nuestra contraseña. Entonces voy a poner esto en diez caracteres. Entonces voy a ir a la siguiente línea y decir print. Voy a decir contraseña generada, dos puntos, y voy a añadir en coma y luego referirme a la contraseña que estoy viendo PWG generará una contraseña aleatoria para mí asociada a esta salida variable y este texto va a estar justo al lado de eso Entonces ahora sigamos adelante y digamos pysonmin punto pi. Y aquí podemos ver la contraseña generada. Entonces es una contraseña generada al azar que se ha configurado. Entonces también son diez personajes, así que uno, dos, tres, cuatro, cinco, seis, siete, ocho, nueve, diez. Pongamos esto, por ejemplo, a cinco. Vamos a ejecutar Python main dot pi. Y podemos ver que tenemos una contraseña de sólo cinco caracteres de longitud. Para que veas cómo puedes ajustarlo y cambiarlo como así te sientes. Entonces con este paquete, vas a aprender cómo puedes generar una contraseña aleatoria. Todo bien. Entonces así es como podemos seguir adelante y configurarlo en consecuencia. Cierto, entonces lo que quiero hacer ahora es que quiero cerrar esto, y quiero usar lo que hicimos antes para poder hacer clic aquí en icono y ejecutar código, y queremos ahora solo traerlo de vuelta a donde estábamos antes con nuestro corredor de código, ya que no estamos ingresando nada ni instalando nada Bien, chicos. Eso es. Eso es todo para este práctico ejercicio de laboratorio sobre cómo podemos utilizar paquetes y cómo podemos instalarlos y cómo podemos utilizarlos para integrar su propio conjunto de funcionalidades personalizadas a nuestros proyectos y al albergue. 23. Recursos útiles: Hola a todos. Bienvenidos a la siguiente lección, cual va a estar enfocada en proporcionarte los enlaces como se especifica que mencioné de la lección anterior. Ahora, el primero va a ser cómo acceder a PyPi. Es muy sencillo. Simplemente seguirías adelante y teclearías pypi.org en tu URL y eso te llevará al PysonPackage Index, que te va a mostrar una lista de todos los paquetes de bibliotecas de terceros bibliotecas de terceros que están disponibles para ti, como los que usamos anteriormente, como PW Jen y Color Rama y Ahora en cuanto a los Imoges que usé, claro, parecía estaba memorizando o dirías, pero en realidad hay un sitio donde puedes ver cómo los integrarías utilizando el comando Pip in Ahora puedes dirigirte a la siguiente URL aquí como puedes ver, copiar y luego DM y luego 20 expedientes del iOSmoGFDSlash Así es como también puedes acceder a ese sitio web. Yo solo quería darte un poco de claridad aquí en cuanto a los recursos y los enlaces. Si quieres experimentar más y agregar algunos emerge y solo quieres practicar un poco y mirar algunos de los paquetes que están disponibles para ti y solo experimentar un poco, es como puedes seguir adelante y hacerlo 24. Generar números aleatorios: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en generar números aleatorios. Entonces comencemos. Entonces, ¿cómo generamos números aleatorios? Ahora, PySon, como saben, viene con muchos módulos diferentes para generar números aleatorios Ahora, vamos a explorar tres módulos. Ahora, el primer módulo por el que ya hemos pasado, y ese es el módulo aleatorio. Y con este módulo, podemos generar números pseudo aleatorios También tenemos un módulo de secretos, y que crea números aleatorios criptográficamente seguros Y también obtenemos el módulo numpit Random, que genera números aleatorios en matrices Entonces lo que vamos a hacer es que vamos a aplicar nuestros conocimientos en una manera de aprender haciendo. Así que sigamos adelante y comencemos con los ejercicios prácticos de laboratorio. 25. Profundizar en el módulo aleatorio - [Laboratorio]: Hola a todos, y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en generar números aleatorios mediante la utilización tres tipos diferentes de módulos. Así que vamos a utilizar el módulo aleatorio. El módulo secrets y también el módulo Num Pi también, que vamos a instalar dentro de nuestro dispositivo en su momento. Pero sigamos adelante y comencemos con el módulo aleatorio, sigamos adelante y explotémoslo tanto como podamos. Ahora bien, lo primero que tenemos que hacer, por supuesto, es decir importar al azar para que podamos acceder a las funciones necesarias. Y vamos a primero que nada, queremos dar salida a números flotantes 0-1 Entonces podemos decir imprimir. Punto aleatorio aleatorio. Y esencialmente lo que estamos haciendo aquí es que estamos llamando al módulo aleatorio, y eso tiene una función que va a imprimir flotadores Entonces, si tuviera que ejecutar el código aquí, va a imprimir números flotantes aquí 0-1, así que tendremos números decimales como resultado de esta función aleatoria que es parte del propio módulo aleatorio Podemos ver que cambia cada vez a un número diferente. Ahora, digamos que queremos generar un float aleatorio 1-10. En lugar de usar esta función aleatoria, diríamos punto uniforme y vas a querer poner los límites, digamos 1-10 Y puedes ejecutar este código. Ahora, eso va a imprimir números de punto flotante. Entonces los flotadores son esencialmente números que tienen formato decimal, y va a ser 1-10 Ahora, va a poder ejecutar 1.0, pero nunca correrá diez. Entonces, esencialmente, va a ser todo 1-9 hecho real en términos de una especie de orden decimal Derecha. Ahora, sigamos adelante ahora e imprimamos enteros aleatorios Acabamos de experimentar ahora con números aleatorios de punto flotante o flotadores, como dirías, usando la función punto aleatorio y luego la función uniforme Ahora, digamos que queremos imprimir enteros aleatorios. Podemos usar la función rand int, y digamos que queremos imprimir los números 1-10. Bien, entonces esto va a incluir tanto uno como diez. Entonces, con el rand en función, permitirá el límite inferior y el valor del límite superior. Vamos a ejecutar esto. Entonces tenemos tres, seis, y podemos ver que es un entero porque es el número entero el que se está emitiendo nueve, seis, uno, ocho, tres, diez. Derecha. Ahora, digamos que queremos volver a imprimir enteros aleatorios, pero queremos que esté en un rango específico Ahora, digamos que queremos imprimir 1-9, es decir, quiero también sacar nueve Seguirías adelante y lo cambiarías de rand int, lo pondrías en rango rand. Ahora, la diferencia aquí es que va a excluir a diez. Ahora, Rand Antes incluía diez, pero en este caso, con el rango Rand se va a imprimir desde el límite inferior, elija el límite superior menos uno. Entonces, sigamos adelante y ejecutemos este código. Sigamos adelante y ejecutarlo. Ahí vamos. Notarás si ejecutas esto bastantes veces, vas a notar que nunca va a dar salida a diez. Sin embargo, si quisieras generar diez, técnicamente necesitarías establecer esto en 11. Entonces, cuando ejecutes este código, eventualmente te dará al menos la oportunidad de imprimir diez. Sólo algo para que experimentes. Recuerde, el rand en la función incluirá tanto los valores de límite inferior como superior y el rango de Rand solo incluye el número de límite inferior y luego el número del límite superior menos uno. Así es como va a funcionar eso. Hemos mirado los números de punto flotante y los enteros aleatorios Ahora, sigamos adelante y veamos distribución normal para las estadísticas, por ejemplo. Si te interesan las estadísticas o estás trabajando en esa luz, podemos utilizar el módulo aleatorio y usar la función variable normal y podemos pasar por cero y uno Ahora, va a tomar una media y la desviación estándar es lo que va a estar ocurriendo. En este caso aquí, la media será cero y la desviación estándar va a ser uno. Si ejecutamos esto, vamos a ver cuál la variación estándar normal va a ser la variación estándar normal cada vez que ejecutemos. Todavía va a ser aleatorio porque es un módulo aleatorio. Pero como podemos ver así es como podemos seguir adelante y utilizar distribución normal con una media y una desviación estándar. Derecha. Ahora, sigamos adelante y apliquemos esto cuando estemos trabajando con listas. Para que podamos eliminar esto. Voy a crear una lista aquí y voy a decir autos, iguales, y voy a establecer una lista de autos. Voy a decir BMW, voy a decir Tesla. Voy a decir Ford, y el último, puedo configurar Nissan. Tengo mis tarjetas en su lugar. Ahora, lo primero que quiero mostrarte es cómo puedes elegir un elemento o elemento aleatorio de esta lista. Para ello, se puede decir print y queremos hacer uso del módulo random y hay una función llamada choice. Vamos a aplicar elección a esta lista aquí. Y esencialmente lo que va a pasar aquí, va a imprimir un elemento aleatorio de esta lista. La función de elección de puntos te permitirá elegir un elemento aleatorio de la lista que hayas definido. Entonces, si ejecuto el código, vas a ver Tesla, Tesla, BMW, Tesla, Nissa, va a ser completamente aleatorio cada vez que hagas clic en él Bien, así es como puedes utilizar esta función en particular. Ahora, digamos que quieres seguir adelante y elegir dos elementos únicos. Así que no quieres seguir seleccionando solo una opción cada vez. Desea seleccionar dos elementos únicos cada vez. Entonces puedes ajustar esto, y en lugar de decir opción de punto, usarás la función de muestra. Va a enchufar la lista y después dos. Entonces ahora, vas a escoger dos elementos únicos de esta lista. Entonces, si fuéramos a ejecutar el código, podemos ver que tenemos Ford Tesla. Tenemos BMW Tesla, Ford Nissan, Tesla Nissan, y vas a ver aquí, solo va a seguir adelante y sacar dos elementos aleatorios o artículos de la lista dada. Entonces ese es todo el propósito de la función de muestra. Si quisiera seleccionar tres, por ejemplo, cada iteración, solo puedo reemplazar eso, guardar mi código, y ejecutarlo ahora va a aparecer en tres eligiendo aleatoriamente qué elementos sacar y muestrear Ahora bien, algo interesante que quizás quieras investigar aquí es el hecho de que estás usando la función de muestra de puntos y estás enviando tres o digamos, por ejemplo, dos, nunca va a mostrar elementos duplicados. Entonces como podemos ver aquí, si pongo dos, muestra Nissan y Ford. No va a mostrar, por ejemplo, Nissan Nissan, Ford Ford, Tesla, Tesla, BMW, BMW, no va a demostrar que siempre va a seguir adelante y mostrar algo que es único. Entonces, si tuviera que volver a ejecutar el código aquí, siempre va a mostrar algo que es único cada vez que ejecutes tu Bien. Entonces solo algo que quería mencionar en esa nota. Otra cosa que puedes hacer es que también puedes barajar tu lista Ahora bien, si tuviera que seguir adelante y sacar mi lista, si solo digo imprimir autos y correr, manguera BMW, Tess a Ford, y Nissan Bien, entonces si vuelvo a ejecutar esto, lo va a hacer en el mismo orden, pero digamos que quiero barajar esta lista Entonces lo que puedes hacer es lo siguiente. Puedes decir print, y aquí dentro de la función, puedes decir aleatorio dot shuffle, y puedes poner esa lista de la siguiente manera Entonces esta función va a barajar el orden de lo que se incluye en la lista Entonces no será cada vez que ejecutes BMW, Tesla Ford Nissan, así que si lo ejecuto, bien, vas a ver que va a funcionar en el no estado. Ahora, la razón de esto es que necesitas barajar la lista antes de ejecutar tu función de impresión Entonces algo que quería mencionar aquí. Entonces hay que hacer esto por separado. Como está, déjelo barajar y luego imprimirlo. Entonces esta función en particular funciona un poco diferente. Vas a tener que dejarlo solo. Ahora, antes cuando te estaba mostrando, puedes incluir todas las funciones y los módulos juntos en la declaración de impresión e imprimir el resultado. Sin embargo, al barajar la función aleatoria, funciona por sí sola Entonces aquí tendríamos que decir explícitamente autos después. Entonces cuando ejecute esto, va a decir BMW Nissan Forte, y se puede ver que baraja los artículos como podemos Aunque no se puede hacer dentro de una función de impresión. Entonces un punto muy importante a tener en cuenta. Y como viste antes, vas a tener un resultado de ninguno. Entonces esto es algo importante que debes tener en cuenta. Entonces, con la mayoría de los módulos y funciones que desea usar, puede agregarlos en una función de impresión, pero si está barajando, debe ser explícitamente por sí solo con la función aleatoria en sí, y luego puede imprimir después para que baraja la lista, y luego pueda Bien, entonces solo algo importante para recordar. Entonces va a modificar el lugar. Bien. Genial. Ahora, sigamos adelante y veamos algunas funciones más. Ahora, digamos, por ejemplo, quiero que aparezcan elementos aleatorios, y también quiero que se repita, también. Entonces no quiero que sea en una como puedo decir una situación particular donde tengamos los duplicados, pero también quiero permitir que tenga alguna repetición en su lugar Entonces sigamos adelante y hagamos precisamente eso. Entonces tenemos nuestro nido, y podemos eliminar lo que tenemos aquí, y solo podemos decir print random dot, y vamos a decir opciones esta vez. Recuerde que antes teníamos elección, lo que significa elecciones únicas. Podemos tener múltiples opciones, y vamos a decir autos, y esa va a ser la lista que se va a agregar, y vamos a decir K es igual, y podemos establecer eso en dos. Alr. Entonces eso es lo que queremos agregar. Y esto puede devolver valores duplicados. Entonces, a diferencia de antes, cuando fuimos a una cobertura y configuramos nuestra muestra con una función de muestra, no puedes tener duplicados, pero con la función choices, puedes tener duplicados aquí Entonces por K es igual a dos, estamos especificando cuántos elementos queremos generar. Entonces, si yo fuera a decir correr, Nissan, Tesla Tesla. Entonces aquí puedes ver que va a mostrar dos elementos de la lista, pero se puede repetir, para que puedas ver dos de lo mismo. Entonces así es como se puede tener algún tipo de repetición. Derecha. Ahora bien, lo siguiente que quiero mostrarles es cómo pueden utilizar la función triangular. Ahora, la función triangular es bastante única porque va a devolver un flotador entre bajo, alto y modo. ¿Bien? Y el modo es el pico de donde es más probable que la salida esté más cerca. Entonces es muy similar a redondear, se podría decir. Entonces déjame mostrarte cómo podemos hacer eso. Para que podamos ir a un seto y quitar lo que tenemos aquí. Y podemos agregar nuestra declaración impresa. Y voy a decir punto aleatorio, triangular, esa será la función. Y primero, vamos a tener un flotador que queremos volver en el punto bajo. El punto bajo será uno. El punto alto puede ser diez, y el modo o pico puede ser cinco. Entonces, si tuviera que ejecutar esto, voy a ver que la salida aquí, por supuesto, es un flotador, pero se puede ver que va a estar más cerca del modo. Entonces uno es el punto bajo. Diez es el punto alto y cinco es el modo, es decir, el punto más probable en el punto más probable cuanto a dónde estará más cerca el valor de salida. Entonces 6.0 más cercano a cinco, 5.1, básicamente cinco, 4.7 más cercano a cinco, 5.4, más cercano a cinco, 5.2, más cercano a cinco, 5.6, cerca de cinco. Entonces puedes ver ahí cómo eso está funcionando en su lugar. Derecha. Ahora bien, lo siguiente que quiero mostrarles es bastante similar a la función normal que usábamos antes. Ahora, digamos que estamos trabajando con simulaciones y queremos simular mediciones del mundo real con variación natural Podemos usar la función de gasa. Entonces también va a asimilar, ¿cómo puedo decir una media y una sigma para la desviación estándar Entonces lo que harías es que solo reemplazarías triangulart Gasa entonces podemos pasar por cero y uno como la media y Sigma, esto va a dar salida normalmente al valor distribuido alrededor de cero, se podría decir, si ejecuto esto, podemos ver ahí va a dar salida a distribución asociada mediante el uso de la función gasa Mucho de esto se basa en la estadística, la gasa triangular y las funciones variadas normales se utilizan principalmente en la rama estadística, debería decir Pero es solo algo que quería mostrarles para que al menos puedan comprender un poco la salida y qué esperar. Derecha. Entonces ahí lo tenemos. Las cosas más importantes que quiero recordarte aquí cuando estés usando tus funciones de impresión, puedes operar tus funciones y módulos en la misma función de impresión. No obstante, no se puede hacer por el barajado, así que solo tenlo en cuenta Bien, bien, vete. Entonces eso es todo para el módulo aleatorio. A continuación, vamos a seguir adelante y centrarnos en el módulo secretos. 26. Exploración del módulo secretos - [Laboratorio]: Bien, así que continuemos con el módulo Secretos. Bien, entonces lo que quiero hacer, en primer lugar, es importar el módulo Secrets. Y lo primero que queremos hacer es que queremos devolver un entero aleatorio que esté por debajo de un número dado. Entonces lo que puedo hacer aquí es que puedo decir print, y voy a utilizar el módulo secrets. Entonces voy a usar la función range below, y quiero imprimir un número aleatorio 0-9 Y para hacerlo, solo necesitaría poner diez. Entonces va a imprimir todo 0-9, y no va a incluir diez Entonces, si tuviéramos que ejecutar el código aquí, podemos ver que tenemos ocho, tres , uno, ocho, notarás que no va a imprimir diez, hará todo lo demás que no sea eso. Otra cosa que podemos hacer es que podemos ir a una cobertura y generar una elección específica también utilizando el módulo secrets Ahora, digamos por el bien del argumento que tenemos aquí una lista de códigos sensibles. Voy a decir códigos y en una lista, voy a poner en Alfa, Beta, Gamma. Quiero recuperar una elección aleatoria segura, per se. Puedo decir imprimir y referirme al módulo secretos. Y entonces la función que usaría es elección, y voy a poner en códigos. Entonces voy a recuperar una elección secreta. Se podría decir o codificar. Entonces si ejecuto esto, puedo ver que tengo Alpha. Cada vez que corra me va a dar un nuevo código, así Gamma, Alfa, Beta. Todo bien. Entonces así es como puedes elegir una elección aleatoria de una secuencia dada. Bien. Ahora lo siguiente que quiero mostrarte es bastante único para el módulo secrets, y así es como puedes generar un token hexadecimal seguro. Y esto, por supuesto, va a tener 16 caracteres de largo. Entonces sigamos adelante y hagamos eso. Ahora bien, el valor que pones se va a configurar, por supuesto, en bytes. Entonces, claro, va a ser el doble en nuestro caso. Bien, así que sigamos adelante y hagamos eso. Entonces lo que podemos hacer es simplemente decir print use el módulo secrets, y podemos utilizar la función token, underscore hex, y vamos a decir ocho, y esto va a generar un token hexadecimal seguro que tendrá 16 caracteres de largo Vamos a correr esto y podemos ver aquí tenemos BA ED y este número entero, y eso va a ser de 16 caracteres. Ahora, claro, si solo tuviera que establecer este 24 y ejecutarlo, sólo va a imprimir ocho caracteres. Porque recuerden, estamos estableciendo los bytes aquí, y esencialmente eso va a seguir adelante y duplicarlo. Entonces, si tuviera que poner cuatro aquí, ejecutarlo, sólo me va a dar una salida de token hexadecimal de cuatro. Esto puede ser muy útil si necesitas tokens en algún sentido. Así es como puedes generar un token hexadecimal seguro. Así es como podemos utilizar el módulo Secretos, derecho. Ese es el módulo Secretos. Lo siguiente que vamos a ver es el módulo NumPiy eso es algo que vamos a querer seguir adelante e instalar primero dentro de nuestro proyecto Normalmente usamos el módulo Numpo para operaciones aleatorias rápidas, pero más que eso muy pronto 27. Profundizar en el módulo numpy - [Laboratorio]: Bien, así que continuemos. Ahora lo siguiente en lo que nos vamos a centrar es en el módulo Num Pi. Y esto también es muy útil para trabajar con matrices también. Pero más sobre eso pronto. Entonces lo primero que queremos hacer es que queremos dirigirnos a PYPI y queremos ver a Pep instalar Entonces podemos seguir adelante y copiar esto, o en realidad puedes teclearlo en tu terminal y código de Visual Studio. Y lo que voy a hacer ahora es que solo voy a cambiar 30 Bug para ejecutar PysonFle solo Podemos despejar esta salida. Y solo quieres decir Pep install num Pi, y puedes presionar Enter. Bien. Y eso solo lo va a instalar para nosotros. Bien. Vamos a ser pacientes y darle un momento, y luego podemos continuar con la utilización del módulo Num Pi. Bien, así que vamos a darle algo de tiempo. Bien, para que podamos ver que se ha instalado. Podemos aclarar esto. Y ya no necesitamos eso. Cambiemos a ejecutar código, y ahí vamos. Derecha. Ahora, ahora que tenemos instalado el paquete NumPI, ya podemos acceder a sus módulos particulares Para que pueda ver Importar. Núm Pi. Ahora bien, según el estándar, normalmente, Num Pi es bastante largo para el nombre de un módulo. Y como se usa con bastante frecuencia, lo que suele hacer la gente es configurar un alias en cuanto al nombre del módulo. Entonces se puede decir a, y luego podemos definir el alias como N P. Así que otras palabras, donde quiera que definamos MP, eso significa que básicamente estamos invocando el propio módulo Num Pi Así que solo un truco un poco fuerte si quieres configurar alias con tus módulos En este caso, esto es 99% del tiempo siempre seguido cuando estás usando NumPI Bien. Ahora, lo primero que quiero mostrarles es cómo puede seguir adelante y configurar arreglos básicos. Bien. Entonces vamos a decir print, y vamos a referirnos a NP. Y vamos a utilizar submódulos. Entonces NumPI tiene un submódulo, que se llama random, que tiene una función Así que tenlo en mente. Así que aquí estamos usando random como submódulo. Entonces NumPI es nuestro módulo. Random es nuestro submódulo, y Rand es nuestra función Así que tenlo en cuenta en caso de que te estés confundiendo un poco. Entonces hay un poco de diferencia en este sentido. Y con la función rand ahora, eso nos va a permitir generar una matriz one D, y solo necesitamos especificar cuántos flotadores aleatorios queremos 0-1 Entonces quiero tener. Entonces, si ejecuto esto, tal vez necesitemos que ahí vamos. Ahora va a imprimir una matriz unidimensional como podemos ver, y va a tener tres flotadores aleatorios porque recuerden, rand va a estar enfocado en la salida de flotadores Entonces cualquier cosa con un decimal y va a ser tres flotadores aleatorios en el rango de cero a uno, así podemos ver aquí 0.16, 0.93, 0.7, todo está entre Digamos que quiero generar una matriz de tres por tres, no solo una matriz, tres por tres. Yo sólo puedo decir coma y luego tres, y ahora podemos decir código de ejecución Ahí vamos, ahora tenemos una matriz de tres por tres. Se ve muy similar a lo que obtienes en matemáticas cuando obtienes matrix o cualquier cosa por el estilo, muy similar en cierto modo. En este caso aquí, estamos devolviendo una matriz de tres por tres con flotadores aleatorios 0-1 nuevamente como puede A. Eso es lo que tenemos en su lugar aquí. Así es como puedes configurar tus arreglos. Ahora, otra cosa que puedes hacer es que también puedes configurar una matriz con enteros Aquí estamos configurando una matriz con flotadores. Sigamos adelante y cambiemos esto. Ahora voy a cambiar la función a rand int. Aquí lo vamos a cerrar y vamos a meter. Aquí vamos a poner tres valores, en este caso, vamos a tener un bajo, un alto, y un tamaño. En este caso, vamos a tener cero, que es bajo, diez, que es alto, y luego el tamaño, vamos a establecer como tres. Bien. Ahora bien, en este caso aquí, los valores aquí van a ser 0-10, excluyendo diez, va a ser de cero a nueve y vamos a tener enteros aleatorios, tres enteros aleatorios que son 0-9 en una Si tuviera que ejecutar esto, podemos ver que tiene lo siguiente. Tenemos matriz unidimensional. Los valores son 0-10, excluyendo diez, y tenemos tres valores Entonces, si fuéramos a seguir adelante y correr eso de nuevo, ya se puede ver que va a seguir adelante y sacar ese resultado. Así es como se puede generar una matriz unidimensional de tres enteros aleatorios que son 0-9 Bien. Entonces la parte baja es, por supuesto, la base que estás iniciando. La parte alta es, por supuesto, el límite superior, que excluyes. Simplemente estás en el límite superior menos uno. Así que recuerda, cada vez que escuchas sobre valores de límite superior o algo así, siempre vas a menos uno. Entonces es solo un truco un poco ingenioso que te aconsejaría siempre que estés tratando con valores de límite superior que sean excluyentes. Siempre menos uno. Ahí es donde el verdadero conteo subirá a lo sumo. Bien, así es como puedes trabajar con arreglos básicos utilizando el módulo NumPI Bien, entonces lo que quiero hacer ahora es mostrarte algunas funciones más útiles que puedas usar. Ahora lo siguiente que quiero mostrarles es cómo se puede generar un conjunto de números aleatorios a partir de una distribución normal estándar donde tendremos la media de cero y la desviación estándar de uno. Entonces lo que podemos decir es print, y se puede ver np dot random dot rand, y vamos a tener N porque esto va a ser para distribución normal. Y aquí vamos a poner cuántos números aleatorios queremos de una distribución normal. Esto puede ser muy útil si estamos simulando, por ejemplo, fluctuaciones en un mercado de valores o alturas o algo por el estilo Corre eso, ahí vamos. Se puede ver ahora que hemos generado tres números aleatorios a partir de una distribución normal. Bien. Así que tenemos esa configuración. Lo siguiente que quiero mostrarte es lo que puedes hacer si quieres seguir adelante y escoger elementos aleatorios o artículos con o sin reemplazo. Bien. Ahora bien, lo que quiero decir eso es que el reemplazo va a dictar si tienes duplicados o si no tienes Es muy similar a lo que expliqué antes con la función de muestra de puntos y la función de opciones de puntos donde se agrega en K es igual a dos, por ejemplo, muy similar a lo que teníamos antes con el módulo aleatorio, pero así es como lo vas a aplicar con el propio módulo Num Pi. Esto es lo que vamos a hacer. Primero vamos a definir una lista. Esta lista aquí va a, sigamos adelante y limpiemos esto. Vamos a tener una lista, y vamos a decir frutas iguales y podemos decir par Manzana uva naranja. Tenemos una lista de frutas, adelante y definimos una lista, y luego podemos decir print y Np dot random como submódulo, y vamos a decir punto choice Entonces esta vez usaremos choice, y vamos a agregar en tres opciones. Ahora, digamos que quiero seguir adelante y escoger dos elementos únicos de esta lista. Primero vamos a definir a partir de qué lista. Entonces en este caso, van a ser frutos. Entonces van a ser dos, y luego queremos decir reemplazar es igual a falso. Esto nos va a permitir esencialmente que este código escoja dos elementos únicos y al decir reemplazar es igual a falso, significa que vamos a asegurarnos de que no haya duplicados Es decir, cuando estamos seleccionando dos elementos de esta lista de frutas, no queremos seleccionar manzana dos veces como Apple y Apple o uva y uva o naranja y naranja o pera y pera. Déjame demostrarlo por ti. Reemplazar ayuda a evitar la duplicación. Sigamos adelante y ejecutemos el código. Tenemos manzana pera naranja uva, naranja manzana, uva manzana, uva naranja, naranja pera. Vas a ver que no va a tener ningún duplicado de ese tipo Pero sin embargo, si tuviera que establecer replace en true, entonces va a permitir duplicados Entonces si digo reemplazar es igual a verdadero, Guarde esto y ejecute naranja manzana, naranja uva. Papá. Ahí vamos. Ahora tenemos un duplicado en su lugar. Así que ahora podemos tener valores duplicados que se están seleccionando. Por lo que se pueden seleccionar dos valores que sean iguales. Entonces tendrás reemplazar es igual a verdad. Bien, así es como podemos agregar eso en su lugar. Bien, así que muy parecido como dije, a lo que teníamos antes con random el módulo aleatorio. Bien. Entonces tenemos eso. Perfecto. Bien, así que sigamos adelante y veamos a dónde podemos ir más allá. Ahora, digamos, por el bien del argumento, quieres ir a un seto y devolver una matriz de flotadores con bajo y ¿Bien? Entonces lo que puedes hacer es seguir adelante y decir print. N P punto aleatorio. Y quieres decir el uniforme de punto. Así que recuerda, con la función punto uniforme, vas a estar lidiando con float, así que la salida será en flotadores Y aquí vamos a tomar tres valores. Entonces primero tendremos alta, una baja y una talla. Entonces primero, el alto, vamos a decir del uno al diez. Y entonces queremos tener cinco carrozas aleatorias, así podemos decir cinco Bien. Entonces sigamos adelante y ejecutemos esto. Bien. Ahí vamos. Vamos a ver que tenemos uno, dos, tres, cuatro, cinco, va a estar entre, como podemos ver aquí, el bajo y el alto, así que uno a diez, recuerda, no va a ser nunca diez. No va a ser en diez. Si ejecutamos esto, podemos ver ahí no va a ser de ningún caso diez. Esto es lo que podemos hacer si queremos devolver matriz nuevamente de flotadores en alto y bajo Bien. Bien, perfecto. Entonces ya tenemos ahí se puede ver aquí lo más alto al que puede subir como vemos es 9.74 e incluso va tan bajo como 2.29, pero para nada yendo por encima Ahora, digamos que queremos devolver una matriz de números normalmente distribuidos. Entonces usaremos algo conocido como la función normal. Entonces lo que podemos hacer es decir mp punto aleatorio punto normal. Y podemos simplemente cerrarlo. Vamos a tomar tres valores. Entonces tendremos cero, por ejemplo, uno, y podemos decir cinco. Ahora, el primer valor aquí va a ser para MU. Entonces tendremos Sigma, y luego tendremos talla. Y vamos a devolver cinco de esos números normalmente distribuidos en una matriz. Y ahí podemos ver que tenemos esa salida en consecuencia, ¿verdad? Perfecto. Y así es como podemos seguir adelante y establecer también la función normal. Bien, entonces ahí lo tenemos. Existe la manera en que podemos utilizar los tres módulos. Y solo quería darte un poco de una visión general de cómo puedes ir de cabeza y utilizarlos todos, y algunas de las funciones más populares. Ahora, sé que algunos de ellos podrían haber estado un poco por ahí y un poco fuera de alcance. Un poco de ella se sumerge, como mencioné, en un poco de estadísticas, pero es importante al menos estar al tanto de ellas y solo tener un poco de contexto, no decir que alguna vez la usarás, sino que es bueno tener algunos conocimientos de fondo, que sepas que existen, y no estás limitado a solo usar una o dos funciones que están disponibles En cualquier caso, eso está en Num Pi en términos de las funciones aleatorias num Pi y tal. Y sí, eso concluye este conjunto de ejercicios prácticos de laboratorio de tres partes. 28. Decoradores: Hola a todos, y bienvenidos a la siguiente lección, que va a ser foco en decoradores Entonces, ¿qué es un decorador? Eso es probablemente lo que tienes en mente ahora mismo. Así que en pocas palabras un decorador en PySon es una función o clase especial que mejora otra función o método sin cambiar su código original Entonces déjame darte una analogía muy simple. Digamos que te estás preparando para Navidad y quieres volverte festivo y decorativo. Lo primero que haces es conseguirte un árbol de Navidad. Entonces eso es parte de la decoración. No obstante, lo que hace la gente es decorar el árbol, así van un paso más allá y ponen muchas cosas bonitas en el árbol. Entonces trata de ver a un decorador en este sentido literal de su analogía Podrías tratar el árbol de Navidad como una función y los decoradores adicionales que te pones como una función especial Esa es sólo una manera en la que puedes seguir adelante e intentar cómo puedo decir, ponerla en perspectiva. Ahora bien, en PySon como mencioné, un decorador puede ser una función especial o una Sin embargo, el decorador más común es, por supuesto, el decorador de funciones 99.9% de las veces cuando trabajas con Pyson en cualquier ambiente o ecosistema, vas a ver decoradores en el tipo de perspectiva de tener Ahora, otra cosa que quiero mencionar en cuanto decoradores es que permite modificaciones dinámicas Entonces, lo que puedes hacer es agregar o alterar la funcionalidad de tus funciones y métodos de clase conjunto. Bien, chicos. Entonces eso es todo para el panorama teórico. Y en la siguiente lección, vamos a trabajar en algunos ejercicios para solidificar nuestros conocimientos sobre decoradores en pyson 29. Cómo crear nuestro primer decorador - [Lab]: Hola a todos. Y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en trabajar con decoradores en PySon Así que vamos a mantenerlo muy simple como inicio y luego podremos construir con algunos ejemplos. Entonces comencemos. Bien, entonces lo primero que debemos tener en cuenta es cómo podemos definir una función simple en PySon y luego podemos construir a partir de ahí Derecha. Entonces lo primero que voy a hacer es definir una función. Voy a decir Def y voy a decir aquí decir subrayado Hola Y voy a dejar vacíos a los parenses y no voy a pasar por nada en el curlon Y entonces lo que voy a hacer aquí es que voy a decir print, y fue en el comunicado impreso aquí, voy a decir hola mundo. Perfecto. Ahora lo que quiero hacer es llamar a esta función, y voy a decir, decir, subrayado, hola. Ahí vamos. Lo que esencialmente va a pasar es que vamos a definir esta función. Entonces va a ejecutar print hello world una vez que se llame. Aquí estamos llamando a esta función en particular y ejecutará lo que sea que esté dentro de esta función misma. Sigamos adelante y ejecutemos el código y podemos ver ahí sale hola mundo. Esa es la forma sencilla en la que puedes utilizar una función. Genial. Perfecto. Entonces ahora que tenemos eso en las envolturas, sigamos adelante y construyamos sobre esto. Entonces tenemos esta función, y digamos que queremos ir a una cobertura y modificar los resultados que vamos a obtener con esta función Bien, entonces digamos que queremos envolver esto en un decorador y queremos tener más de una salida, no solo hola mundo Queremos tener un poco más que eso. Entonces lo que voy a hacer es que voy a seguir adelante y definir un decorador Ahora bien, un decorador, por supuesto, como mencioné, puede ser una función o una clase ahora una clase funcional especial para ser más específicos Lo que voy a hacer es simplemente alejar un poco aquí y ahora vamos a definir una función especial. Voy a decir ef y esta función aquí, voy a llamar a este M subrayado decorador Bien. Y entonces lo que vamos a hacer es que vamos a pasar por el funk Bien. Ahora bien, puedes tratar el funk aquí como un parámetro , bien, para otra función que vamos a ¿cómo puedo decir absorber? Ahora bien, esta función que absorbe va a ser absorbida cuando agreguemos el decorador encima de la función Entonces digamos que quiero seguir adelante y modificar esta función aquí. Lo que tendría que hacer es agregar en el decorador at y eso en decorador va a hacer referencia a esta función aquí llamada Mi Mi subrayado decorador y ahora funk aquí está el parámetro, y esto ahora va a tomar en esta función en particular que tenemos Porque aquí tenemos funk, y la razón por la que sabe que va a ser esta función porque adjuntamos el decorador Con este decorador, va a agarrar esta función y pasarla por aquí automáticamente porque de este decorador que agregamos aquí fue el símbolo at, va a pasarlo por Esta es ahora esencialmente la función decoradora y esta es nuestra función original Podemos agregar dos puntos ahí mismo. Entonces lo siguiente que tenemos que hacer es que tenemos que envolver. Necesitamos envolver esta función original dentro de nuestro decorador Se podría decir en nuestra nueva función. Tendrías que decir muerte. Envoltura, abrir y cerrar paréntesis y cerrar los dos puntos Esta va a ser la nueva función que va a envolver la función original ahora. Lo siguiente que vamos a querer hacer es que vamos a querer hacer una prueba simple y simplemente ejecutar algo de código aquí. Así que voy a ejecutar una simple declaración print que va a decir que la función está a punto de ejecutarse. ¿Bien? Entonces esta sentencia se va a ejecutar antes de que ejecutemos esta función aquí, cual ha sido pasada por funk Entonces, para llamar a esta función, tendríamos que seguir adelante y decir funk, ¿verdad Y eso entonces va a ejecutar aquí esta función, que va a decir hola mundo. Después de que eso haya sido ejecutado, podemos entonces configurar otra sentencia print aquí que diga que la función ha terminado de ejecutarse. Entonces esto se ejecuta después de que se haya llamado a la función. Ahora lo último que tenemos que hacer es que necesitamos devolver esta salida a través de la nueva función envuelta. Entonces para hacerlo, podemos escribir aquí indent y decir return wrapper, y eso va a ejecutar todo en consecuencia para nosotros. Bien. Así es como podemos simplemente configurar un decorador ¿Bien? Bien, entonces déjame seguir adelante y mostrarte lo que va a pasar ahora Entonces lo que va a pasar es lo siguiente. Entonces lo primero que va a pasar es esta declaración print se ejecutará. Entonces el decorador va a tomar esta función original que teníamos, y como pueden ver, la modifica No altera nada que se haya definido dentro de ella. Va a pasarlo por aquí el parámetro, y luego lo vamos a llamar dentro del wrapper, y luego vamos a imprimir una sentencia de salida para decir que ha terminado de ejecutar aches y devolveremos ese wrapper para asegurar que ha sido ajustado. Entonces ahora si tuviera que ejecutar mi código, ahora puedo ver que mi salida va a decir que la función está a punto de ejecutarse, hola mundo, y la función ha terminado de ejecutarse. Y se puede ver que todo ha sido ejecutado como debería haberlo hecho. Bien. Entonces así es como podemos seguir adelante y configurarlo todo para que funcione como debería. Bien, entonces déjame darte un poco más de detalle para que entiendas todo perfectamente. Entonces aquí tenemos M subrayado decorador funk. Entonces nuevamente, el funk va a ser la función que se está decorando En este caso, va a ser decir hola, que está siendo decorado por el decorador a mi subrayado Entonces así es como decoras una función. Se pone en el símbolo at y luego le sigue la función decorada, ¿debo decir? Bien. Y mi decorador, Frank aquí va a recibir la función y va a envolver código extra alrededor de ella, lo que hace con este wrapper Entonces va a agregar en esta declaración de salida aquí que dice que la función está a punto de ejecutarse, y esta de aquí que dice que la función ha terminado de ejecutarse. Así que tenemos este envoltorio aquí, ¿de acuerdo? Y esta es una nueva función dentro de nuestro decorador. Y como pueden ver, agrega un comportamiento extra, es decir, aquí mismo y aquí mismo. Entonces antes y ejecutando la función original definida por funk Bien. Ahora, el envoltorio aquí va a llamar funk adentro Entonces la función original todavía va a estar ejecutándose. Entonces tenemos envoltura de retorno. Entonces, en lugar de devolver el funk mismo, bien, vamos a devolver el envoltorio, ¿de acuerdo? Ahora cada vez que llamemos a saludar, en realidad vamos a estar llamando a la devolución. En realidad vamos a estar llamando a wrapper. Eso es esencialmente lo que vamos a hacer. Todo bien. Ahí lo tenemos. Existe la forma más sencilla en la que podemos integrar un decorador dentro de Python Vamos a trabajar en algunos ejercicios más prácticos, pero eso es lo básico para configurar tu primer decorador y cómo puedes aplicarlo a un concepto determinado Bien, lo que podemos hacer es simplemente seguir adelante y sacarlo por ahora y luego continuaremos momentáneamente 30. Trabajar con decoradores - [Laboratorio]: Todo bien. Entonces continuemos y trabajemos en algunos ejercicios prácticos. Ahora, lo siguiente que queremos hacer es que queremos trabajar en un programa que va a convertir la salida de la función a mayúsculas. Entonces, sigamos adelante y apliquemos esto. Bien, entonces lo primero es lo primero, sigamos adelante y configuremos una función sencilla. Entonces vamos a decir def, raza y luego aquí vamos a decir regreso, y yo voy a decir ahí, digamos, buenos días Muy sencillo. Entonces voy a decir imprenta. Saludar. Y si ejecuto este código, va a decir buenos días. Entonces ahí lo tenemos muy sencillo. Entonces en este caso, eliminé la declaración print de dentro de la función. Lo moví afuera, y solo estoy devolviendo el texto dado, es decir buenos días, y luego estoy llamando a la función aquí en consecuencia, estaba en la sentencia print para ejecutarlo Wister valor que se ha devuelto ins función Ahora, recuerda cuál es nuestro caso de uso. Queremos convertir la salida de la función a mayúsculas. Aquí cuando estamos imprimiendo y ejecutando esta función, queremos que esta esté en mayúsculas Sigamos adelante y hagamos que eso suceda. Entonces necesitaríamos tener decorador en mayúscula para eso. Ese sería un buen tipo de caso de uso digamos muerte aquí y podemos decir mayúsculas subrayado decorador Entonces vamos a pasar por el funk. Ahora bien, para absorber esta función, necesitaríamos agregar en el decorador, que estará en, y eso va a ser subrayado en mayúscula decorador aquí, y luego va a pasar por esta función como tiene ahora mismo Entonces necesitamos definir el envoltorio IO podemos decir def wrapper. Entonces queremos llamar a la función original, y vamos a asignarla a una variable. Voy a decir aquí resultado es igual, y eso va a ser funk Estoy almacenando esta función en particular, que va a pasar por aquí como funk y voy a almacenar eso en esta variable llamada result Aquí es donde estoy llamando a la función original. Entonces lo siguiente que quiero hacer es convertir la salida a mayúsculas. Entonces sea cual sea el resultado aquí del funk, que es esencialmente buenos días, quiero convertir ese resultado a mayúsculas Entonces puedo decir retorno resultado punto superior. Entonces voy a aplicar este método en particular aquí, el método superior, y eso va a convertir la salida a mayúsculas. Y entonces todo lo que necesito hacer ahora para devolver la nueva función es devolver el wrapper. Yo sólo puedo decir aquí, devuélvete el envoltorio. Y ahí lo tenemos. Ahora lo que podemos hacer es ir a una cobertura y ejecutar el código Vamos a hacer Zach y ya podemos ver la salida ahora está mostrando buenos días y eso es de hecho en mayúsculas Podemos ver que eso ahora es mucho más limpio y conciso ahora que hemos agregado en ese decorador Derecha. Entonces así es como podemos crear un programa sencillo que convierta la salida de la función en caso de desarraigo Para que podamos ver dónde es útil. Por lo que formatea automáticamente texto sin cambiar la propia función original. Así se puede ver que esta función no se cambió en absoluto. Y como podemos ver, esto también puede ser muy útil si estamos mostrando títulos, mensajes o cualquier tipo de entrada de usuario de alguna manera estándar, ¿debería decir? Bien. Entonces así es como podemos seguir adelante y hacerlo. Borde. Ese es un ejemplo que podemos ir en un seto y seguir. Todo bien. Sigamos adelante y veamos otro ejemplo. Ahora, sigamos adelante y creamos otro programa. En este programa, el caso de uso va a estar enfocado en asegurar que nuestras contraseñas tengan al menos ocho caracteres de longitud. Ahora, definamos una función sencilla para comenzar. Voy a decir, D, generar subrayado contraseña como mi función básica en los dos puntos, y aquí voy a decir retorno, ABC Muy sencillo. Entonces esto sería visto como una contraseña muy débil para empezar. No sólo es genérico porque es ABC, sino que también está en el cómo puedo decir en el lado bajo en cuanto a personajes. Bien. Entonces lo que haremos es decir imprimir, y vamos a simplemente imprimir esas funciones en particular. Diré generar, subrayar contraseña, abrir y cerrar parenses Y si ejecutamos esto, va a sacar ABC, ya que eso es lo que estamos regresando en esta función. Derecha. Entonces así es como podemos seguir adelante y poner en marcha esa función. Ahora, sigamos adelante y hagamos esto un poco más complejo. Ahora bien, para verificar si una contraseña es demasiado nítida y para asegurar que la analizada tenga al menos ocho caracteres, vamos a necesitar hacer uso de algunos módulos Así que vamos a hacer uso del módulo aleatorio y el módulo de cadena. Entonces, hasta esta etapa, debería estar bastante conocedor con los módulos y bastante confiado con Así que sigamos adelante y empecemos con ello. Yo diría import random, y luego podemos decir Import string. Rico. Bien. Ahora lo que podemos hacer es definir nuestra función decoradora para empezar Entonces voy a decir sordo, contraseña de subrayado fuerte. Voy a pasar por el funk. Y antes de que podamos realmente utilizar esta función, necesitamos agregar en nuestro decorador y decir at, y va a ser contraseña de subrayado fuerte Así como así. Rico. Lo siguiente que queremos hacer es definir nuestro envoltorio. Entonces vamos a decir envoltorio sordo y solo podemos ajustarlo así. Entonces queremos llamar a nuestra función original, que está aquí mismo, generar contraseña. Entonces para hacerlo, solo podemos decir contraseña es igual a funk, y vamos a asignarla a la contraseña variable Entonces lo que sea que se va a devolver en el resultado aquí será ABC, eso se va a poner a la contraseña, que actualmente es ahora ABC. Entonces queremos establecer un WlLoop para verificar si la contraseña es demasiado corta, entonces queremos realizar una acción Entonces lo que podemos hacer aquí es decir mientras la longitud. Entonces vamos a usar la función ng para verificar la longitud de la contraseña, y si es menor a ocho. Lo que quiero hacer es agarrar mi contraseña. Y luego quiero incrementarlo en un dígito aleatorio cada vez Voy a usar el módulo aleatorio y decir elección de punto. Recuerde que la elección de punto es una, y vamos a decir aquí dígitos de punto de cadena. Ahora, los dígitos de punto de cadena aquí esencialmente van a ir en una cobertura y va a este valor, debería decir que los dígitos de punto de cadena van a ser 0-9 en Los dígitos de punto de cadena son, por supuesto, el dígito cero a nueve en una cadena completa. Y esta función aleatoria de elección de punto aquí va a escoger un dígito aleatorio 0-9 en formato de cadena y va a agregarlo a la contraseña Tendremos ABC, y luego podremos tener ABC dos. Eso va a incrementarse y volver a correr. Eso va a ser ABC siete. Eso va a incrementar y volver a correr y va a ser AB 274 así, y va a sumar otro dígito Lo siguiente que vamos a querer hacer es una vez que se haya adelantado y llegue aquí al límite superior. Si bien lo es, ¿cómo puedo decir más de ocho? Si bien ya no son menos de ocho, entonces va a romper el bucle while y luego podemos decir return password y luego va a devolver la contraseña final, y después de hacer esto, queremos devolver esta función modificada que tenemos. Para ello, tendríamos que decir al final, envoltura de retorno Bien, así que ya tenemos todo definido. Entonces lo que vamos a hacer ahora es ejecutar el código. Y como podemos ver ahora, tenemos esa salida, y dice ABC 66507 Entonces, si podemos contar esto, tenemos cuatro, y tenemos cuatro. Entonces esto tiene, por supuesto, ocho caracteres de largo. Entonces nuestra contraseña es ahora un poco más segura. No es perfectamente seguro, pero es mucho mejor de lo que era antes. Y como puedes ver ahí, agregamos en la funcionalidad para modificar nuestra función para que podamos asegurarnos de que nuestras contraseñas al menos ocho caracteres largo y estén funcionando bien como deberían ser. Podemos ver que incorporamos todo eso en esta función. Entonces, si solo fuera a alejar un poco más para que puedas ver el resultado general que tenemos aquí mismo y la salida que tenemos. Todo bien. Eso es todo para los ejercicios sobre decoradores Ojalá te estés volviendo un poco más seguro con él y que lo estés integrando bien. Hemos pasado por algunos ejemplos. Podemos seguir adelante y quitar esto y ahí lo tenemos decoradores en Bison 31. E/S de archivos: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en archivo IO. Así que comencemos. Entonces probablemente se esté preguntando qué significa el IO en el archivo IO? Entonces IO simplemente significa entrada y salida. De ahí la parte IO. Por lo que el archivo IO se refiere al proceso de lectura y escritura en archivos. Y permite que su programa funcione como archivos en su computadora, y esto nos permite abrir escribir para leer, y luego cerrar estos archivos según sea necesario. Así que en términos simples, te permite trabajar con archivos como leer textos de un archivo o guardar datos en uno. Bien, entonces te voy a mostrar algunos fragmentos de código algunas de las acciones más populares con administración de archivos en Entonces digamos que queremos abrir un archivo. Entonces digamos que tenemos un archivo llamado persona punto TXT. Entonces lo que podemos hacer es definir una variable, por ejemplo, llamar a person file, y luego vamos a decir iguales, y vamos a abrir el archivo TXT person dot, y vamos a asociarlo con la variable name of person file. Entonces digamos que hemos abierto ese archivo y ahora queremos leer de ese archivo. Entonces lo que podemos hacer es definir otra variable llamada text, y luego queremos asociarla con person file, que por supuesto es como puedo decir que tiene acceso al archivo txt person dot ya que lo abrimos previamente en el comando open file. Lo que vamos a hacer ahora es que vamos a usar el método Red para leer los primeros cien caracteres del archivo TXT person dot, y vamos a generar esos primeros cien caracteres en la ventana de salida diciendo texto impreso. Ahora bien, no te preocupes si esto no tiene sentido todavía, vamos a practicarlo, pero solo quiero darte una visión general para que puedas tener una mejor comprensión de los métodos utilizados y demás. Bien, ahora, digamos que queremos crear nuestro propio archivo. Entonces el proceso para hacerlo sería, por supuesto, definir una variable A, así podemos decir car file es igual a open, y luego quieres especificar car dot TXT, y luego quieres especificar otro valor que es W. Entonces eso va a significar escribir. Y esto también se puede interpretar como una forma de crear. Entonces escribe un archivo, crea un archivo, y ese debe ser car dot TXT. Ahora digamos que hemos seguido adelante y creamos este archivo, y ahora queremos escribir realmente en el archivo. Entonces haríamos uso del método write. Entonces nos referiríamos a esa variable que definimos anteriormente para crear el archivo, archivo car. Entonces diremos que no escribas, y ahí podemos decir, por ejemplo, mis autos favoritos son un Ford y un hessla y eso se va a escribir en el expediente Y una cosa muy importante a tener en cuenta es que cada vez que escribes en un archivo en PySon, siempre debes asegurarte que después de haber escrito en un archivo lo cierras ¿Bien? Entonces hay que decir archivo car dot close al final, al menos en este ejemplo. Entonces punto cerrar es el método que necesitas. Ahora bien, hay algo en PySon conocidos como gestores de contexto donde esto se hace automáticamente por ti, pero ese es un tema que cubriremos más adelante en el curso Pero por ahora, tenemos que decir manualmente punto cerrar. Ahora, digamos que queremos agregar a ese archivo. No podemos volver a decir escribir porque eso va a anular lo que sea que haya en el archivo. Queremos agregar al archivo, y ese va a ser el siguiente problema que tengamos que resolver y para resolverlo, podemos resolverlo anexando a un archivo Básicamente vamos a abrir el archivo, como puedes ver aquí, definimos nuestra variable. Vamos a utilizar la función open. Entonces vamos a abrir set file, que va a ser carrito txt es el primero, podría decir parámetro y luego coma y luego A. Eso va a representar append Vamos a anexar a ese archivo. Estamos abriendo Set file para que podamos agregarlo para que podamos agregarlo. Entonces puedes seguir adelante y decir carfle dot a la derecha. Entonces como pueden ver, agrego un espacio y digo, también me gusta Honda. Eso se va a agregar a ese archivo en particular con el código que le mostré anteriormente, donde nos dirigimos al archivo. A oids cuando estamos escribiendo o cuando estamos anexando o cualquier tipo de acción, tenemos que decir archivo car close al final Así que recuerda, énfasis en el método de cierre de punto. Ahora, digamos que tenemos un excedente de archivos y tenemos que empezar a eliminarlos. Ahora, para hacerlo, lo que puedes hacer es hacer uso del módulo OS que viene con Python. Y el módulo OS tiene una función conocida como remove, y todo lo que necesitas hacer es colocar en el archivo que deseas eliminar. Entonces en este caso, podemos, por ejemplo, eliminar el archivo TXT de punto de tarjeta simplemente insertando eso dentro de comillas dentro de la función remove. Entonces es tan simple como eso, así es como también puedes eliminar un archivo. Muy bien, chicos. Eso es todo en términos de la visión teórica de mirar la entrada y salida de archivos en PySon En la siguiente lección, nos vamos a centrar en el ejercicio práctico de laboratorio, y vamos a trabajar en práctica de trabajar con archivos en PySon Muy bien, chicos. Eso es todo para la visión teórica. 32. Realización de operaciones de archivos - [Lab]: Todos, y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en archivo IO y PySon Empecemos. Ahora bien, lo primero que quiero que hagas es navegar para explorar aquí. En nuestro directorio, queremos crear un archivo TXT simple person dot. Voy a navegar por aquí y decir nuevo archivo, voy a llamar a esta persona punto TXT. Aquí está mi archivo TXT. Lo que puedo hacer es que en realidad puedo agregar algunos datos. Voy a seguir adelante y sólo decir, John, Smith, y voy a poner en una fecha de nacimiento, por ejemplo, decir 12 oh 2-1990 Dos. Sólo un poco de información ahí. Hay algunos datos al menos en persona punto TXT. Vayamos a main dot pie ahora y lo que vamos a querer hacer es que vamos a querer abrir person dot TXT. Podemos decir archivo persona, que será una variable, por ejemplo, y vamos a hacer uso de la función open para abrir ese archivo. Entonces el nombre de ese archivo es persona punto TXT. Entonces voy a decir persona punto TXT, y eso nos abrirá el archivo. Entonces ahora que se abre el archivo, teóricamente hablando, necesitamos realizar alguna acción Digamos que queremos leer de este archivo. Entonces podemos definir una variable llamada texto, y queremos referirnos a archivo persona porque de acuerdo a esta variable, el valor aquí va a ser el archivo abierto. Y ¿qué queremos hacer con este archivo ahora que está abierto? Queremos leer de él, así podemos usar el método read y luego quieres especificar cuántos caracteres del archivo quieres leer. Siempre me gusta hacerlo un poco alto, así que voy a decir 100 y eso va a ser básicamente todo en este archivo para que veas que está a punto de tomar todo. Y entonces como lo que se ha leído en caracteres se asocia ahora con ext y se almacena en él, podemos imprimir texto para ver la salida. Entonces voy a decir texto impreso. Entonces ahora si ejecuto el código, va a dar salida a los primeros 100 caracteres de este archivo. Ahora, digamos que cambio la cuenta de arco aquí a solo digamos cinco personajes y ejecuto esto. Sólo voy a imprimir a John. Por supuesto, podemos ver que hay un espacio ahí cuando destaco. Si tuviera que decir 12, por ejemplo, y correr, va a decir el guión de John Smith. Sólo llega a este punto. Puedes ver que puedes limitar la cantidad de caracteres que quieres leer de tu propio programa. Bien, perfecto. Así es como podemos seguir adelante y sech eso arriba. Entonces esa es la forma básica de abrir un archivo que ya existe y cómo se puede leer desde un archivo en sí. Así que hemos dominado la apertura de un archivo existente y la lectura de él. Ahora, digamos que queremos darle un paso más allá y queremos crear un archivo y escribir en él. Lo que voy a hacer ahora es que podemos eliminar este código, y quiero crear un archivo. Para hacerlo, voy a decir car file como mi variable es igual, y voy a decir open voy a decir car dot TXT y luego en coma y voy a decir W. Porque quiero crear un archivo, voy a decir W. Ahora, antes de que este archivo realmente exista y se cree, en realidad necesitamos escribirle, entonces necesitamos escribir algo, pero este es el primer paso creando tu archivo, teóricamente hablando. Lo siguiente que tenemos que hacer es escribir en este archivo, y luego se va a crear y aparecerá aquí en nuestro directorio aquí en nuestro directorio base. Lo que vas a querer hacer es decir archivo de auto, perro aquí mismo entre paréneses podemos decir que mis autos favoritos son una fragua y un ajedrez Entonces queremos decir archivo auto, cerrar, y eso va a cerrar el expediente por nosotros. Ahora si fuéramos a ejecutar nuestro código, podemos ver que nada va a ser de salida, pero si vamos a nuestro directorio, ahora deberías ver que tenemos un archivo TXT de carrito que fue creado y tenemos algo de texto en él porque escribimos al archivo. Ahí podemos ver que seguimos adelante y escribimos mis tarjetas favoritas son un Ford y un Tesla y podemos ver que se ha escrito, y claro, ese archivo fue creado él mismo. No esperábamos ninguna declaración de salida de impresión. Por eso no había nada aquí, pero necesitábamos ejecutar nuestro código para poder ejecutar las siguientes líneas de código. Pero podemos ver que se ha creado. carrito TXT ya existe. Correcto, perfecto. Ahora, digamos que quieres seguir adelante y leer ahora desde auto punto TXT. Quieres leer un poco de este archivo. Entonces vamos a referirnos de nuevo a lo que hicimos antes. Entonces déjame seguir adelante y justo esto. Entonces queremos volver a leer un archivo. Entonces voy a decir texto es igual, y voy a decir archivo de coche punto Rojo. Y voy a leer un poco de ese archivo. Entonces voy a decir 15 caracteres. Y voy a decir imprimir cheques. Entonces ahora, si ejecuto la salida, me va a dar algo de código aquí para que veas que la operación IO estaba en un archivo cerrado. Así que recuerda, cada vez que estés cerrando un archivo, necesitas volver a abrirlo. Entonces esto es algo muy importante a tener en cuenta cuando estás trabajando con tus archivos. Entonces, lo que tienes que hacer ahora es que necesitas abrirlo antes de continuar. Para que puedas definir tu variable aquí de nuevo, archivo car. Es igual a abrir, y quieres abrir car dot TXT, y ahora lo estás abriendo. Y ahora si ejecutas tu código, vas a ver que dice mi CA favorita. ¿Bien? Porque solo lo estamos limitando por 15 caracteres, pero si lo hago un poco más largo a 100, por ejemplo, va a imprimir toda la línea diciendo, Mis autos favoritos son Ford y una prueba recuerda eso. Muy importante. Es por eso que los gestores de contexto serán cómo puedo decir mucho más útiles más adelante. Entonces eso es algo que quería mencionar para que estés al tanto de todo ese proceso. Así que recuerda, una vez que cierres, no puedes realizar una acción hasta que la vuelvas a abrir. Muy importante. Yo quería demostrarlo para que veas qué pasará si no haces eso. Te vas a encontrar con un error como te mencioné. Una vez que cierras, necesitas abrir de nuevo. Derecha. Lo siguiente que quiero mostrarte es cómo puedes anexar a un archivo Ahora, digamos que ya tenemos el texto en coche punto TXT. Mis autos favoritos son Ford y Chess y queremos agregar a este archivo. Podemos usar append. Lo que vas a querer hacer es simplemente reestructurar un poco tu código aquí, así que solo podemos eliminar parte del código antiguo aquí Y claro, tenemos que abrir el archivo, pero tenemos que abrirlo en apendamde Para ello, necesitamos agregar una coma aquí y decir, A, porque le estamos diciendo a Pyson que queremos abrir este archivo y queremos agregarlo. Ahora, para añadirlo, claro, necesitamos volver a hacer uso del método correcto, pero nuestro enfoque está en agregarlo y no escribirlo Si digo archivo de auto, escribe, Bien. En cotizaciones, necesito agregar un espacio y decir, también me gusta Honda, por ejemplo. Entonces sólo puedo decir archivo de coche punto cerrar. Así que cada vez que escribes, necesitas cerrar. Entonces esa es una buena medida. Entonces ahora si sigo adelante y ejecuto este código, claro, nada va a salir ahí. Pero si voy a auto dox, verás que se anexó esta textura adicional que dice, también me gusta Honda. Entonces así es como puedes anexar a un archivo que ya tienes Bien, perfecto. Así es como puedes seguir adelante y configurarlo en consecuencia. Ahora, no puedes seguir adelante y solo decir escribir un archivo o de lo contrario va a eliminar todo lo que hay en tu archivo y comenzar desde el principio. Déjenme demostrarlo. Si yo fuera a sustituir esto por W y decir, sólo voy a escribir en el archivo. Digamos, también me gusta Honda, va a reemplazar todo esto y solo show también me gusta Honda. Porque cuando escribes, va a ser un descanso limpio. Un bolígrafo se va a agregar a un archivo. Nosotros, va a empezar de cero. Entonces déjame mostrarte. Si corro esto ahora y voy a Cardo txty, solo va a demostrar que también me gusta Honda Es por eso que necesitas asegurarte tener en el símbolo A, que se establece cuando estás abriendo tu archivo para especificar el modo que pretendes utilizar. Entonces estos se conocen como modo. O W es modo de escritura. A es modo appenda, recuerda eso. Tenemos dos expedientes aquí, pero sólo quiero quedarme con uno. Quiero mantener persona punto TXT, así puedo quitar auto dot TXT. Probablemente te estés preguntando, ¿cómo hago eso? Muy sencillo. Solo tiene que decir importar OS y el módulo OS tiene una función de eliminación y esto se aplica a los archivos. Puedes decir Os dot remove y luego todo lo que necesitas hacer es poner el nombre exacto del archivo, y en nuestro caso, es car dot TXT, que podemos ver aquí. Se puede decir auto punto TXT. Y voy a recomendar solo cerrar este archivo por ahora. Y si ejecutas ese código, puedes ir a tu explorador y podrás ver que card dot txt de hecho ha sido eliminado. Ya no existe. Desgraciado. Entonces ahí lo tenemos. Es así como puedes ir en una cobertura y realizar archivo básico IO, decir, entrada y salida de archivos Así que ya has aprendido cómo puedes seguir adelante y abrir archivos, leer archivos, crear archivos, escribir en archivos, anexar a un archivo y eliminar un archivo Vamos a entrar en un poco más de detalle pronto en cuanto a la obtención de metadatos de archivos. Entonces eso es algo a lo que llegaremos pronto. Derecha. Ahora bien, en cuanto a este archivo TXT punto persona, normalmente limpiamos todo después de cada tamaño práctico siguiente, pero vamos a dar seguimiento en este caso, por primera vez. Así que recomendaría simplemente mantener todo tal cual. Vamos a tener algunas visiones teóricas en el siguiente conjunto de lecciones, y luego vamos a regresar para explorar un poco más profundo en el manejo de archivos Bien, así que eso es todo por ahora. 33. Cómo obtener metadatos de archivos: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en obtener metadatos de archivos. Entonces echemos un vistazo. Bien. Ahora, cuando estamos realizando operaciones de entrada y salida de archivos como lo venimos haciendo ya en este curso, posible que también necesitemos conocer más detalles sobre el procesamiento y detalles más finos de un archivo, conocidos como los metadatos Ahora, estos metadatos pueden incluir el nombre del archivo, el estado de un archivo, ya sea abierto o cerrado, y el modo en el que el archivo está abierto. Si actualmente está en modo escritura, si está en modo pluma, entonces A para un modo pluma, W para modo escritura, es alguna información que quizás necesitemos saber, no necesariamente, sino simplemente algo que podría ser importante. Entonces, en cualquier caso, eso es solo un poco de una visión general teórica. Vamos a sumergirnos en algunas de las opciones en las que podemos sumergirnos para obtener esta información. Así que nos sumergimos justo en eso en un momento. 34. Atributos de los metadatos de salida del archivo - [Lab]: Hola a todos y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en obtener metadatos de archivos. Ahora, estamos continuando desde donde lo dejamos, así que todavía tenemos nuestro archivo TXT person dot que teníamos antes y tenemos nuestro archivo principal punto pi. Lo que quiero que hagamos es seguir adelante y abrir nuestro archivo en modo, por ejemplo. Voy a decir persona, archivo es igual a abierto, y voy a abrir persona punto TXT. Y vamos a poner esto por ahora en modo escritura, así que el modo será W. Genial. Tomemos algo de información y voy a sacar esto también. Voy a decir print y voy a agregar en algunas texturas, voy a decir nombre. Lo que quiero hacer es que me den el nombre de mi expediente. Para hacerlo, sólo puedo decir archivo de persona. Como hemos asignado esa variable al valor aquí del contenido del archivo, entonces puedo decir nombre de punto. Ahora, el nombre del punto aquí va a ser un atributo que estamos utilizando. Bien. Lo siguiente que quiero hacer es que quiero verificar si el archivo está en el estado de apertura o cierre, y esto devolverá un valor Bool o un valor booleano Entonces voy a decir print, y voy a comprobar si está cerrado. Voy a decir que está cerrado. Bien, entonces en la coma. Nuevamente, necesitamos hacer referencia al archivo, así que voy a decir persona archivo punto, y el atributo para esto estaría cerrado. Entonces vamos a comprobar si está cerrado. Y si está cerrado, si el expediente está cerrado aquí, va a devolver verdadero. Si no está cerrado, devolverá falso. Entonces estamos comprobando si está cerrado, lo cual no lo es. Está abierto. Lo siguiente que queremos hacer es que queremos comprobar el modo. Entonces voy a decir print, y aquí, voy a decir modo actual. Espacio, y necesitamos referirnos al archivo, punto de archivo persona, y vamos a decir modo. Así que vamos a seguir adelante y predecir lo que vamos a tener. El nombre del archivo aquí, nos referimos al atributo del archivo, que va a ser persona punto TXT. Y vamos a comprobar si está cerrado. Podemos ver que lo último que hicimos fue abrirlo. Al decir que está cerrado, va a resultar en falso, así que no va a ser cierto. Entonces tenemos el modo de punto de archivo persona aquí. El modo actual es W para la derecha. Sigamos adelante y ejecutemos este código aquí podemos ver que el nombre es persona no TXT. Estos estados cerrados, podemos ver que es falso y el modo actual es W. Pero sigamos adelante y cambiemos esto. Pongamos el modo a A. Bien. Y lo que queremos hacer ahora es que queremos seguir adelante y cerrar el expediente. Entonces voy a decir persona archivo punto, cerrar. Así que vamos a ejecutar el código. Y podemos ver el nombre aquí es persona Dtxty está cerrado, es cierto porque seguí adelante y cerré el archivo utilizando el mensaje de cierre Y el modo actual es A para append y el nombre, claro, sigue siendo el mismo Entonces esto es muy útil si quieres obtener algunos metadatos de tus archivos. Entonces sigue siendo bastante a nivel de superficie, pero así es como puedes seguir adelante y hacer referencia de acuerdo a diversos atributos que están disponibles para solo obtener algunos metadatos en tus archivos. Entonces eso es todo para este ejercicio de laboratorio, muy sencillo y al grano. Sigamos adelante y solo eliminemos ese archivo para que pueda hacer clic derecho. Y eliminar. Ahí vamos. Asegúrate de tener intacto tu archivo principal punto pi y eso es todo lo que necesitamos por ahora. Eso es todo para este ejercicio. 35. Parámetros y argumentos: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en parámetros y argumentos. Así que sigamos adelante y comencemos. Correcto, entonces parámetros y argumentos. Ahora, un parámetro puede verse como un marcador de posición que va a definir qué entradas espera una función Ahora, por otro lado, los argumentos son los valores reales que se pasan a una función al llamarla. Entonces, sigamos adelante y echemos un vistazo a una simple analogía para que podamos diferenciar entre un parámetro y un argumento de manera más coherente Bien, entonces echemos un vistazo. Ahora, digamos que estás en un restaurante y el mesero o servidor viene a ti y te hace algunas preguntas sobre qué te gustaría tener en el restaurante Por lo que puede hacerte algunas preguntas como, qué te gustaría para tu entrante. Entonces podrá preguntar, qué le gustaría de su plato principal y si le gustaría algún tipo de postre después de su plato principal. Entonces digamos, por ejemplo, tienes bastante hambre y le dices al servidor o mesero, sí, me gustaría que mi entrante estuviera compuesto de un poco de pan de ajo Para mi plato principal, quiero una pizza, y de postre, me gustaría tomar un poco de helado. Sigamos adelante y profundicemos más. Ahora bien, en este ejemplo en particular, con mirar parámetros y argumentos, podrías tratar los parámetros como en este caso, los espacios en blanco en un formulario de pedido, I E, el entrante, el plato principal, el postre. Entonces en este caso, definen lo que se puede ordenar pero aún no tienen valores específicos. Por otro lado, con nuestros argumentos, estas son las elecciones reales que toma un cliente. Es decir, pan de ajo, pizza, helado, y estos llenan los espacios en blanco al hacer el pedido. Así es como puedes diferenciar entre tus parámetros y tus argumentos. ¿Verdad? Entonces apliquemos esto en un programa simple de Python, por ejemplo. Entonces usando el mismo ejemplo exacto aquí, por ejemplo, como puedes ver, tenemos una función y nuestros parámetros que se colocan dentro de esta función entre los parenss incluyen entrante, plato principal, y postre Y esto va a definir qué entradas espera la función. Entonces estos son los parámetros. Entonces como puede ver, aquí tenemos una declaración print que va a decir ordenada, y luego va a tomar los valores que estarán vinculados al parámetro starter, al parámetro del plato principal y al parámetro desert. Eso va a dar salida a un resultado específico. Ahora, para llamar a esta función, lo que vamos a hacer es referirnos al nombre de la función que es orden de lugar. Entonces entre paréntesis, lo que vamos a estar haciendo es llamar a la función con argumento Estos son los valores que esencialmente van a estar vinculados con los parámetros que tenemos. Aquí puedes ver que tenemos pan de ajo, tenemos pizza, y tenemos helado. Esencialmente, lo que va a pasar ahora es que vamos a introducir valores, estos valores de argumento, donde están nuestros parámetros. El pan de ajo va a estar en lugar de entrante. La pizza estará en lugar del plato principal y nuestro postre, en ese caso, vamos a tener helado en línea con el postre. Entonces, por supuesto, como estamos llamando a la función, entonces va a ejecutar lo que hayamos definido en la función. En este caso, la declaración impresa va a subir al final, usted ordenó pan de ajo. Pizza y helado de postre. Es así como podemos racionalizar vía una analogía, cómo podemos hacer uso de parámetros y argumentos con nuestras funciones en Ahora, vamos a profundizar en esto con cómo se pueden utilizar funciones y cómo se puede utilizar más específicamente argumentos parámetro debería decir, fue en PySon Pero de todos modos, esa es la esencia de misma para que tengas la idea general entre cuál es la diferencia entre un parámetro y un argumento y en un contexto 36. Diferenciación entre parámetros y argumentos: [Laboratorio]: Hola a todos y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en parámetros y argumentos. Entonces en este ejercicio de laboratorio, solo voy a enseñarte los fundamentos de parámetros y argumentos para que al menos puedas entender la idea general del mismo antes de profundizar en parámetros y argumentos en el siguiente conjunto de lecciones Así que comencemos. Bien, entonces digamos, por ejemplo, quiero crear una función sencilla, que va a estar enfocada en alguien que pida un determinado conjunto de alimentos de un restaurante. Entonces digamos que quieren almorzar y deciden que quiero un entrante, un plato principal y un postre. Sigamos adelante y veamos a dónde lo podemos llevar a partir de ahí. Entonces lo primero que normalmente haríamos es definir nuestra función. Entonces voy a decir Dev y voy a decir poner orden de subrayado, y ese va a ser el nombre de mi función Y dentro de mi función dentro de los parenesST ser más específicos, necesito definir mis parámetros En este caso aquí, ya que estamos tomando un entrante, un plato principal y postre, esto sería apropiado para los parámetros. Eso va a definir las entradas que nuestra función esperará. Entonces sigamos adelante y hagamos precisamente eso. Tendremos arrancador. Tendremos plato de subrayado principal, y vamos a tener postre Derecha. Ahora, una vez que tenemos los valores asociados conectados al plato principal de inicio y postre, queremos generar algún tipo de funcionalidad Entonces en este caso, aquí, solo quiero imprimir el pedido en sí. Entonces aquí voy a decir print, y voy a decir espacio ordenado, y voy a usar concatenaciones de cadenas, voy a decir plus, y voy a agregar en el starter Entonces voy a agregar en una coma y un espacio, y luego agregaremos en el plato principal, ¿verdad Y lo que voy a hacer es simplemente alejar un poco aquí de claridad plus y luego agregar mi coma y decir y espacio, y luego tomaré un postre Muy sencillo. Yo sólo iba a decir ordenado, va a decir el postre, el plato principal, y claro, lo que tenemos en consecuencia aquí. Genial. Ahora, fuera de esa función, nosotros por supuesto, queremos llamarla y ejecutar esa línea de código. Entonces lo que vamos a querer hacer es llamar a esa función, y para ello, se referiría al nombre de la función en sí, que es orden de lugar. Y aquí estaba entre paréntesis es donde llamarás a la función enchufando los argumentos Esencialmente, los argumentos aquí van a ser sustituidos donde hayas definido tus parámetros. Déjeme seguir adelante y darle un ejemplo. Ahora si pongo en bredge de ajo, entonces pongo pizza Y me puse helado. Estos van a ser mis argumentos y va a ser enchufado en consecuencia El pan de ajo estará en lugar del entrante, pizza estará en lugar del plato principal. El helado estará en lugar del postre. Entonces podrías verlo ya que los siguientes tendrán entonces los valores del pan de ajo, pizza, y helado, eso va a bajarse a lo que sea que esté dentro de la función aquí. entrante se convertirá entonces en pan de ajo, plato principal se convertirá en pizza y el helado se convertirá en postre. Esos valores pasarán hacia abajo a nuestra función. Y el resultado final va a ser tú pedido, pan de ajo, pizza y helado. Bien, así que sigamos adelante y ejecutemos este código. Bien. Y ahí se puede ver la salida. Entonces pediste pan de ajo, pizza y helado. Bien, así que esa es una forma sencilla en la que prácticamente se puede ver la diferencia entre parámetros y argumentos y cómo funcionan juntos. Todo bien. Entonces ahí lo tenemos. Ahora, digamos que queremos ir un poco más en GitL. Entonces la mejor manera es conseguir algo más de práctica, y veamos otro ejemplo. Así que déjame acercarme. Y sigamos adelante y trabajemos en un segundo ejemplo. Bien, así que sigamos adelante y trabajemos con nuestro segundo ejemplo. Entonces nuevamente, voy a definir una función, y esto va a llamarse muerte y voy a decir ubicación. Muy sencillo. Entonces voy a colocar en dos parámetros. Entonces es decir, voy a tener ciudad, y luego tendré país como mis parámetros. Y aquí en mi declaración impresa, voy a decir imprimir. Voy a decir que eres de agregar en el espacio de dos puntos, agregar, por supuesto, un plus para la concatenación de cadenas, voy a decir city plus y luego voy a seguir adelante y agregar en un conjunto de comillas y luego agregaré en dos puntos aquí, y luego agrego en un conjunto de comillas y luego agregaré en dos puntos aquí, el espacio y luego la concatenación de cadenas Ahora tendría que llamar a la función, así que diría ubicación. Y con inferencias, voy a añadir en los argumentos. Aquí voy a decir, el primer parámetro estaría en el primer tipo de cómo puedo decir en la primera definición que hacemos aquí. Voy a decir Ciudad del Capetown, y en mi coma entonces el segundo argumento va a pertenecer al país y estar vinculado a y voy a Ahora puedo seguir adelante y ejecutar este código. Como puedes ver, dice ahora eres de Ciudad del Capetown, Sudáfrica Lo que puedo hacer en realidad es simplemente moverme. Bien, ahí vamos. Eso se ve un poco más limpio. Oh también podrías hacer es tal vez una coma podría verse mejor. Así que sólo estoy en los pequeños deles aquí. Entonces, discúlpeme. Eres de la cocina. Ahí vamos. Mucho más limpio. Todo bien. Entonces así es como podemos integrar parámetros y argumentos muy sencillos. Entonces nuevamente, voy a reiterar lo que aquí definimos dentro de nuestros paréntesis ¿Bien? Ésos van a ser nuestros parámetros. Entonces nuestros parámetros, también podemos llamarlos dentro de la propia función. No obstante, lo que entonces tendríamos que hacer es agregar en los argumentos aquí que van a usted podría decir sustituir nuestros parámetros dentro de nuestras funciones penses, que luego van a pasar a cualquier lógica que tengamos dentro de la función designada Bien, chicos, eso es todo para este ejercicio práctico de laboratorio sobre parámetros y argumentos. 37. Argumentos posicionales y palabras clave: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en argumentos posicionales y de palabras clave. Entonces echemos un vistazo. Bien, entonces vamos a diferenciar entre los dos. Los argumentos posicionales se pasan en un orden específico con su posición determinando a qué parámetro se les asigna Ahora bien, si tuvieras que cambiar el orden, eso va a cambiar el significado. Ahora, también obtenemos argumentos de palabras clave, y los argumentos de palabra clave usan nombres para asignar valores, por lo que el orden no importa. Entonces, sigamos adelante y echemos un vistazo a otra analogía como ejemplo, y luego te voy a mostrar cómo puedes aplicar tanto argumentos posicionales como de palabras clave Entonces echemos un vistazo. Todo bien. Entonces digamos que queremos comprar un auto, y vamos a un concesionario de autos, y digamos que queremos comprar, no sé, un Ford, un Tesla, o un Mercedes Así que vamos a la concesionaria de autos y nos reunimos con un concesionario de autos ahí y estamos preguntando por comprar un auto nuevo Ahora, después de haber conocido a las personas, por supuesto, nos va a hacer algunas preguntas. Él nos va a preguntar ¿qué marca te gustaría? ¿Qué modelo también te gustaría y de qué color? Nosotros decimos, me gustaría un Mercedes. Quiero comprar la clase S y tiene que ser negra. Veamos cómo aplicaríamos esto en un programa PySon de una manera muy sencilla Entonces, con la aplicación de ese escenario en particular, podemos crear un programa de la siguiente manera mediante la utilización de argumentos posicionales Entonces como puedes ver aquí, estamos definiendo nuestra función que es en coche. Tenemos los parámetros, marca, modelo y color. Y entonces nuestra sentencia print aquí para ejecutar la función va a decir que compraste A y luego agregaremos en sage valores asociados a ella. Ahora, como podemos ver aquí, los argumentos posicionales, lo que mencioné antes, el orden importa Entonces como podemos ver aquí, tenemos Mercedes, tenemos clase S, y tenemos negro. Ahora, Mercedes va a ser sustituido por marca, clase S, por modelo y negro en color. Entonces al final, va a decir que compraste y va a decir que compraste un Mercedes clase S negro. Bien, así es como va a funcionar esto en el proceso. Entonces puedes ver aquí argumentos posicionales, el orden importa porque si tuvieras que cambiar el Mercedes aquí por clase S, y reemplazar los dos, entonces vas a conseguir la marca como clase S, y vas a conseguir, por ejemplo, ¿cómo puedo decir el modelo como Mercedes Puede haber cierta confusión. Entonces los argumentos posicionales, la posición importa. Entonces Mercedes, por supuesto, va a marca, clase S a modelo, y negro a color. Bien. Lo que define aquí fue concatenación de cadenas, eso es completamente diferente Ese es un tipo diferente de caso de uso. Entonces eso realmente no importa. Pero argumentos posicionales, qué valores pones aquí importa porque va a coincidir con el orden en que definas tus parámetros Bien. Entonces déjame mostrarte otro ejemplo para solidificar este conocimiento Si tuviéramos que cambiar esto, usar el mismo escenario y usar argumentos de palabras clave, vas a notar aquí que tenemos un poco de diferencia. El modelo está configurado en la clase S, marca está establecida en Mercedes y el color se establece en negro. Ahora bien, en este caso, ya se puede ver que cambié el orden de los parámetros, dice marca, modelo y color. Aquí con los argumentos que puedes ver, el orden no importa porque lo que estoy haciendo aquí, estoy definiendo explícitamente el argumento de la palabra clave diciendo: Bien, el modelo va a ser una clase S, la marca va a ser Mercedes y el color va a ser negro. Automáticamente va a asumir los parámetros. ¿Cómo puedo decirlo de una manera muy poco gradual y dinámica? Marca automáticamente va a saber que se trata de un Mercedes. El color se va a establecer automáticamente en negro y el modelo se va a establecer automáticamente en la clase S. Puedes ver aquí, técnicamente el orden es diferente en cierto modo, pero no importa porque estamos asignando explícitamente los parámetros como podemos ver aquí de acuerdo a las etiquetas Entonces esto sería visto como argumentos de palabras clave donde el orden no importa. A diferencia de antes, si volvemos, teníamos argumentos posicionales donde importa qué valores se podría decir código duro o el orden en el patrón Así que recuerda, tenemos posicionales y tenemos argumentos de palabras clave. Bien. Entonces eso es algo que quería mencionar y repasar con ustedes en términos de una visión teórica. Vamos a practicar esto en los ejercicios prácticos de laboratorio, así que estén atentos para eso. 38. Mapa de argumentos posicionales y palabras clave: [Lab]: Hola a todos y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en diferenciar entre argumentos posicionales y de palabras clave desde una perspectiva práctica Ahora, en el ejercicio de laboratorio anterior, nos enfocamos en comprender el concepto central de parámetros y argumentos. Ahora indirectamente, habrás notado que utilizamos argumentos posicionales si puedes entender la lección anterior que fue sobre obtener una visión general seriatal sobre una visión general seriatal posicionales y Entonces, con argumentos posicionales, enchufa los argumentos directamente cuando está llamando a la función S. Todo bien. Entonces, la primera parte este ejercicio va a ser como una actividad de revisión porque vas a entender la forma predeterminada en la que manejamos los argumentos posicionales anteriormente En fin, sigamos adelante y comencemos. Voy a crear una función y quiero decir persona sorda subrayado info Mi nombre de función va a ser información de persona. Entonces quiero pasar por algunos parámetros. Voy a tener digamos nombre, voy a tener ciudad, y voy a tener país. Esos serán mis parámetros. Entonces quiero establecer una declaración de impresión y voy a decir print, y voy a empezar diciendo, estoy y voy a decir, voy a decir IM y luego voy a usar concatenación de cadenas y decir name plus Entonces, claro, entre comillas, voy a agregar un espacio y decir, entonces dirás IM y por ejemplo, ni y yo soy de. Y entonces lo que puedo hacer es seguir adelante y decir más, y luego podemos decir Siti plus, y luego podemos ir ahdge y agregar una coma y Ahí vamos. Entonces esa va a ser la declaración. Ahora, tendríamos que pasar por algunos argumentos. Pero antes que nada, necesitamos llamar a nuestra función, lo primero que tendríamos que hacer es decir persona subrayado info, y esa es, por supuesto, la función que aquí hemos definido, el nombre de la función, y luego podemos pasar por nuestros argumentos Bien, entonces primero, voy a tener el nombre, así que va a ser honor, ciudad puedo decir Ciudad del Cabo, y luego país, voy a decir Sudáfrica Estos son vistos como mis argumentos posicionales. Nombre ciudad y país, como sabemos, son nuestros parámetros. Ahora, con argumentos posicionales, la posición de tus argumentos necesita coincidir con el orden o posición de tus parámetros Es decir, el nombre va a, por supuesto, ser sustituido en lugar de honor. Tampoco va a ser nombre, Cabo será ciudad Sudáfrica será país, y luego se utilizará como está el programa en términos de la funcionalidad aquí donde va a tomar en los valores que se le pasan. Ahora bien, lo importante que quiero que veas en todo este tipo de estructuras argumentos posicionales es que si defines aquí tus argumentos posicionales y los codificas duro, entonces van a vincularse a tus parámetros Entonces, véalo de esta manera. El argumento uno pertenece al parámetro uno. Argumento dos, parámetro dos, argumento tres, parámetro tres. Así que permítanme seguir adelante ahora y ejecutar esta función. Voy a llamar a esta función. Va a decir, soy Ono, soy de Ciudad del Cabo Sudáfrica. Como pueden ver, va a dar salida a lo siguiente lo que voy a hacer en realidad es ir a un seto y simplemente poner un tope completo y podemos poner una parada completa ahí espacio desde Ciudad del Cabo allá vamos Sólo el cambio de puntuación ahí. Bien, ahí vamos. Ahora déjame, por ejemplo, cambiar algo. Si tuviera que cambiar el primer valor aquí era Ciudad del Cabo y el segundo valor. Entonces mi segundo argumento, debería decir que no, y ejecuto esto. Va a decir que soy Ciudad del Cabo, soy de Anno So Para que puedas ver el tema aquí. Entonces es por eso que los argumentos posicionales importan, Bien, porque se puede ver, por supuesto, Cabo es el primer argumento, y ahora pertenece y se adjunta al primer parámetro que es nombre Arno, que es el segundo argumento posicional pertenece ahora a la ciudad, y por supuesto, entonces África y país siguen siendo los mismos Pero en nuestra declaración impresa, puedes ver aquí la diferencia de que ahora está diciendo que soy Cape toown soy de Arno porque Arno está técnicamente ligado a la ciudad. Puedes ver el tema aquí y por qué es importante que cuando estés definiendo tus argumentos posicionales que el orden importe El orden de sus argumentos debe coincidir con el orden de sus parámetros en su función. Eso es una inmersión más profunda en los argumentos posicionales. Ahora quiero moverlo de nuevo. Y eso lo podemos hacer. Ahí vamos. Yo soy Ano. Soy de Ciudad del Capetown, Sudáfrica Perfecto. Argumentos posicionales Ahora, digamos que queremos hacer uso del argumento de palabra clave. A diferencia de los argumentos posicionales donde el orden importa, los argumentos de palabras clave no Lo que esencialmente harías aquí es cuando estás definiendo tus argumentos, puedes asignarlo a tus parámetros aquí directamente. Entonces tenemos nombre, ciudad y país, pero podemos asignarlo aquí directamente. Y en ese caso, el orden no va a importar. Entonces no importa si tuviera que seguir adelante y cambiar el primer argumento aquí con, por ejemplo, Cape Down, segundo Anno, y dejar el *** de África, no va a importar porque vas a asignar los parámetros aquí de antemano Entonces el orden aquí no va a ser de ninguna consecuencia. Déjame mostrarte lo que quiero decir con eso. Si solo fuera a alejar por ahora y dejarme configurarlo de la siguiente manera. Anno es, por supuesto, va a ser nombre. Puedo decir nombre igual, y luego Arno. Entonces claro, vamos a tener Ciudad del Cabo. Tenemos que decir que la ciudad es igual a Ciudad del Cabo y Sudáfrica. Podemos decir que país es igual a Sudáfrica. Bien. Ahora bien, si tuviera que ejecutar este código ahora y correr, como podemos ver aquí, va a decir, no soy, soy de Ciudad del Cabo Sudáfrica. Funciona exactamente como debería ser. Así es como puedes cambiarlo con argumentos de palabras clave, pero en realidad no estamos viendo la diferencia aquí como el orden, no importa porque técnicamente, podría argumentar que Ono está aquí y ese es el nombre, Cabo es el segundo argumento, y así África tercera y está separada por el comercio Eso es lo que se podría argumentar. Pero déjame mostrarte algo. Permítanme cambiar ahora ciudad en primer lugar de la discusión. Déjeme hacer eso. Bien, déjame quitarlo y simplemente cambiarlo. Ahora, técnicamente hablando, pensarías, Ciudad del Cabo está en primer lugar que debería ser nombre. El segundo aquí es no y eso debería estar en el ajuste. Técnicamente, en orden estaban las posiciones. Pero este caso, todavía va a funcionar como debería. Si ejecuto el código, todavía va a decir, soy Arno. Soy de Ciudad del Capetown Sudáfrica. A pesar de que técnicamente hemos cambiado de orden, se puede ver que el orden no importa en absoluto. Entonces estamos definiendo los valores de los parámetros en sí. En lugar de sustituir directamente en los parámetros definidos dentro de la función, estamos declarando el valor antes de tiempo Entonces el parámetro buscará automáticamente lo que se ha definido aquí mismo en este argumento en esta llamada de argumento que estamos estableciendo. Entonces así es como podemos seguir adelante y definir tus argumentos de palabra clave. Entonces el orden no va a importar. Bien. Ahora bien, no lo mencioné con estricto detalle en las conferencias teóricas, así que probablemente te estés preguntando, Bien, tenemos país igual, nombre igual y ciudad igual. Entonces, ¿cómo llamamos a esto en cómo llamamos a esto en Payson? Porque conocemos Sudáfrica, Arno y Ciudad del Cabo es esencialmente el argumento, pero ¿cómo llamamos al resto Ahora bien, no hay un término real en pyson para estas formas de declaraciones Bien, entonces no hay un nombre real para ello. Pero el nombre más cercano que sería el más preciso sería clavado a sus nombres de parámetros Entonces tenemos ciudad igual, nombre igual, país igual. Entonces puedes llamar a estos nombres de parámetros, bien, que es esencialmente lo que tienes aquí nombres de parámetros. Entonces así es como realmente puedes llamarlo directamente. También puede referirse a él como etiquetas de parámetros. Ese es otro término que también he escuchado antes. Entonces, realmente depende de nosotros cómo quieres reformularlo. Pero los nombres de los parámetros están bastante limpios aquí. Y todo lo que realmente puedes ver aquí es que estás asociando estrictamente tu parámetro con tus argumentos Así es como puedes verlo en cuanto a lo que estás haciendo aquí con argumentos de palabras clave. Bien. Entonces sí, así es como podemos utilizar argumentos posicionales y de palabras clave Bien. Entonces lo que voy a hacer es cambiar esto también. Voy a mudarme de país aquí y voy a mover eso al frente ahora solo para mostrarte la diferencia aquí. Entonces si ejecuto el código, todavía voy a ejecutar lo mismo. Pero ahora, déjame seguir adelante y cambiar esto, y ya no vamos a configurarlo como argumentos de palabras clave. ¿Bien? Ahora vamos a establecerlo como argumentos posicionales Así que recuerda el formato en este formato aquí, estos son vistos como argumentos de palabras clave. Si solo tuviéramos que sumar los valores tal cual, esto sería visto como argumentos posicionales Así que recuerda la estructura entre los dos. Entonces ahora si ejecuto mi código aquí, se va a volver loco aquí porque Sudáfrica se llama, Ciudad del Cabo es ciudad, y nu es el país. Bien, entonces argumentos posicionales y de palabras clave. Ahora bien, lo que quiero que hagamos es seguir adelante y trabajar en otro ejemplo solo para practicar para que podamos tener una mejor idea de los argumentos posicionales y de palabras clave Bien, así que continuemos y pongamos un poco más de práctica en. Bien. Así que comencemos con la función que se va a centrar en los argumentos posicionales y luego trabajaremos en los argumentos de palabras clave Bien. Entonces voy a decir Def, y esta va a ser una función que se llama ver película de subrayado . Muy sencillo. Va a tomar en dos parámetros. Primero tendremos el nombre de la película. Entonces voy a decir película, y luego voy a decir la persona. Entonces, ¿con quién estoy viendo la película en mi colon, y luego voy a decir Imprimir. Fui a ver y luego al espacio, y voy a agregar el plus, y luego voy a tener la película, el espacio, y luego voy a decir whiz y plus y luego tendremos persona Bien. Entonces ahí lo tenemos, así que voy a tener ingenio así. Podría ajustarlo. Fui a ver se puede decir, por ejemplo, Star Wars con Jane. Simplemente muy sencillo. Entonces voy a llamar a esta función, y voy a decir ver película de subrayado, y argumentos posicionales Primero, voy a tener el nombre de la película. Entonces aquí voy a decir Star Wars. Segundo argumento, voy a decir Jane. Muy sencillo. Por lo que debería seguir adelante y pasar estrellas a película, Jane en persona. Entonces va a imprenta. Fui a ver Star Wars con Jane. Entonces, sigamos adelante y ejecutemos este código. A veces solo necesitamos volver a ejecutarlo. Ahí vamos. Fui a ver Star Wars con Jane. Y eso va a sacarlo para ti en consecuencia, así. Bien, así que eso son argumentos posicionales. Ahora, digamos que iba a cambiar la posición, digamos Jane, Star Balls, y accidentalmente cometo un error y ejecuto ese programa. Voy a decir, fui a ver a Jane con Stars. Eso no tiene sentido. Entonces, ¿cómo puede el argumento de palabras clave resolver este problema para nosotros? Ahora bien, si lo codificamos de esta manera, no necesitamos cambiarlo. Solo podemos usar un argumento de palabra clave. Así que refiérase al nombre del parámetro. Entonces diga explícitamente: Bien, la persona es Jane. Y película es igual a Star Wars. Ahora bien, de esta manera, si ejecuto el código, déjame guardar si lo ejecuto, fui hacia Starwars con Jane De esa manera, te va a ayudar a resolver cualquier tipo de problema que puedas tener con argumento posicional, y puedes simplemente ajustarte sin tener que hacer un cambio de ruptura aquí Por lo que se va a hacer ese ajuste. Entonces ahora lo hemos reemplazado con argumentos de palabras clave. Ahora bien, aunque anteriormente mencioné que estos podemos referirnos como nuestros nombres de parámetros, otra razón que también quiero agregar a este proceso aquí siendo conocido como argumentos de palabra clave es que también se pueden tratar estos nombres de parámetros aquí que están siendo declarados como palabras clave. Entonces por eso también en Python, lo llaman argumentos de palabra clave. Así que solo recuerda que la razón por la que no quiero centrarme demasiado en llamar a estas palabras clave es porque son esencialmente nuestros parámetros aquí. Bien, así que solo quiero que mantengas una buena especie de mente abierta y perspectiva sobre la lógica y el formato aquí. Entonces, la mejor manera de solidificar realmente tus conocimientos aquí es mirar el formato Si estás definiendo tus nombres de parámetros y diciendo iguales a un argumento, eso significa que esto se ve como argumentos de palabras clave. Si agrega directamente argumentos para que codifique valores duros, eso va a ser argumentos posicionales. Bien, chicos Entonces sé que eso fue un poco en detalle, pero solo quería profundizar un poco en ello para que entiendas el proceso. Ahora, voy a hacer un ejercicio de laboratorio extra, pero ella va a estar enfocada en mezclar tipos de argumentos. Entonces eso va a ser puramente práctico. No vamos a mirar el lado teórico porque lo hemos cubierto técnicamente. Entonces siento que es mejor para ti aprender visualmente sobre la mezcla de tipos de argumentos. Entonces ese va a ser un próximo ejercicio opcional que vamos a hacer. Así que no voy a quitar el código ni nada todavía. También se debe continuar. Pero si quieres seguir adelante y saltarte a la siguiente lección oficial, que va a ser sobre argumentos por defecto, puedes hacerlo. Entonces es sólo algo que quería mencionar para que estés consciente de ello. Entonces, para aquellos que quieran aprender más sobre la mezcla de tipos de argumentos, va a ser una única lección, pero no va a ser tan formal. Sólo puedes seguir conmigo como está. Si no, puedes simplemente eliminar el código que tienes y luego pasar a la siguiente lección oficial. 39. Mezcla de tipos de argumentos - [Laboratorio opcional]: Hola a todos. Bienvenido al próximo ejercicio práctico de laboratorio, que va a ser una lección adicional opcional que podrías ver tiene, y esencialmente vamos a estar aprendiendo a mezclar tipos de argumentos. En este ejemplo, vamos a mezclar nuestros argumentos posicionales y argumentos palabras clave cuando estamos llamando a una función en particular Donde lo dejamos fue cómo podemos mapear argumentos posicionales y de palabras clave Esta vez, voy a mostrarte cómo puedes mezclar y combinar ambos. No obstante, hay un conjunto de reglas que vas a necesitar seguir y tal. Bien, así que comencemos con el ejemplo anterior y donde lo dejamos por última vez. Como puedes ver aquí, tengo esta función que dice, fui a ver, y luego va a decir la película y la persona. Ahora si corro este cody va a decir que fui hacia las estrellas con Jane Ahora, las posiciones aquí. Entonces como podemos ver, tenemos a Jane y Starwars, y el parámetro es esperar persona, primera película, y luego persona La razón por la que este código funciona es porque estamos usando argumentos de palabra clave y estamos declarando explícitamente el nombre del parámetro y asignando el valor asociado Este es el uso de argumentos de palabras clave en el formato de las cosas. Ahora bien, si tuviera que quitar estos argumentos de palabra clave y reemplazarlos por los argumentos posicionales en bruto, en otras palabras, si tuviera que decir piedras y digamos Jane, y ejecutar el código Fui a ver a Jane con Sows, lo cual no tiene sentido porque ahora la funcionalidad de argumentos posicionales por defecto está en Entonces Jane va al cine y Stows va a persona. Bien, así que esa fue la razón por la que seguimos adelante y usamos nuestros argumentos de palabras clave para cambiarlo y para seguir adelante y enviar persona Bien, como Jane y luego película como Star Wars. Y luego cuando ejecutemos esto, lo va a arreglar por nosotros porque los argumentos de palabra clave ajustan y asigna el valor aquí directamente para nosotros, así que va a ajustar muy bien y buscar el nombre del parámetro donde se ha definido argumento en esta llamada de función, donde especificamos los argumentos Ahora, también podemos mezclar tiempos de argumento, que no es algo que te recomendaría hacer. Te recomiendo que te apegues a los posicionales o a los argumentos de palabras clave tal como son Pero también es bueno tener un mayor sentido de funcionalidad adicional. Bien. Ahora hay reglas desgraciadamente a esto. Ahora bien, la idea de todo el argumento posicional y los argumentos de palabras clave es que solo puedes hacerlo de ciertas maneras Si por ejemplo, aquí tuviera que cambiar una de las opciones aquí, uno de estos argumentos de palabras clave a posicional, va a funcionar en algunos casos, en algunos casos, no va a Como sabemos ahora, persona está vinculada al segundo parámetro aquí y película está vinculada al primer parámetro. Si tuviera que quitar el argumento de palabra clave. En el segundo en el segundo, ¿cómo puedo decir estado en el segundo set? Se puede ver que habrá un error que dice que el posicional no puede aparecer después del argumento de palabra clave Entonces ahora tenemos este argumento de palabra clave aquí, y tenemos este argumento posicional, por lo que nunca podrá tener un argumento posicional después de un argumento de palabra clave Siempre vas a tener que al menos tener primero tus argumentos posicionales, y luego luego podrás tener tus argumentos de palabras clave Bien. Ahora, otra cosa que quiero mencionar es si lo hiciste al revés y digamos que cambié esto por, claro, era película, es igual a teles, está bien. Ahora déjame hacer lo que decía antes. Ahora voy a tener a Jane, por ejemplo, ese es mi argumento posicional, y luego tengo mi argumento de palabra clave Ahora, técnicamente hablando, dirías, esto funciona perfectamente bien. Eso es lo que uno asumiría. Pero si seguimos adelante y guardamos y ejecutamos este código, vamos a obtener un error diciendo que Ver película obtuvo múltiples valores para la película de argumento. Ese es el tema que estamos teniendo. Ahora bien, aquí está la razón de eso. Aquí tenemos a Jane y Jane está siguiendo, por supuesto, la regla del argumento posicional, eso se va a asignar a la película, pero también tenemos película aquí Tenemos que asignarle algo a la persona. Ahí es donde comienza todo el truco en esta área. Bien. Entonces, para que puedas mezclar efectivamente estos tiempos de discusión, necesitas hacer algunas maniobras aquí. Entonces la primera regla que mencioné son tus argumentos posicionales, bien, siempre deben ser primero, y luego puedes usar un argumento de palabra clave Y en segundo lugar, hay que vigilar lo que estaba asignando aquí. Lo que vamos a tener que hacer en esta situación es cambiar lo que teníamos antes y que tenga sentido. Entonces aquí tendríamos que decir Star Wars, para que primero satisfaga la película Y luego aquí, vamos a querer cambiarlo por el nombre de la persona. Y tenemos que establecer esto a persona para que se ajuste aquí en consecuencia. Entonces ahora si tuviera que guardar esto y ejecutar mi código, dice, fui hacia puestos con J. ¿Bien? Ahora bien, así es como integrarías ambos tipos de argumentos. Entonces los puestos van al cine y la persona va a J. Y así es como funcionaría ese proceso ¿Bien? Ahora bien, algo que sí quiero mencionar aquí en el resultado aquí es que vas a tener que seguir siempre tus argumentos de este tipo de moda si quieres integrar ambos. Entonces, sigamos adelante y trabajemos en otro ejemplo completamente diferente. Déjame seguir adelante y eliminar este código. Derecha. Entonces sigamos adelante y continuemos con el siguiente ejemplo. Bien, entonces digamos que defino una función que se llama secuencia. Digo De secuencia. Tengo A, B y C. Entonces puedo simplemente imprimir los valores asociados en la declaración print y decir, A, B, C, Entonces quiero llamar a la secuencia de funciones, así puedo decir secuencia. Entonces puedo pasar por algún valle. Hagamos una simple comprobación aquí. Quiero decir uno, dos, tres. Aquí estoy usando argumentos posicionales. Déjame guardar y ejecutar ese código. Salidas uno, dos y tres. Ahora, permítanme seguir adelante y cambiar esto por argumentos de palabras clave ahora. Yo sólo voy a cambiar las posiciones. Voy a seguir adelante y decir, digamos, A es igual a dos, C es igual a tres, y B es igual a uno. Guardar Zach, runach me dan dos, uno, tres porque podemos ver que A es, por supuesto, va a ser B va a ser uno y C equivale a tres, y el orden aquí es A, B y C, va a ser dos, como puedes ver, uno y tres. Ahí tenemos los argumentos de las palabras clave. Sigamos adelante y pongamos esto de nuevo a la posición uno, dos, tres. Veamos cómo podemos mezclar estos tiempos de argumento. Con las reglas que mencioné antes, recuerden, no se puede tener un argumento de palabra clave frente a uno posicional Si configuro esto en A es igual a uno, vamos a ver dos y tres tendrán un problema porque posicionales no pueden aparecer después de los argumentos de palabras clave Recuerda que no puedes tener estos argumentos de palabra clave primero, siempre posicional, siempre posicional Entonces necesitamos tener uno como argumento posicional. Entonces lo que podemos hacer es que técnicamente podemos establecer B igual a dos, pero luego tenemos que hacer que C sea igual a tres, porque no podemos tener el argumento posicional por sí solo Entonces, si tuviera que ejecutar esto, va a correr lo mismo y esa es una forma en la que podemos mezclar nuestros tiempos de discusión. Pero aquí notarán que haciendo esto es un poco, ¿cómo puedo decir innecesario? Porque estás agregando código extra para algo que puedes lograr con argumentos posicionales Porque técnicamente, uno, dos y tres ya coincidieron con el pedido. Si solo los eliminas, habrías tenido el resultado que querías. Solo estás agregando código extra aquí donde realmente no te está ayudando. Entonces, si pones B y C, es solo código extra, y técnicamente está en el mismo orden. La única utilidad en la fase de argumento de palabra clave es si quieres cambiarlos. Así que técnicamente puedes seguir adelante y cambiar el valor. Sabemos que C es igual a tres y B es igual a dos. Lo que técnicamente puedes hacer es simplemente cambiar el orden . Así como así. Entonces si lo ejecutas, claro, vas a conseguir uno, dos y tres de nuevo. Por lo que sigues siguiendo las mismas reglas que se mencionaron. ¿Bien? Bien, chicos. Entonces eso es todo en este ejercicio de laboratorio extra práctico sobre cómo puedes seguir adelante y mezclar tus tipos de argumentos juntos. Bien, chicos. Entonces, eso es todo. 40. Argumentos predeterminados: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en el argumento por defecto. Entonces echemos un vistazo. Bien, entonces probablemente te estés preguntando, Bien, ¿qué rayos es un argumento por defecto? Entonces, un argumento predeterminado es un parámetro con un valor predefinido en una definición de función que se usa cuando no se proporciona ningún valor durante la llamada a la función. Ahora, sé que los sonidos son un poco confusos, pero no te preocupes. Te lo prometo, va a tener sentido. Ahora bien, una cosa importante que debe saber es que los argumentos predeterminados deben colocarse al final de la lista de parámetros, lo que significa que no puede tener un argumento predeterminado y luego tener sus parámetros regulares inmediatamente después. Siempre debe ser después de tus parámetros regulares. En otras palabras, tu lista de parámetros. Ahora bien, esto tendrá más sentido cuando trabajemos en los ejercicios prácticos, así que no te preocupes por eso todavía. Bien, así que sigamos adelante y echemos un vistazo a un ejemplo sencillo. Nuevamente, vamos a referirnos a un ejemplo típico aquí de alguien que compra un auto. Aquí tendremos una función que dice comprar carro y que va a tomar en los siguientes parámetros. Tenemos marca, tenemos modelo, y luego tenemos un argumento por defecto, que se conoce como color es igual al negro. Bien. Ahora bien, si vas a echar un vistazo a la función que está siendo Cladie, entonces estamos llamando a la función y solo enchufando dos argumentos en lugar de tres Por lo que estamos agregando en Mercedes, que sustituirá el parámetro de marca y la clase S, que sustituirá al parámetro del modelo. Y en lugar de agregar un argumento SRD para hacer referencia al color directamente, en su lugar estamos utilizando un argumento predeterminado que asignamos, que es establecer el color en negro Ahora bien este resultado va a dar salida a la siguiente declaración con la declaración impresa al respecto que dice, Compró un Mercedes Negro clase S. Entonces esta es una forma en la que puedes utilizar un argumento predeterminado en el sentido de omitir el argumento directo que definas dentro la función a la que estás llamando y en su lugar simplemente configurarlo en el nivel de parámetro que puedas decir Entonces se define esto como un argumento por defecto. Bien. Derecha. Ahora, algo que también quiero mencionar, es muy similar a un argumento de palabra clave. Es algo así como al revés, se podría decir. Entonces, en lugar de tenerlo en la llamada a la función, lo tienes en tu lista de parámetros regulares dentro de los paréntesis de tu propia función Así que solo una manera rápida de tipo de referenciarlo de una manera de tratar de tener una mejor comprensión de la misma. Entonces a esto se le llama un argumento por defecto en sí mismo. Ahora mismo, otra situación que quiero mostrarte es lo que sucede si, por ejemplo, tienes tu argumento predeterminado como antes, pero cambias tu llamada a la función para incluir la lista de argumentos. Entonces tienes Mercedes, tienes clase S, y tienes rojo. Entonces ahora, técnicamente hablando, en realidad no tendrías la necesidad de este argumento predeterminado, que es el color igual al negro porque tienes un conjunto completo de argumentos en tu función de llamada aquí, y tienes tus parámetros tal cual. Probablemente te vayas, Bien, ¿qué va a pasar ahora? ¿Va a haber un conflicto? ¿Va a haber un error? Bueno, el resultado es el siguiente, va a salir en el código, compraste un Mercedes rojo una clase. Ahora, el argumento que define estaba en su función de llamada esencialmente va a sustituir o anular el argumento predeterminado que especifique junto con sus parámetros en la lista de parámetros Eso es algo muy importante a tener en cuenta cuando estás trabajando con tus argumentos predeterminados que aquí hay una preferencia a la mano que va a ser utilizada. Muy bien chicos. Digamos que en el lado teórico de los argumentos por defecto, vamos a entrar en más detalles, y hay algunas cosas más que quiero mencionar en términos del parámetro menos que donde se pueden definir los argumentos predeterminados y si hay algún tipo de orden o preferencia que deba seguir. Pero esta es la parte principal que acabo de repasar en términos del núcleo principal en términos de teoría para los argumentos por defecto. 41. Trabajar con argumentos predeterminados - [Laboratorio]: Hola a todos, y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en unos argumentos por defecto. Así que comencemos. Así que definamos nuestras funciones. Diré Df por carro subrayado. Entonces quiero pasar por mis parámetros. Entonces voy a decir marca, modelo. Y por ahora, sólo voy a mantenerlo sencillo. no voy a usar un argumento por defecto Todavía no voy a usar un argumento por defecto. Voy a decir color. Entonces lo que voy a hacer es que voy a decir print, y voy a seguir adelante y decir o A, y luego voy a decir plus. Se trata de agregar el color aquí y en las comillas más. Entonces quiero agregar en rama más espacio, y luego podemos agregar en el modelo al final. Ahí vamos. Entonces quiero llamar a la función. Voy a decir por subrayado coche, y quiero pasar por el siguiente argumento Voy a tener Mercedes y luego tendré clase S y luego tendré negro. Tenemos ese conjunto. Vamos a ejecutar nuestro código ahora. Dice, Compraste un Mercedes clase S negro. Mercedes pasó a la marca, clase S a modelo, negro a color, y luego los trajimos a nuestra declaración impresa. Bien. Perfecto. Entonces ahí tenemos una función por defecto con los argumentos y parámetros posicionales regulares Ahora veamos donde un argumento por defecto puede llegar a ser útil. Entonces digamos que no quieres exponer explícitamente un argumento aquí. Fue en tu función a la que estás llamando. Simplemente puedes quitar esto. Lo que entonces puedes usar es un argumento predeterminado en su lugar y solo puedes decir el color es igual, y entre comillas, puedes decir negro. Ahora bien, si tuvieras que ejecutar tu código, ahora va a decir, aún así, compraste un Mercedes negro una clase. Así es como se puede usar un argumento por defecto. Simplemente puedes seguir adelante y configurar lo siguiente como puedes ver. Todo lo que estás haciendo aquí es básicamente especificar explícitamente tu parámetro aquí dentro tu lista de parámetros de esta función. Ahora bien, esto puede ser útil, por ejemplo, si no tienes un argumento en particular que quieras pasar por tu función gesto y estás bien con un valor predeterminado mientras tanto. Bien. Ahora bien, lo útil aquí que quieres tener en cuenta aquí es que si luego proporcionas un argumento en sí dentro de la llamada a la función, aún puedes mantener tu argumento predeterminado aquí sin que ocurra ningún tipo de conflicto. Entonces, si tuviera que poner explícitamente en el argumento para el tercer parámetro, que es técnicamente el color, aunque ya se le asignó el negro. Si tuviera que dirigir esto, va a decir Mercedes S de color rojo clase. Ahora la razón de eso es que cualquier argumento que se defina dentro de la función qual va a anular cualquier argumento predeterminado que se defina aquí dentro de esta lista de parámetros, debería decir Entonces eso es algo importante que quieres tener en cuenta cuando estés trabajando con esto. Ahora, otra cosa que también quiero mencionar son las reglas colocar argumentos por defecto al final de la lista de parámetros. Entonces esto es como lo que quiero decir con esto. Si tuviera que seguir adelante y digamos que puse esto en negro, y elimino este argumento por defecto, no puedo al inicio aquí, por ejemplo, de la lista de parámetros, seguir adelante y decir marca, y si fuera a decir, digamos, más SDs Entonces va a toparse con un problema. Entonces puedes ver si coloco el cursor sobre el parámetro aquí en el modelo aquí, dice argumentos no predeterminados, no predeterminado sigue al argumento predeterminado Entonces, lo que puedes ver aquí es que tienes un parámetro regular o argumento no predeterminado que sigue a un argumento predeterminado. Entonces no puedes tener esto en el orden, aunque si tuviéramos que ejecutar este código, Bien, técnicamente todavía va a mostrar a Mercedes aquí. Y si tuviera que poner este vado, por ejemplo, solo como una simple prueba para el argumento por defecto, no va a ir en una cobertura y como puedo decir aun persistir para decir Mercedes, aunque hayamos definido un argumento por defecto, como mencioné antes, puede tener este argumento por defecto frente ningún otro como puedo decir argumento en su lugar aquí Te voy a mostrar una manera en la que va a funcionar. Entonces es muy similar a si viste el ejercicio práctico de laboratorio y sigues junto con la mezcla de tipos de argumentos, puedes tener algo similar aquí con tus parámetros. Entonces te voy a mostrar lo que quiero decir con eso. Si tuviera que volver a trasladar esto a la marca, tenemos el color y ejecutamos esto. ¿Bien? Eso está bien. Lo que puedes hacer es establecer argumentos por defecto. ¿Bien? Si estás trabajando con cómo puedo decir algo después de tu parámetro inicial. Por lo que debes asegurarte de que siempre tienes tu primer parámetro para buena medida para no tener un argumento por defecto. No debes comenzar con un argumento por defecto cuando estás configurando tu ¿cómo puedo decir tus parámetros A menos que solo estés trabajando con un parámetro. Pero si estás trabajando con varios, no va a funcionar tan bien. Todo bien. Entonces déjame mostrarte a lo que me refiero. Entonces podemos establecer valores predeterminados aquí, así puedo establecer el color a cresta y el modelo a clase F. Y puedo quitar estos argumentos, guardar el código, y puedo ejecutarlo. Voy a decir que compraste un Mercedes clase F rojo. Entonces aquí está usando argumentos por defecto, como puedes ver, y es solo reemplazarlos como puedes ver ahí mismo y agarrando todos los valores necesarios y tal Bien, así es como podemos usar argumentos predeterminados en su lugar. Ahora, solo quiero mostrarte algunas cosas extra más. Entonces sigamos adelante y hagamos eso. Digamos que defino otra función, voy a decir muerte y voy a decir persona, y sólo va a tomar en un parámetro que es el nombre. Sólo voy a decir nombre impreso. Quiero llamar a la función y es decir que no. Entonces esto es muy sencillo para la función, vamos a ejecutar el código. Da salida no. Ahora bien, lo que puedo hacer es que puedo establecer un argumento por defecto aquí para decir, solo voy a decir John. Y antes de que pueda realmente poner en mi voy a poner a John Dove, en realidad Y digamos que no agrego en un argumento en particular aquí en la convocatoria. Va a dar salida a John Doe. Entonces en este caso, funcionará para tener un argumento por defecto aquí en su lugar. ¿Bien? Pero no puede ser el inicio de tu lista de parámetros. Cuando tienes otros parámetros, como viste antes, no puede seguir una situación en la que luego vas a tener un argumento no predeterminado. Entonces solo funcionará si tienes, debería decir una situación que solo tienes un parámetro, pero generalmente no es el caso en Python, generalmente tendrá la mayoría de parámetros con los que trabajas. Por eso mencioné en este ejemplo aquí donde puedes tenerlo permitido. Vamos a continuar. Lo que voy a hacer es darte otro ejemplo. Vamos a crear una función sencilla. Diré persona sorda subrayado info, que tomará en dos parámetros Voy a decir nombre y país. Voy a decir print y voy a decir soy y eso va a ser por el nombre. Entonces voy a decir, y soy de, y luego voy a decir país. Muy sencillo. Entonces quiero llamar a esa función persona bajo info cuadrada, y podemos pasar por honor y podemos decir Sudáfrica, muy simple. Guardemos eso y ejecutemos nuestro código. Dice, soy honor y soy de Sudáfrica, muy sencillo. Bien, perfecto. Así que tenemos eso en su lugar. Ahora, usemos un argumento por defecto. Entonces podemos seguir adelante y establecer el valor predeterminado aquí, por ejemplo, y voy a decir país es Sudáfrica, y puedo ejecutar el código, y va a ejecutar soy de Sudáfrica usando ese argumento por defecto. Ahora, digamos que ese no es el caso, y en realidad soy del Reino Unido. Y aquí sólo me ajustaría. En realidad, eso no tendría sentido del todo. Digamos, Inglaterra. Aquí vamos. Guarda eso y corre, y dice, soy honor y soy de Inglaterra. Entonces ahora está tomando en cuenta el argumento explícitamente definido que se está utilizando en la llamada. Ahora, digamos que no quiero agregar ningún argumento explícitamente. Entonces lo que puedo hacer es que puedo quitar todo aquí. Yo sólo puedo llamar a la función, y voy a poner esto en honor. Y puedo ejecutar el código, y él dice, estoy en él, y soy de África. Entonces técnicamente no necesitas ni siquiera poner ningún argumento específicamente aquí. En su lugar, solo puede utilizar argumentos predeterminados. Entonces eso es algo que puedes seguir adelante y hacer y agregar ese valor predefinido en. Y nuevamente, solo recuerda lo que dije antes en términos de la regla en términos de dónde se colocan los argumentos por defecto. Entonces, si quería ir a una cobertura y definirla de una manera diferente y simplemente configurarla como teniendo mi argumento, si tuviera que establecer el argumento de una manera diferente y comenzar con el argumento por defecto, van a ver si elimino esto Bien, vamos a tener una especie de error. Bien. Así que recuerda, argumentos no predeterminados, ¿de acuerdo? No pueden seguir los argumentos por defecto. Entonces otra vez, solo recuerda esa regla. Muy bien, chicos. Entonces eso es todo para argumento por defecto. Espero que este haya sido un ejercicio de laboratorio valioso para ti y que hayas aprendido mucho. Bien, así que eso es todo. 42. Argumentos de longitud variable: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en el argumento de longitud variable. Así que comencemos. Bien, entonces, ¿qué son los argumentos de longitud variable? Todo bien. Los argumentos de longitud variable permiten una función excepto más argumentos que aquellos que se definen explícitamente, y esto permite una mayor flexibilidad en el número de entradas que se pasan. Ahora bien, hay dos tipos de argumentos de longitud variable que obtenemos en Pierson, a saber, los arcos Entonces es un astérix, y luego denotado por arcos Y esto le permite pasar un número variable de argumentos posicionales sin especificar el recuento exacto Entonces llegamos a quarks, y esto es definido por dos astérixs de antemano y Y esto le permite pasar un diccionario de argumentos de palabras clave en forma de par de valores clave sin límite fijo. Bien, simplifiquemos los arcos y los quarks. Args se usa cuando no se sabe cuántos argumentos posicionales podrían pasarse a la función, y esto recopila argumentos posicionales adicionales en Entonces tenemos quarks, que se usa cuando no se sabe cuántos argumentos de palabras clave podrían pasarse, y esto recopila argumentos de palabras clave adicionales en un diccionario Recuerda los puntos clave. Cuando ves arcos, recopila posicionales adicionales en una tupla y Quark recopila argumentos y Quark recopila palabras clave adicionales Recuerda la diferencia entre los dos. Adelante y mira una analogía. Entonces digamos, por ejemplo, estamos configurando ingredientes. Podemos crear una función llamada ingredientes. Luego podemos pasar múltiples argumentos posicionales como harina, azúcar y mantequilla, como los llamamos dentro nuestra función llamada aquí Y podemos simplemente en lugar de seguir adelante y poner en parámetros particulares, podemos simplemente agregar en el asterix seguido arcos y luego pasarlo a través de la función donde queremos usarla, como en la instrucción print y decir a través de la función donde queremos usarla, como en la instrucción print y Observe, cuando estamos pasando por arcos o quarks, no agregamos en los Solo agregamos en los astérixs cuando lo estamos pasando como parámetro en nuestra función, algo importante que hay que saber Las ediciones echan un vistazo a cómo podemos hacerlo con quarks. Ahora, solo quiero mostrarles también de antemano la salida para que puedan ver los ingredientes aquí. Va a ser salida en una tupla, como mencioné antes, para que podamos ver harina, azúcar y mantequilla Bien. Entonces esa sería tu salida. Entonces verías ingredientes, y luego arco recordar estará en una tupla Ahora bien, el otro ejemplo es si estamos trabajando en términos de usar quarks. Así que aquí queremos pasar argumento de palabra clave múltiple. Entonces aquí tenemos bebida es café, tamaño es grande, la leche es almendra. ¿Bien? Y lo que haríamos entonces está en la lista de parámetros, solo añadiremos en los dobles asterixs y luego pasaremos Después de lo cual imprimiremos los detalles del pedido y seguiremos adelante y pasaremos por quarks sin los astérixs que van a liderar en la siguiente salida, que va a ser detalles del pedido, que estarán en Entonces eso va a correlacionarse con lo que mencioné antes, si se quiere simplificar toda la idea de utilizar args y quargs Bien, chicos, así que eso es todo en términos de las explicaciones teóricas de utilizar argumentos de longitud variable Así que recuerda de nuevo, si estás usando argumentos de longitud variable, vas a usar asterix y quarks dobles 43. Uso de argumentos de longitud variable - [Lab]: Hola a todos, y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en el argumento de longitud variable. Entonces comencemos. Bien. Así que vamos a crear una función sencilla. Entonces voy a decir sordo y se va a llamar ingredientes. Entonces lo que vas a querer hacer es si quieres sacar todo en una tupla, quieres usar args de Asterix ¿Bien? Entonces eso va a dar salida a todos los datos que atraviesas a los arcos como tupla Entonces necesitas agregar en tu colon, Demican dice print. Y voy a decir, por ejemplo, en dience sumar en Y colon, entonces necesitarás agregar en tu coma y luego podrás decir Ahora bien, si quieres dar salida y quieres usar args dentro de tu función, entonces puedes simplemente eliminar ese asterix dentro, pero necesitas mantenerlo en esta Bien. Ahora, queremos pasar múltiples argumentos posicionales Déjame seguir adelante y llamar a la función para que pueda decir ingredientes, y aquí puedo pasar por, por ejemplo, la harina. Recuerda, puedes ponerlo entre comillas simples o dobles, no importa, azúcar y ver mantequilla. Se puede poner en una variedad incluso. Podemos seguir adelante abajo y ejecutar el código, y podemos ver que la salida aquí va a ser en harina, azúcar y mantequilla, y esto está todo dentro de una tupla Y el beneficio aquí con el uso de args es que puedes pasar tantos argumentos como quieras, tantos argumentos posicionales, debería ser claro en esa nota como te gustaría? Entonces, si solo pasara por un argumento en particular, hace precisamente eso. Y si tuviera que poner en múltiplos, azúcar, mantequilla, leche, O, guardar y correr. Esto dará salida a eso todo dentro de una tupla. Hagamos otro ejemplo. Digamos muerte y voy a decir información personal. Voy a tener estampados los arcos. Voy a decir info colon, agregar en coma y luego voy a decir arcos Llamemos a estas funciones. Diré información personal. Y aquí puedo pasar todo adentro. Quiero decir John Doe. Digamos DOB. Entonces, por ejemplo, diré 140295, por ejemplo, como una cuerda, y luego solo diré Sudáfrica Solo como ejemplo, sigamos adelante y ejecutemos este código, y aquí podemos ver que imprime la información a John Doe, DOB por fecha de nacimiento, 140295 Sudáfrica Y todo eso, de nuevo, como se puede ver, se está saliendo como una tupla y todos son argumentos posicionales Entonces piensa en argumentos posicionales, arcos, argumentos de teclado, quarks Entonces vamos ahora en esa nota, un vistazo a los quarks. Bien. Entonces otro ejemplo, y eso va a ser en los quarks. Entonces voy a decir, Jeff, y aquí déjame seguir adelante y decir orden, yo para anotar detalles, y voy a pasar por doble astérix para Impresión de colon. Y aquí podemos decir detalles del pedido, quark de colon Entonces ahora vamos a utilizar quarks y simplemente omitir los asterixis, ya que solo usamos eso dentro de la definición aquí, y luego podemos seguir adelante y llamar Y ahora vamos a usar argumentos de palabras clave, y podemos pasar por tantos argumentos de palabras clave como queramos. Voy a decir bebida es igual, y entre comillas, voy a decir café. Tamaño grande y almendra de leche. Así que sigamos adelante y ahorremos y demos salida a esto. Así que aquí podemos ver que la salida estará en un diccionario, y utilizamos los múltiples argumentos de palabras clave para utilizar quarks para generar todo dentro de un diccionario Bien. Entonces así es como podemos hacerlo. Y nuevamente, no importa cuántos tengamos. Ahora es muy útil que esto se esté sacando en un diccionario y también juega un papel más cercano aquí con lo que estás definiendo. Aquí donde estamos definiendo podrías decir los nombres de los parámetros, tenemos letreros de bebida y leche. Eso forma como las claves en tu diccionario donde los valores son los propios argumentos, como puedes ver, se está sacando aquí. Si puedes referirte a lecciones amigables para principiantes sobre diccionarios, puedes ver la combinación aquí y cómo se vincula todo junto con la referencia Si tuviera que cambiar la bebida aquí por bebida, guarde eso y ejecútela. Vas a ver que la clave aquí en esta salida de diccionario va a cambiar. Sólo recuerda esa estructura. Genial. Eso son quarks. Hagamos otro ejemplo para los cogolleros. Sigamos adelante y configurarlo para comprar un auto, otra vez, así que digamos sordo y comprar carro es la función. Entonces vamos a pasar por quarks, y esto va a estar dentro de un diccionario Entonces por eso estamos diciendo quarks y quiero decir print No podíamos decir detalles del pedido. Podemos decir que aún así, ordene los detalles, y queremos pasar por los quargs de forma natural Entonces podemos seguir adelante y llamar a la función, y podemos seguir adelante y especificar lo siguiente. Quiero antes que nada, decir yo diría rama, y eso va a ser igual a Ford. Y entonces podemos decir modelo F clase, y luego podemos decir, entonces va a ser Ford clase F, y podemos decir color. Eso va a ser azul. Ahí vamos. Entonces sigamos adelante y guardemos y ejecutemos este programa. Entonces podemos ver aquí que va a devolver un diccionario porque estamos tratando con quarks. Hemos agregado en la palabra clave argumentos y múltiples argumentos de palabra clave, y va a generar lo siguiente como podemos ver. Entonces la marca, forja, modelo clase F, color azul. Nuevamente, si solo tuviera que agregar un argumento y ejecutar el código, va a hacer precisamente eso. Recuerda, aquí no hay limitación, por lo que puedes pasar múltiples argumentos de palabras clave. Ch. Entonces ahí lo tenemos. Así es como esencialmente puedes ir a una cobertura y trabajar con tipos de longitud variable De nuevo, lo volveré a decir solo para que estés enterado. Recuerda con args, trabajas con argumentos posicionales que se transforman en una tupla quarks, trabajas con argumentos de palabra clave que se transforman en un diccionario después de la salida Y defines el astérix con arcos y el doble astérix con quarks solo cuando estás dentro de la definición de tu función dentro tu función Cuando lo estás sacando dentro de la funcionalidad de funciones, por ejemplo, solo eliminas esos astérixs Bien, chicos. Entonces eso es todo para este ejercicio práctico de laboratorio. 44. Desembalado de contenedores: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en el desempaque de contenedores Así que comencemos. Bien, entonces probablemente te estés preguntando, ¿qué pasa con el desempaque de contenedores Así que en pocas palabras el desempaquetado de contenedores permite pasar elementos de una tupla de lista o diccionario como argumentos separados a una función usando asterix para listas y tuplas o doble astérix para tuplas o Entonces echemos un vistazo aquí, aún más simple. Entonces Asterix desempaqueta una lista o dos en posicionales y Asterix doble desempaqueta un diccionario en argumentos argumentos posicionales y Asterix doble desempaqueta un diccionario en argumentos de palabras clave. Bien, entonces eso es algo que quizás necesites repasar de nuevo solo por claridad. Pero en cualquier caso, sigamos adelante y veamos cómo podemos visualizar todo este proceso. Bien, así que digamos que me tengo a mí mismo, por ejemplo, y iba a crear un programa para describirme como un ejemplo sencillo Entonces tendría mi función que diría describir persona. Yo tendría tres parámetros, como nombre, edad y ciudad. Yo tendría una declaración impresa que diga nombre y luego es edad. Y luego, por supuesto, todos los siguientes años de edad y vive en seguido por ciudad. Ahora bien, lo que puedo hacer es agregar todos estos datos y almacenarlos en una tupla, y luego puedo desempaquetar la tupla en Entonces técnicamente, lo que haría entonces sería utilizar el único astérix y luego referirme a la tupla, que es Y eso va a desempacar, se podría decir, todos esos argumentos en nombre, edad y ciudad siempre y cuando estén en el mismo orden Entonces aquí podemos ver los argumentos reales, y así es como básicamente llamaríamos a la función y enchufaríamos esos argumentos. Y eso nos dará la salida de no tiene 29 años y vive en Ciudad Entonces esencialmente, siempre tengamos todo en ese orden en particular, como no 29 Ciudad del Cabo, y eso haga referencia al orden de parámetros aquí, que es nombre agente ciudad, se va a llamar dentro de esta función describir persona y va a verse como Asterix person subrayado info ya que está Y en el orden en que estaba en la tupla reflejará el orden que vamos a sustituir dentro de los parámetros de esta función Entonces una vez que lo desempacemos aquí por Asterix person info, el orden que teníamos en la tupla irá a Entonces no es primero, luego edad 29 segundo y luego cert Ciudad del Cabo es SRT Entonces no iría por nombre. Ya que está en la misma posición, 29 pasarían a la edad y Ciudad del Cabo irá a ciudad. Bien. Entonces así es como lo podemos ver. Bien. Ahora, digamos que nos estamos enfocando en algo que tenga que ver con la educación o la universidad como ejemplo en términos de un programa. Entonces alguien que haya ido a la universidad o se haya graduado. Nuestro programa sería un poco diferente. Entonces en este caso aquí, como pueden ver, tenemos una función que dice grado o información de grado. Toma en los parámetros de nombre, grado, universidad y año de egreso. Entonces tenemos una declaración impresa que simplemente sigue adelante y menciona una persona y que obtiene un título de qué universidad en el año de graduación, y los datos luego se almacenarán en un diccionario. Se pueden ver los detalles de educación, aquí estará en pares de valores clave porque recuerda que un diccionario funciona en pares de valores clave. Entonces tendremos el nombre, el título, el año de graduación universitaria como claves, y luego los valores sobre tecnología de la información BSC, Universidad de Ciudad del Cabo, 2019 Después desempaquetaremos el diccionario en argumentos de función Esencialmente, entonces nos aseguraremos agregar asteriscos dobles esta vez porque estamos trabajando con un diccionario, como puedes ver aquí mismo, y luego todos los valores se conectarán a los parámetros, como puedes Por lo que se agregará nombre, grado, universidad y año de egreso en. Bien. Entonces así es como seguiríamos adelante y lo haríamos. Y salida, por supuesto, verás que se obtendrá una EEB en tecnología de la información de la Universidad de Ciudad del Cabo, 2019 Ahora, también notarás aquí que el nombre va a coincidir con el parámetro name, grado con parámetro grado, parámetro universidad universitaria, año de graduación, año de graduación, configurado con ese parámetro, y luego los valores aquí se conectarán a los parámetros asociados que hemos configurado aquí Chico. Sé que puede ser un poco para tomar, pero no para preocuparse, vamos a tener mucha práctica en los ejercicios prácticos de laboratorio. Así que vamos a llegar a ello. 45. Realización del desembalaje de contenedores: [Laboratorio]: Hola a todos y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en el desempaque de contenedores. Empecemos. Definamos nuestra función. Diré sordo y quiero llamar a esto describir subrayado persona Esa va a ser mi función. Entonces quiero pasar en tres parámetros. Voy a tener nombre. Edad y ciudad, añadir en mi colon. Entonces agregaré en mi estado de cuenta impreso, y esta vez solo voy a decir nombre, solo voy a usar comas simples No voy a usar concatenación de cadenas solo para variar poco, agregar la coma, luego diré que es edad, y luego diré años y vive Tenemos todo lo que se está pasando en consecuencia. Ahora, sigamos adelante ahora y definamos una tupla y queremos almacenar todos nuestros datos que queremos sustituir por nombre, edad y ciudad Sigamos adelante y definamos una tupla. Diré persona subrayado info fuera de la función es igual y tupla voy a decir RNO que va a 29 eso va a sustituir a H y Ciudad del Cabo, eso va a sustituir a ciudad A continuación, lo que tenemos que hacer es llamar a nuestra función para que podamos decir describir subrayado persona, que será nuestra función, y luego queremos desempaquetar los datos en la tupla que está aquí mismo en los parámetros de la función aquí Entonces podemos simplemente decir, recuerden, ya que es una tupla, podemos seguir adelante y agregar en un astérix, y podemos decir persona subrayado info que Bien, así es como podemos seguir adelante y definir lo siguiente. Por lo que la salida al final debería ser no tiene 29 años de edad y vive en Entonces, sigamos adelante y ejecutemos este programa. Ahí lo tenemos. Anu tiene 29 años y vive en Ciudad del Cabo, así que podemos ver que ahora tenemos ese resultado designado que queremos. Bien, perfecto. Bien, así es como podemos seguir adelante y hacer lo siguiente. Así que sigamos adelante y hagamos un poco más de práctica otra vez. Todo bien. Y déjame seguir adelante y quitar todo esto. Pensemos en otro ejemplo. Digamos que nos estamos enfocando en uno con digamos almuerzo, por ejemplo, en un restaurante. Entonces aquí voy a decir lugar de muerte, orden de subrayado, y vamos a pasar por algunos parámetros Voy a decir arrancador. Plato principal y postre. Entonces puedo simplemente decir print, y voy a decir aquí, solo voy a pasar para que sea sencillo decir starter. Voy a usar concatenación de cadenas, plato principal Y postre. Bien, tal vez podamos apretarlo. Genial. Entonces ahora tendríamos que poner en la información. Entonces digamos comida subrayan info, y eso será en una tupla Entonces voy a poner aquí los argumentos. Entonces para el entrante, digamos que tenemos puente de ajo. El plato principal sería pizza y postre. Sólo podemos decir helado. Ahora queremos desempaquetar esta tupla en argumento de función. Voy a llamar a la función, que es poner orden de subrayado Luego entre paréntesis, agregaremos en la estrella y luego diremos comida, subrayaremos info, y eso lo va a enchufar en estos parámetros y sacarlo en esta declaración de impresión Ahora podemos ejecutar nuestro código, y dice pan de ajo, pizza y helado. Perfecto. Lo que podemos hacer para limpiar esto en realidad, es simplemente agregar una coma entre ellos. Ahí vamos. Esta salida necesaria. Muy bien, así es como podemos seguir adelante y utilizar el desempaquetado de contenedores cuando estamos utilizando el único asterix para desempaquetar estamos utilizando el único asterix una lista o tupla Así que aquí estábamos utilizando una tupla. Bien, entonces esa es la primera parte. siguiente es cómo podemos desempaquetar un diccionario en argumentos de palabras clave Ahora, antes de continuar con eso, una última cosa que quiero mencionar, recuerda cuando estamos usando esta estrella singular aquí astérix, aparte del hecho de que desempaqueta la tupla listal, recuerda lo clave que la hace en argumento posicional Entonces hay que estar consciente de que lo que pones aquí, los valores o los argumentos que pones aquí, una vez que añadimos en el astérix a la tupla aquí cuando lo estemos definiendo, va a ir en el orden que especificaste originalmente en que especificaste originalmente tu tupla de ahí convirtiéndolo en Ahora tenemos que hacerlo para argumentos de palabras clave. Para que podamos seguir adelante y eliminar esto. Bien, así que continuemos. Así que definamos nuestra siguiente función para continuar con el desempaque de contenedores Entonces queremos transformar nuestros datos en un diccionario en argumentos de palabras clave. Entonces voy a definir mi función como muerte y voy a decir información de subrayado de grado, y luego voy a pasar por varios parámetros Voy a tener nombre, grado, UNI, y voy a decir grado subrayado año para el año de graduación Entonces queremos tener el estado de cuenta impreso, y sólo voy a mantenerlo sencillo. Voy a dar salida literalmente nombre, y voy a decir plus y agregar en el coma entonces voy a tener licenciatura voy a tener UNI y graduado Perfecto. Ya lo tenemos todo listo. Ahora sigamos adelante y almacenemos nuestros datos en un diccionario. Voy a llamar a mi diccionario educación subrayado detalles, y eso va a estar dentro de mis llaves Ahora bien, aquí es donde entran en juego los argumentos de las palabras clave. Las claves del diccionario van a ser tus nombres de parámetros que van a ser los mismos que name, degree, uni, y grad year. Vamos a querer decir aquí nombre. Para empezar, y eso va a ser equivalente a podría decir el valor o en nuestro caso, el argumento. Entonces voy a decir que no, coma. continuación, vamos a tener grado, ya que eso es lo que tenemos a continuación en la lista aquí, y eso se va a fijar a BC en TI, podemos decir. Entonces el siguiente parámetro aquí será la universidad, así podemos decir UNI que va a ser igual a para ciudad de Capetown, y luego finalmente, tenemos subrayado de posgrado, que va a ser equivalente a 2019 Derecha. Ahora, dado que 2019 es un int y estamos usando concatenación de cadenas, la regla es que necesitamos lanzarlo a una cadena aquí Tienes que decir más STR así que tal vez tengas que hacer un poco de casting, así como así. Vamos a poder administrar este entero. Solo un pequeño ajuste que necesitas hacer. Yo sólo voy a hacer zoom por ahí para ti. Recuerden cuando dije que esto se va a centrar en los argumentos de palabras clave. Nombre en el diccionario, esto sería visto como nuestras claves y lo que asociamos son nuestros valores, como puedes ver aquí mismo. Ahora, cuando estamos trabajando con argumentos de palabras clave, se va a tratar como nombre, grado, UI, y graduado bajo año cuadrado serán los parámetros. Estos serán nombres de parámetros y van a ser iguales a los como puedo decir los argumentos que serían Ano BSEty University of Cape toown Intenta visualizar ese proceso a mano. Bien. Entonces, una vez que estés contento con todo eso, puedes seguir adelante y llamar a tu función. Entonces al final, podemos seguir adelante y hacer precisamente eso. Entonces la función aquí es grado bajo info cuadrada. Entonces voy a decir grado bajo info cuadrada, y luego queremos llamarlo. Recuerda desempacar el diccionario, necesitas agregar dos astérixs y luego hacer referencia al nombre del diccionario, que es educación bajo Así. Y una vez que estés contento con todo, puedes seguir adelante y ejecutar ese código. Ahí lo tenemos. Podemos ver que dice honor BSE e IT Universidad de Ciudad del Cabo, 2019. Bien hecho. Así es como puedes ir a una cobertura y desempaquetar un diccionario en argumentos de palabras clave Hagamos otro ejemplo. Podemos seguir adelante y eliminar todo eso. Otra forma en la que podemos ir a un seto y comenzar todo esto es que podemos configurar algo para los detalles del pedido como ejemplo Voy a establecer lo siguiente. Diré DF Ordenar detalles de subrayado. Y podemos decir, sigamos adelante y pongamos voy a tomar un trago. Tamaño y leche. Podemos tener un tipo de leche, por ejemplo. Podemos tener leche de vaca, leche de almendras, etcétera. Perfecto. Ahora, la declaración impresa. Lo que voy a seguir adelante y hacer aquí es que solo voy a decir detalles del pedido, y podemos seguir adelante y pasar lo que necesitamos. Aquí voy a decir bebida Agrega en las cotizaciones, voy a tener cotizaciones y leche. Genial. Ahora, lo que podemos hacer es que ahora podemos seguir adelante y definir nuestro diccionario. Entonces voy a seguir adelante y decir, llamemos a esta bebida artículos para beber. Bien, ahí vamos. Llámenlo así. Entonces, primero, recuerden, estamos usando argumentos de palabras clave, así que bebe, talla y leche. Entonces necesitamos referirnos a los nombres de los parámetros. Entonces vamos a tomar colon, y eso va a ser digamos café. Tamaño, grande y leche. Diré almendra. Ahí vamos. Entonces tenemos artículos para beber. También podemos simplemente eliminar algo de espacio a cada lado. Bien, ahora tenemos que llamar a nuestra función, para que pueda seguir adelante y decir orden, subrayar detalles Y dentro de parenses, bien, vas a decir Asterix astérix, bebe Rey, subraya artículos bebe Eso va a seguir adelante y asignarlo como bebida es igual al café, el tamaño es igual a grande, la leche es igual a Almendra. Bien, así es como encajará todo eso y podamos ejecutar el programa. Podemos ver aquí todos los detalles, café, olmos grandes. Entonces tal vez necesites revolver ese espacio. Ahí vamos. Y ahí lo tenemos. Así que también podemos hacer que este bit más limpio. Bien, ahí estamos. Así que ahora podemos ver que está un poco más claro. Muy bien, chicos. Entonces eso es esencialmente todo. Así es como podemos desempacar nuestro contenedor. Entonces puedes ver que es una forma muy útil si quieres simplificar la gestión de tus argumentos y pasarlos a tu función, etcétera Muy bien, chicos. Entonces eso es todo para estos ejercicios prácticos de laboratorio. 46. Argumentos locales y globales: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en el argumento local y global. Entonces echemos un vistazo. Derecha. Entonces y los argumentos globales se refieren a donde una variable es accesible en un programa. Ahora, echemos un vistazo, en primer lugar , a los argumentos locales. Ahora bien, estas son esencialmente variables que se crean dentro de una función. Solo se pueden usar dentro de esa función en particular y en ningún otro lugar, y desaparecen después la función termine de ejecutarse o ejecutarse. Argumentos globales por otro lado, se trata de variables que se crean fuera de la función o de una función. Se pueden usar dentro y fuera de las funciones y persisten a lo largo del programa. Podemos ver que hay muchas más ventajas para los argumentos globales como podemos ver aquí. Sin embargo, todo va a depender de los requisitos y necesidades de tu proyecto. Ahora, echemos un vistazo a la analogía para simplificar aún más esto para nosotros. Ahora, quiero que piensen en una ciudad como ámbito local y un país como alcance global. Digamos que elegimos la ciudad de Ciudad del Cabo como ejemplo de alcance local y el país Sudáfrica como el alcance global. Entonces Ciudad del Cabo, en general, que es una ciudad, por lo que una ciudad puede recibir sus propios fondos locales del alcalde, y esto puede considerarse como argumentos de función. Ahora bien, estos fondos pertenecen sólo a esa ciudad, y bien, no afecta el presupuesto nacional. Ahora bien, si miramos a un país, por ejemplo, podemos imaginar que el país proporciona un presupuesto nacional a todas las ciudades y que cada ciudad tiene acceso a este presupuesto, pero si una ciudad lo modifica, afecta a todo el país como resultado Entonces ojalá esta analogía te ayude a darte un poco de mejor comprensión con argumentos locales y globales Nos vamos a centrar en el ejercicio práctico sobre esto. Es un concepto bastante sencillo de entender. También puedo agregar un ejercicio práctico adicional con él, pero eso es solo algo que quería mencionar en términos de las analogías 47. Análisis del alcance de los argumentos - [Laboratorio]: Hola a todos y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en argumentos locales y globales. Así que comencemos. Primero, queremos comenzar con global. Bien. Ahora, los argumentos globales y locales son esencialmente parte del trabajo con variables. Entonces definiríamos algo conocido como una variable global en términos de argumentos globales. Entonces, si tuviera que definir una variable y decir nombre es igual, quiero decir, Esto puede verse como una variable global. Si seguimos adelante y lo llamamos dentro de nuestra función. Entonces si ahora defino una función, muy simple, esa es definida por def Grit Entonces la función es Grit. Puedo decir imprimir. Puedo saludar. Y entonces solo puedo usar la concatenación y decir más nombre, y eso va a seguir adelante y agarrar esta variable que es nombre y utilizarla directamente en mi función Y así es como podemos acceder a una variable global. Entonces cuando llamamos a la función, sólo decir saludar, va a decir hola y luego RNO Ahora bien, si sigo adelante y ejecuto este código, va a decir hola RNO Entonces así es como podemos ir a una cobertura y definir una variable global Entonces la variable global es accesible dentro de una función a menos que esté siendo modificada de alguna manera. Ahora, déjame mostrarte cómo se ejecuta una variable local. Así que simplemente quitarás esto aquí mismo, y hagamos algunos ajustes. Bien. Podemos mantener nuestra función Saludo por ahora. Y fue en nuestra función, podemos decir mensaje es igual hola aro. Y puedo decir mensaje impreso. El mensaje aquí, hay una variable estaba en mi función que dice mensaje y el valor es hola honor y estamos diciendo mensaje impreso. Entonces cuando saludo, va a dar salida hola ni porque la impresión, como puedo decir que la funcionalidad de impresión esta dentro de la función, y estamos usando esta variable localmente dentro de la función. No está afuera. Entonces, si tuviera que ejecutar este programa, va a dar el mismo resultado. Pero para mayor claridad, solo puedo cambiar esto para que realmente puedan ver el cambio. Hola, John, va a decir hola, John. Pero si quisiera dar salida a este mensaje y quería acceder a él fuera de mi función, si fuera a decir imprimir, mensaje. Vas a ver aquí cuando lo destaco, dice, mensaje no está definido. Entonces esto es lo que quiero decir con local y global. Esta es ahora una variable local. Las variables locales solo existen dentro de la función y no se puede acceder fuera. La razón por la que estamos obteniendo un área aquí diciendo mensaje impreso es porque la variable mensaje, por supuesto, es local. Derecha. Así es como podemos seguir adelante y ver las diferencias en términos de argumentos locales y globales. Estos se refieren a donde una variable es accesible en un programa en particular. Se puede ver la diferencia ahí, tenemos global y tenemos local. Recuerda, todo lo que definas dentro esa función como variable permanece en la función. Cualquier cosa fuera que sea, por ejemplo, variable será accesible en todas partes. Recuerde que hay un alcance en cuanto a dónde se puede utilizar y tal. Derecha. Eso es todo para este ejercicio práctico de laboratorio. Sé que fue bastante breve y breve, pero es un tema bastante simple realmente para agarrarte la cabeza. Pero en fin, quería cubrirlo, así que eso es tal. 48. Utilizar la palabra clave global: [laboratorio opcional]: Hola a todos, y bienvenidos al siguiente ejercicio práctico, que va a estar enfocado en utilizar la palabra clave global en funciones. Ahora bien, esto es un bono, debería decir ejercicio práctico con lámpara. No tienes que hacerlo, pero es algo extra en lo que estaba pensando y vi que podría ser útil agregar, pero definitivamente es algo que sí surge a veces en PySon en un espectro intermedio Entonces echemos un vistazo. Entonces la palabra clave global. Así que déjame mostrarte por defecto si solo queremos utilizar una variable global solo para leer. ¿Bien? Entonces lo que quiero decir con eso es lo siguiente. Si yo fuera a decir contar es igual a cinco, un número, por ejemplo. Entonces iba a definir una función y decir show, underscore count En mi colon. Entonces digamos que tengo una declaración impresa y digo conteo es, y solo agrego en conteo ahí, y luego llamo a la función diciendo show count. Se va a ejecutar esta línea, que va a decir count is y el valor de count es cinco y ya veremos que cuando llamemos a esta función. Bien. Ahora bien, esto, por supuesto, es usar una variable global porque la estamos haciendo referencia afuera y podemos utilizarla dentro de esta función Déjame seguir adelante y ejecutar este código. Y dice que el conteo es cinco. Bien. Derecha. Entonces esa es esa parte. Ahora, la palabra clave global se utiliza si quieres modificar tu variable. Entonces, si tuviéramos que modificar este código, digamos, quiero ajustar este valor que está unido a esta variable. Lo que puedo hacer está dentro de la función aquí, puedo decir, global. Y esa es la palabra clave que necesitamos. Y voy a adjuntar eso para contar porque count se trata como una variable global, entonces decimos conteo global, y esto es necesario porque estamos cambiando conteo explícitamente. Y lo que queremos hacer es incrementar. Solo queremos agregarle uno, así puedo decir contar, y el espacio más es igual a uno. Entonces va a tomar el valor actual y agregarle uno para agregarlo. Entonces será entonces, claro, cómo puedo decir que entonces serán seis. Bien. Entonces lo que podemos hacer entonces es que podemos mostrar el conteo ahora, y luego va a sacar seis aquí. ¿Bien? Entonces ese será el conteo que hemos ajustado aquí dentro de esta función. Entonces, si tuviera que ejecutar este código, ahora podemos ver que el conteo es seis viniendo de esta función. Así que seguimos adelante y agarramos esa variable en particular, le agregamos una e imprimimos el resultado arrastrando esa variable global y ajustándola Entonces, si queremos modificar una variable global dentro una función y no solo leerla, necesitaríamos especificar explícitamente esta palabra clave global, y ese es el objetivo de ello modificar una variable global dentro de una función, y eso suele estar restringido si no tenemos eso. Entonces si, por ejemplo, decido hacerlo sin decir Global, y solo saco esto. Y digamos contar más es igual a uno y luego contar, ya verás, si ejecuto esto, va a mostrar un error aquí. Error local no enlazado. Ahora es tratar esto como una variable local en cierto sentido porque eso es lo que se supone porque estamos haciendo algunos ajustes aquí en juego. Sólo estamos diciendo que contar más más es igual a uno y no puede leer de dónde viene este conteo. Es por eso que necesitarías seguir adelante y declarar explícitamente el recuento global, y eso te permitirá seguir adelante y obtener la salida designada. Bien chicos. Eso es en términos de este ejercicio aguinaldo. Así que solo un poco más en toda la perspectiva global y local del alcance. Así que adelante y toma eso. Todo bien. 49. Envío de variables como argumentos: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en enviar variables como argumentos. Entonces echemos un vistazo. Todo bien. Ahora bien, no siempre tienes que establecer un valor codificado duro con nuestras llamadas a funciones. También podemos pasar por variables en su lugar, por lo que es un concepto muy simple. Entonces echemos un vistazo a lo que hemos hecho antes en el curso. Así que anteriormente, hemos estado definiendo nuestras funciones, estableciendo un parámetro. Entonces, por ejemplo, name, y luego agregar el argumento directamente a la función que estamos llamando. En este caso, por ejemplo, saludo. Estamos pasando en no con un valor codificado duro para luego sustituir el parámetro name y luego quedar agarrados en la declaración print donde decimos hola allí en el nombre, que será nu Lo que también puedes hacer es definir una variable exterior. Entonces puedes crear un programa como este donde todo lo que haces es definir una variable fuera de tu función, y luego estableces ese valor. Y en lugar de poner en no directamente como podemos ver aquí, simplemente pasamos por esa variable en particular, que está primero en el nombre cuadrado, que va a sustituir nombre aquí como rno Por eso tuve el comentario ahí, y va a imprimir exactamente los mismos resultados. Entonces esto es sólo algo que quiero mencionar para que estés enterado. Simplemente puedes pasar por variables siempre y cuando las hayas asignado de antemano. Se va a ejecutar los mismos programas, la misma salida, exactamente similar al que te mostré justo aquí en el lado izquierdo, que estaba codificado duro. Sólo algo por mencionar, es algo muy fácil y sencillo aprender y entender. Eso es algo que es importante que creo que deberías saber, y así es como podemos enviar variables como argumentos. 50. Trabajar con variables como argumentos - [Laboratorio]: Hola a todos, y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en enviar variables como argumentos en funciones. Entonces comencemos. Entonces este va a ser un ejercicio bastante sencillo, así que no va a ser tan extenso. Así que sigamos adelante y solo practiquemos un poco. Así que definamos una función simple. Voy a decir saludo sordo. Quiero establecer mi nombre de parámetro como nombre. Entonces quiero dar salida a la siguiente declaración que dice hola y luego podemos agregar en coma y pasar por nombre Ahora bien, lo que estamos acostumbrados a hacer es llamar a la función y luego agregar directamente el valor. Podemos, por ejemplo, solo poner, digamos, Katie ejecutar el código y dice hola Katie. Ahora, digamos que no queremos agregar los valores directamente, sino que queremos ir en una cabeza y asignarla primero a una variable. Lo que puedes hacer es decir, por ejemplo, nombre de pila, y podemos seguir adelante y establecer esto para digamos Katie. Entonces aquí donde estás llamando a tu argumento, acabas de poner en nombre, otra vez solo quiero configurarlo. Ahora bien, si ejecutas tu código vas a mostrar exactamente los mismos resultados. Digamos que puedes seguir adelante y enviar tus variables como argumentos. Hagamos otro ejemplo. Di sordo y voy a decir aquí, favor beber voy a pasar por aquí beber imprimir declaración, y voy a decir, me gusta beber. Y vamos a poner en bebida. Entonces afuera, puedo seguir adelante y decir bebida favorita de subrayado, llamar a la función, y puedo enchufar ahí, por ejemplo, Ejecutar el código Dice, me gusta beber Bien. Sigamos adelante y cambiemos esto alrededor. Definamos una variable afuera y pongamos esto ya que incluso podemos decir esto como bebida es igual. Lo definimos justo aquí y luego podemos pasar por la bebida misma. Eso va a ir en un seto y sustituir lo que tenemos aquí mismo en el parámetro y si fuéramos a ejecutar el código, me gusta beber también. Bien. Entonces esa es otra forma en la que podemos seguir adelante y hacerlo. Entonces incluso si los nombres están establecidos aquí, así que beber aquí va a tomar en cuenta la variable aquí, sustituir beber aquí, que es un parámetro, y eso es muy importante porque a veces te encuentras código y varios programas y ajedrez donde lo mantienen igual solo para poner a prueba tus conocimientos. Así que recuerda, la bebida aquí es un parámetro, o, y eso va a dar salida a dicho valor. Beber aquí es una variable. Recuerde que si resalta, puede ver la variable y el parámetro. Téngalo en mente. Pero lo que puedes hacer para ayudarte a distinguir, sobre todo si estás empezando, puedes diferenciar claramente entre los dos para que sepas que, estas son mis variables, estos son mis parámetros. Otra vez, claro, si corro me gusta tomar té. Eso es sólo un poco más de práctica en el envío de argumentos como nuestros argumentos. Eso es en ese ejercicio. 51. Pasado de parámetros por valor o referencia: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en el paso de parámetros por valor o referencia. Entonces echemos un vistazo. Todo bien. Ahora, cuando pasas una variable a una función, Pyson la maneja de una de dos maneras Pasar por valor o pasar por referencia. Ahora, echemos un vistazo a cada uno de estos comenzando con pase por valor. Ahora, con el valor pass by, la función obtiene una copia de la variable original, y los cambios dentro de la función no afectan a la variable original. Ahora bien, esto funciona para tipos de datos inmutables, y para eso, tenemos int, so integer, float, SDR, for string, for string, Tan importante recordar que cuando estás pasando por valor, va a funcionar para tipos de datos inmutables y necesariamente estos cuatro tipos de datos Entonces tenemos pase por referencia. Ahora, en este caso, la función obtiene una referencia o una dirección de memoria de dicha variable, y cualquier cambio dentro de la función afectará a la variable original que se definió. Ahora bien, esto funciona para tipos de datos inmutables, no inmutables, sino mutables, que incluirán una lista, dict y un dict Eso sería en términos de pase por referencia. Chicos. Eso es todo para la visión teórica. Sigamos adelante y sumérgete en lo práctico. 52. Explora los valores de los parámetros y las referencias - [Laboratorio]: Hola a todos, y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en el paso de parámetros por valor o por referencia. Entonces lo primero que vamos a hacer es que nos vamos a centrar en pasar por valor, que va a estar enfocado en tipos de datos inmutables, como enteros Tan inmutable, el significado no puede cambiar el valor una vez que se ha configurado y pasado y asignar Bien, así que comencemos. Entonces lo que quiero hacer es definir una funciones. Diré Def, cambie el número de guión bajo. Ese será mi nombre de función. Entonces quiero pasar por X o establecer X como mi parámetro. Entonces voy a decir imprenta. Y voy a agregar algo de texto para decir dentro de función, dos puntos. Después agregaré en espacio, coma, y luego X. Entonces quiero llamar a mi función y decir cambiar número de guión bajo Y lo que voy a hacer es que voy a pasar a través de unos valores codificados duro. Voy a decir cinco, por ejemplo. Entonces cuando siga adelante y ejecute este código, va a decir dentro de la función cinco. Entonces podemos ver que se pasó este argumento, y sustituyó a X, y luego se recopiló X y se agregó aquí a la función print, y al final salgo cinco. Genial. Ahora, sigamos adelante y fijemos esto como una variable por ahora. Establecer num es igual a cinco, y ahora voy a pasar ahora voy a pasar una variable aquí a una variable como argumento para sustituir el parámetro. Ahora lo que puedo hacer es seguir adelante y ejecutar el código dentro de la función cinco y podemos ver que se ha pasado como debería haber sido. Perfecto. Aquí es donde entra en juego la parte interesante. Ahora, digamos, por ejemplo, me dirijo a mi función y digo que X ahora va a ser diez. Pensando para ti mismo en lo que va a ocurrir. Recuerden lo que dije, Inmutable, sin cambios. Entonces, si tuviera que seguir adelante y configurar esto y ejecutar el código, va a decir diez. Ahora bien, lo que está sucediendo aquí es que el valor num aquí que se está estableciendo está siendo como puedo decir que se está pasando al parámetro X, pero luego estamos redefiniendo X y configurándolo a diez Por lo que el valor que se mantendrá en la función local siempre será diez. Ahora bien, la parte que voy a mencionar en inmutable es que el original va a permanecer sin cambios Entonces lo que quiero decir con eso es que si digo print y salgo función lateral, y sigo adelante y digo num vas a ver que la función externa no cambia. Entonces esto va a ser inmutable, así que no cambia afuera, no importa lo que hagamos aquí fue en la propia función localmente No va a hacer ningún cambio. Entonces no hay ningún efecto en num fuera de la función. Entonces esto es inmutable. Ahora bien, si tuviéramos que configurarlo de tal manera que se volviera mutable, entonces los cambios se verán afectados afuera Lo que podemos hacer es que podemos probar esto, por ejemplo, con una lista. Entonces ahora les voy a mostrar cómo podemos pasar por referencia al tipo mutable Entonces hagámoslo ahora. Entonces la nota clave para ver aquí es que no cambió fuera del valor num independientemente del ajuste que hicimos en la función, no cambió Entonces déjame mostrarte dónde va a cambiar por un tipo mutable como una lista Por lo que los cambios afectarán el resultado original. Permítanme seguir adelante y definir una nueva función , anuncio de definición en el ítem de puntaje, y voy a establecer el parámetro como mi lista Bien, lo que voy a hacer por ahora es que solo voy a decir impresiones dentro de función dentro de función. Con entonces voy a tener mi lista de puntajes, y solo queremos agregar en esa coma Entonces queremos llamar a esta función en particular, pero necesitamos agregar alguna información a una lista. Entonces voy a decir números, iguales, y voy a decir uno, dos, tres. Entonces podemos ver sumar debajo del ítem cuadrado, y vamos a decir números. Así que vamos a pasar por esa lista en particular aquí mismo a mi lista aquí, y luego va a simplemente seguir adelante y generar lo que se está ejecutando dentro de la función. Entonces podemos seguir adelante y ejecutar esto ahora, dice dentro de la función uno, dos, tres. Eso es exactamente lo que pasamos. También quiero mostrarte lo que muestra afuera. Entonces si digo imprimir, fuera de función. Y si fuera a decir números, Dentro de la función uno, dos, tres, fuera de la función uno, dos, tres. Entonces déjame seguir adelante y modificar la lista original dentro de la función. Entonces lo que puedo hacer es poder agarrar mi lista, que estoy agarrando aquí del parámetro, que tiene asignado valor establecido en números como uno, dos, tres, y puedo anexar a esta lista, por ejemplo, puedo usar un método de pluma, así puedo decir punto pluma y pasar por cuatro Entonces eso significa que la función ahora va a cambiar a uno, dos, tres, cuatro, pero queremos ver si cambia afuera. Si ejecuto esto, G a tres ahora que la función interior es ahora 1234 y la función externa es 1234. Entonces, aunque estemos configurando esta lista dentro de la función, también va a tener consecuencias externas. Entonces en otras palabras, como se puede ver que la lista se modifica fuera de la función. Como es también fue en la función. Entonces esto lo hace mutable. Por lo que los cambios afectan al original. Entonces el original eran los números uno, dos, tres. Como continuamos antes y miramos al final, no se pudo cambiarlo porque es inmutable. Todo bien. Entonces ojalá, esto te dé una gran comprensión de lo que quiero decir con mutable, inmutable en términos de cambios y cómo van a entrar en juego todos. Derecha. Ahora, hagamos algunos ejemplos más. Bien, ahora el siguiente que quiera hacer va a ser de tipo inmutable esta vez Entonces significa que no hay cambio, y eso va a ser una cadena. Entonces voy a decir sordo, cambio, subrayado texto, solo una función Va a pasar por texto. Y voy a decir por ahora función de lado de impresión. Texto. Entonces puedo decir cambio, subrayado texto Y lo que voy a hacer por ahora es simplemente saludar. Bien, ahí vamos. Eso es lo básico. Ahora vamos a asignar una variable. Diré mensaje. Hola. Ahora voy a pasar por una variable a través del argumento. Ejecuta eso ahora. Hola. Bueno. Estoy haciendo esto en incrementos para que solo puedas aprender de cada parte cómo estoy configurando todo esto. Ahora las funciones externas, así que voy a primero de diré impresión, función externa. Y ese será mensaje. Ahora lo que quiero hacer es hacer una actualización estaba en la función, pero antes de hacer eso, permítanme ejecutar de nuevo este código. Así se puede ver dentro de la función, hola, fuera de la función, hola. Ahora bien, si tuviera que hacer un cambio aquí estaba en la función local y decir: Bien, texto ahora va a ser bueno Adiós. Entonces ahora va a ir en un seto y ser adiós. Entonces ese va a ser el cambio, y sigo adelante y ejecuto este código. Vas a ver que va a ser adiós en la función interior, y afuera, va a ser hola. Para que puedan ver, cambiando el texto dentro de la función, y el original que teníamos aquí mismo, por supuesto, permanece sin cambios y no hay impacto ni cambio en él en absoluto. Entonces puedes ver aquí que hay una diferencia en el tipo. Gretch. Rico. Ahora, sigamos adelante y pasemos de nuevo por referencia. Por lo tanto tipo mutable, y uno de ellos es un diccionario. Ese es un tipo mutable. Así que sigamos adelante y definamos nuestras funciones. Diré Def, actualización bajo dict escolar. Y podemos simplemente seguir adelante y definir los parenses y podemos poner aquí, podemos seguir adelante y poner en el primeter de M dict para mi Entonces podemos decir print por ahora, y quiero decir dentro de función, dos puntos, y vamos a pasar por mi dict. Ahora lo que quiero hacer es referirme a actualizar dict y seguir adelante y mantener esto abierto por el momento los parenses y luego puedo definir un diccionario Diré persona, igual, y voy a establecer el valor clave aquí, los pares de valores clave, es singular. Diré el nombre de colon Alice. ¿Yo quería pasar esto a través de? Entonces voy a decir persona, y persona va a sustituir mi dict, y va a decir dentro de función, y entonces mi dicta será persona, que mostrará el nombre Alice dentro de la función Vamos a ejecutar esto. Dentro de la función, nombre Alice. Perfecto. Bien, entonces hagamos nuestros ajustes. Entonces fuera de función, voy a decir print, outside function. C en el espacio. Tengo persona. Ver es lo mismo por dentro y por fuera porque no hemos hecho ningún ajuste. La funcionalidad de la declaración impresa es solo leer desde fuera de mi código. Déjame seguir adelante y marcar la diferencia dentro de la propia función y decir mi underscorechazar, aquí, voy a agregar en un nuevo par de valores clave Voy a fijar la edad y voy a establecer eso en 28. Ahora vamos a tener un nuevo par de valor clave agregado para nombrar a Alice. También tendremos edad y 28 y eso va a ajustar y cambiar la función interna y este resultado también va a afectar lo que vemos en la función externa. Entonces déjame seguir adelante y ejecutar el código. Y ahí vamos, podemos ver que ese cambio es, como se puede ver mutable, los cambios tras los cambios afectan al original Entonces persona se ha cambiado la lista de personas. Como podemos ver fuera de la función, también ha cambiado. Bien, así que ahí lo tenemos. Así es como se puede pasar por valor y pasar por referencia y la diferencia entre tipos mutables y mutables Recuerde, los cambios mutables afectan al original y los cambios inmutables no afectan al Todo bien. Entonces ahí lo tenemos. 53. El operador de asterisco: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en el operador de Asterix Así que sigamos adelante y echemos un vistazo. Derecha, operador Asterix. Ahora, el operador asterix, como podemos ver, denotado por un Asterix es un operador especial que tiene diferentes usos dependiendo de dónde y Ahora, por supuesto, en este curso, y si alguna vez has hecho un curso PySon amigable para principiantes antes, es posible que hayas visto a este operador cuando estás, por ejemplo, multiplicando y tal, y también hemos aprendido un poco más en términos de arcos y quarks cómo podemos Pero solo quiero darte algunos casos de uso más y los escenarios de dónde se usa y cómo se usa, etcétera Así que sigamos adelante y zambullamos. Ahora, sólo te voy a dar una lista de las formas más comunes. Entonces aquí están los más comunes de una manera sencilla. Entonces podemos usar asterix para multiplicar, así en matemáticas, podemos usarlo empacando con listas y tuplas Puede usar arcos de Asterix para múltiples argumentos de función. Podemos usar quarks dobles asterix para argumentos con nombre en funciones y podemos usar un solo asterix y un doble asterix para pasar listas y para Como puedes ver, hay muchos casos de uso en los que podemos utilizar asterixs Derecha. Yo solo quería darte un poco de resumen, así que tienes una visión general Vamos a tener un ejercicio sobre el operador asterix, eso va a ser un poco más diverso e integrado solo para alguna práctica y Pero eso es todo lo que quería mencionar sobre el operador asterix 54. Aplicación del operador asterisco: parte 1 - [Laboratorio]: Hola a todos. Y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en aplicar el operador Asterix a múltiples casos de uso en Ahora, por supuesto, hay un sinfín de casos de uso disponibles. Sin embargo, voy a cubrir mayoría de los comunes a los que te enfrentarás, y también voy a agregar uno o dos extra en también en términos de contenido extra extra que está un poco ahí fuera. Así que comencemos. En primer lugar, el caso de uso más común en matemáticas es la multiplicación. Entonces podemos decir, por ejemplo, resultado es igual, y puedo decir cuatro multiplicado o este es el astérix por dos Entonces en matemáticas, el símbolo de astérix significa multiplicador. Puedo decir impresión, resultado. Y me dan ocho. Genial. Ahora, vayamos un poco más allá. Digamos que tengo num uno es igual a decir cuatro, num dos, cinco. Entonces sólo puedo decir resultado final es igual al número uno, se multiplica por num dos Y vamos a seguir adelante e imprimir resultado final. Y es correr este 20. Bien, esa es otra forma en la que podemos hacerlo. Lo que también podemos hacer es hacerlo en base a resultados para obtener un resultado final. Entonces lo que puedo decir aquí es resultado uno, y eso va a implicar cuatro multiplicado por cuatro. resultado dos va a implicar tres multiplicado por tres, y entonces el resultado final esencialmente va a ser resultado uno y luego otra vez, multiplicarlo por resultado dos. Entonces vamos a obtener este resultado, almacenarlo en esta variable resultado uno. Vamos a obtener este resultado, almacenarlo en variable resultado dos. Entonces obtenemos otra variable y multiplicamos los resultados de lo que ahí tenemos. Guarde esto y ejecute el código. Oh, necesito decir imprenta, discúlpeme. Impresión, resultado final. Y obtenemos 144. Entonces así es como podemos ir de cabeza y hacerlo con matemáticas para multiplicar números Lo que también podemos hacer es repetir cadenas y listas también. Entonces, por ejemplo, si digo texto es igual a alto, John. Afuera, puedo añadir en el asterisco y decir tres. Entonces puedo decir imprimir Texto. Entonces ahora si sigo adelante y ejecuto este código, va a decir: Hola, John, hola, John. Hola, John. Bien. Entonces eso es lo que podemos hacer al respecto. Ahora bien, lo que quiero hacer en realidad es agregar un espacio ahí. Aquí vamos. Hola John, Hijohn un poco más claro para ver ahora. Y sólo lo va a multiplicar por tres. Ahora, como estamos trabajando con cuerdas, sólo lo va a repetir tres veces. Así es como se aplica este astérix con cuerdas. A diferencia de los números, en realidad va a realizar la funcionalidad misma en términos de multiplicación cruda Ahora, podemos ajustar esto en realidad. Entonces el texto uno es alto. El ext dos es John Doe. Y podemos decir resultado final es igual. Y lo que voy a hacer aquí es decir veces dos por dos. Y luego voy a decir texto uno más ext dos. Así que estamos usando la concatenación de cadenas aquí, y esto funcionará muy bien porque actualmente estamos tratando con Entonces el texto uno va a tener el resultado de altos tiempos altos dos, y luego John Doe, John Doe veces Y luego solo los combinamos a ambos juntos. Y podemos simplemente imprimir esto, así puedo decir imprimir resultado final y ejecutar este código. Alto, alto, Jon Do, Jon. Entonces así es como podemos lidiar con cadenas repetidas. Derecha. Ahora, también podemos trabajar con listas repetidas. Entonces si digo números iguales, y en mi lista, tengo uno, dos, puedo decir por tres, luego imprima la lista y notarán si ejecutamos esto tiene uno, dos, uno, dos, uno, dos, uno, dos. Entonces, en vez de crear podrían decir tres listas separadas, se podrían decir tres listas separadas, va a modificar lo que hay en la lista tres veces y aún así mantenerlo en una lista singular como podemos ver aquí. Entonces eso es lo que la multiplicación hará por ti. Ahora bien, podemos hacer esto un poco más complejo, ¿debo decir? Podemos tener números dos, y pongamos aquí, por ejemplo, cuatro, cinco por dos. Y entonces podemos decir de nuevo resultado final, iguales. Y como estamos tratando con una lista, primero necesitamos lanzarla a una cadena, así podemos decir SDR, números, más, así que estamos haciendo concatenación de cadenas, lanzar una cadena, lanzar una cadena, Y ahora, si fuéramos a imprimir resultado final, obtenemos uno, dos, uno, dos, uno, dos, cuatro, cinco, cuatro, cuatro, cinco. Ahora, podemos ver que está todo aquí juntos, pero está separado en este caso. Entonces, cuando estés usando la concatenación de cadenas entre las dos listas, notarás en este caso, que va a estar separada Así que a diferencia de cuando lo estás haciendo solo. Entonces, si tuviera que imprimir números como viste antes y tengo este resultado, se va a multiplicar y sumar Bueno, en este caso, multiplicar por tres, entonces va a mostrar una, dos, una, dos, y una, dos, tres veces. Si tuviéramos que realizar concatenación de cadenas en él, lo que va a pasar es que va a separarse en sus dos entidades y va a realizar su tipo de funcionalidades separadas en su propia lista Derecha. Entonces ahí tenemos eso. Así que se hace multiplicación y masa, repetición de cadenas y menos Derecha, siguiente, desempaquetando listas y tuplas. Entonces esta es bastante simple. Así que muchas de las cosas que también veremos ahora también las hemos cubierto, así que también será una revisión un poco agradable para ti. Digamos que tengo algunos números y tengo uno, dos, uno, tres y cuatro. Bien. Digamos que digo print, y lo que podemos hacer es que podemos agregar en el asterix, y esto va a desempacar nuestra lista Entonces voy a decir números. Así que recuerda, cuando estés desempacando tu lista, agregarás en el único asterix Y podemos seguir adelante y decir código de ejecución, y tenemos uno, tres y cuatro. Ahora bien, esto también aplica si estás trabajando con tuplas también Entonces, si poco a poco cambio esto a tuplas, agregue en singular, el asterisco singular, disculpe, y diga código de ejecución También va a devolver lo mismo. Entonces así es como desempaquetarías tus listas y tuplas. Entonces expandiendo los elementos de tu lista desde la impresión o pasando a las funciones, aquí es donde va a ser realmente útil. Ahora, digamos que quiero recopilar múltiples argumentos usando la notación Asterix args Entonces lo que podemos hacer para lograr este objetivo es que podamos crear una función, así quiero decir números de show de muerte y voy a pasar en Rx colon e imprimir arcos Entonces quiero llamar a mi función, y voy a simplemente seguir adelante y pasarlos en uno, dos y tres. Y todo eso se va a armar dentro del parámetro args y va a salir aquí en args sin ese Así sería como también podemos utilizarlo en una perspectiva de función con arcos Para que podamos seguir adelante y ejecutar el código. Tenemos uno, dos, tres, y esta vez está en un formato de tupla ya que se puede ver cómo ha sido de salida Derecha. Entonces así es como podemos hacer eso. Así es como podemos tomar los múltiples argumentos y almacenarlos como tupla Ahora, también podemos recopilar argumentos de palabras clave, y podemos almacenarlos como un diccionario utilizando quarks. Para que podamos eliminar eso y decir sordos, mostrar, subrayar info Y aquí solo puedo decir quarks, anuncio en dos puntos, y recuerda cuando digo print, quarks, y luego queremos llamar a nuestra función Entonces vamos a decir show y underscore info, y dentro de los paréneses podemos seguir adelante y pasar Recuerda, argumentos de palabras clave esta vez ya que estás trabajando con quarks de autos, voy a decir nombre igual, no, y podemos decir que la edad es igual, y podemos seguir adelante y decir, vamos por 29, y podemos seguir adelante y ejecutar este código Ahí vemos esa salida del diccionario. Entonces tenemos el nombre clave del honor y la clave de edad de 29. Entonces ahí lo tenemos. Así es como podemos utilizarlo con quarks, también. Entonces aquí tenemos dobles astérixs que necesitamos aplicar. Genial. Ahora bien, lo siguiente es algo bastante nuevo que no hemos mirado. Así es como podemos desempacar con el símbolo de asterisco. Y por ejemplo, si queremos saltarnos valores medios en lista, por ejemplo. Entonces si yo fuera a decir primero y puedo agregar en mi asterix para medio, entonces puedo agregar en último Eso lo puedo asignar a una lista que tenga uno, dos, tres, cuatro y cinco. Ahora bien, si tuviera que imprimir cada una de estas variables, primera, media y última, ya verás qué va a sacar. Si digo imprimir, primero, imprimir, y quiero decir medio, imprimir, último. Es ejecutar esto. Vamos a ver aquí tenemos uno, y luego tenemos dos, tres, cuatro y cinco. Este astérix que aquí se aplica al medio va a recoger todos los valores medios Si miras aquí, uno es el primero s, cinco está al final, dos, tres, y cuatro estarán en el medio. Va a recoger todos los valores medios de la lista, dejando primero y último como variables separadas, y luego como podemos ver cuando la estamos imprimiendo, va a estar dentro de una lista misma y los números separados aquí, en este caso solo serán enteros por su cuenta Así es como podemos desempacar con el astérix en un contexto dado Derecha. Ahora, sigamos adelante y apliquemos esto para durar. Y nosotros dirigimos esto. Ahora podemos ver el primer valor aquí, uno y medio, que se extiende a dos. La última opción aquí ahora va a dictar que van a ser tres, cuatro y cinco Va a ser un poco diferente aquí si configuras esto para la última opción aquí. Va a cambiar un poco. Va a ir con los últimos valores y va a tomar eso después de que se hayan asignado los dos primeros , se podría decir. Primero, técnicamente, dirías que va a ser emparejado con uno. Medio, por supuesto, estaría emparejado con el siguiente y último, por supuesto, será el último conjunto de valores en una lista. Derecha. A continuación, sigamos adelante y fusionemos listas, y vamos a asegurarnos que también las desempaquetemos en una lista Entonces voy a, por ejemplo, decir lista uno es igual, y dentro de la lista, voy a tener uno, dos, Lista dos, vamos a tener tres, cuatro, y luego podemos fusionarlos. Entonces voy a decir fusionar es igual, y crearíamos una especie de lista aquí, dirías, agrega tu operador aritmético, y puedes decir Lista uno y luego agregar operador aritmético y decir lista dos Y luego, cuando sigas adelante e imprimas fusionadas vas a ver ahora que todo se ha fusionado en una sola lista. Entonces este asterix antes de la lista, como puedes ver, separado por la coma en una lista aquí lo fusionará en una lista Entonces así es como puedes fusionar tu lista y luego al final, desempaquetarlos en una lista aquí, así es todo en uno juntos Bien. Entonces así es como puedes combinar tu lista muy fácilmente. Ahora, digamos que quieres fusionar diccionarios, por supuesto, también seguirías adelante y seguirías el mismo proceso. Sin embargo, es solo un poco diferente. Tendría que agregar dos astérixs esta vez en lugar de uno para fusionar diccionarios Entonces déjame seguir adelante y decir dict uno. Y aquí, voy a asignar, claro, una llave, entonces A es, claro, va a ser uno, murió dos. Vamos a tener B, y podemos fijarlo como dos. Entonces podemos decir iguales fusionados, y dentro de parenss podemos simplemente poner en dobles astérixs y decir jct uno, coma, Y ahora si dijéramos print y tú dices fusionados, obtenemos A uno, B dos, así podemos ver que eso se ha fusionado en un diccionario, así tenemos dos pares de valores clave aquí. Entonces dos instancias. Entonces A uno y B dos ha sido de salida. Entonces así es como podemos fusionar diccionarios. Así que recuerda. Si quieres fusionar una lista, que no sea la lista que esté entre corchetes, solo harás un asterix para la fusión con un diccionario, tendrás Así que recuerda esa distinción clave cuando estés trabajando sabiduría. H. Lo siguiente que queremos hacer es que queremos pasar, por ejemplo, nuestras listas o tuplas a funciones Esto es algo que queremos mirar ahora. Digamos que queremos seguir adelante y sumar valores, por ejemplo, en nuestras funciones. Si digo D, agregue, y estamos esperando A y B, y vamos a decir retorno A más B. Lo que podemos hacer es seguir adelante y establecer los valores en una tupla Entonces voy a decir nums para números iguales, y en un tup diré tres y cinco Entonces voy a decir imprenta. Y en este caso, me voy a referir a que voy a llamar a esta función añadir aquí. Estoy teniendo la declaración print afuera en lugar de usar el return inside. Entonces puedo seguir adelante y simplemente pasar y decir nums, y eso va a seguir adelante automáticamente y asociarse con A siendo tres, y B era cinco, ya que opera sobre argumento posicional ya que estamos trabajando con apenas un astérix singular Entonces ahora podemos seguir adelante y decir código de ejecución, y devuelve ocho. Pero lo que puedo hacer aquí solo por simplicidad, solo puedo decir add nums. Y no queremos volver. Podemos simplemente decir print, y en realidad voy a decir A plus, pongamos resultado final igual a A más B, y luego quiero imprimir, resultado final. Bien, así puedes hacerlo de esa manera también. Entonces va a ir adelante y obtener el mismo resultado ahí vamos. Entonces sólo otra forma de hacerlo. Entonces así es como podemos pasar, por ejemplo, a una lista o a una tupla a una función Ahora, digamos que seguimos adelante y hacemos esto con una tupla. Entonces sigamos adelante y pongámoslo de esa manera. Pero esta vez, lo que voy a hacer es no hacerlo con misa aquí. Sólo voy a hacer algunas uniones de una manera particular, así que vamos a cerrarlo, y centrémonos en la lista. 55. Aplicación del operador asterisco: parte 2 - [Laboratorio]: Derecha. Entonces lo que podemos hacer es definir nuestra función, decir def ad y vamos a tener A y B. Entonces quiero decir print, A y B. Luego defino mis diccionarios, diré palabras Y aquí en la lista, voy a decir hola, anuncio en el espacio de coma, y luego una coma para la siguiente parte, que va a ser mundo Entonces puedo llamar a la función, que es Agregar, y luego necesitamos agregar en un astérix singular aquí y podemos decir palabras Así que vamos a pasar por los pares de valores clave del diccionario a AB, y luego vamos a imprimir AB. Entonces si ejecutamos este código, necesitamos conseguir hola mundo. Así es como podemos seguir adelante y pasar la lista a nuestras funciones. Ahora queremos aprender cómo podemos pasar diccionarios a funciones, así que hagámoslo. O revisar, ¿debería decir? Entonces voy a decir DF, crea. Nombre y edad como mis parámetros. Entonces voy a decir imprenta. Esta vez, voy a usar cadenas F y utilizar marcadores de posición aquí Voy a tener nombre y luego vamos a decir que tiene años de edad. Entonces puedo especificar mis datos para el diccionario. Aquí voy a decir simplemente nombre. Colon, no, y luego coma y luego edad, colon y luego 29 Entonces puedo llamar a la función GET y pasar por lo siguiente, que será doble asterix para el diccionario aquí Así que ahora podemos ejecutar este código, y nos tenemos 29 años Entonces he definido mi función aquí. Estoy usando una cadena F para actuar como marcador de posición para los valores que están entrando Entonces los datos aquí son un diccionario. Están pasando el diccionario aquí a los parámetros, nombre y edad, y esencialmente solo estamos imprimiendo cuáles los valores que se han establecido como tales como nombre y edad. Y luego para obtener estos datos del diccionario a nuestra función, estamos agregando asteris dobles para sustituirlos en consecuencia Rico. Entonces así es como podemos seguir adelante y empezar eso también. Perfecto. Derecha. Entonces así es como podemos empezar y configurar todo eso. Ahora, otra cosa que también quiero mostrarte es cómo puedes seguir adelante y usar el astérix para ignorar valores, o si también quieres saltarte múltiples valores, y esto también puede funcionar en tangente con un subrayado Bien, así que digamos que queremos extraer sólo el primer elemento de la lista. Lo que podemos hacer, por ejemplo, es decir A, y luego agregaríamos en el astérix con el subrayado y Y en la lista, digamos que tenemos diez, 20, 30 y 40. Diríamos imprimir A, y da salida diez. Lo que sucede aquí es que A va a estar asociado al primer ítem de la lista, y el uso combinado del asterisco y el subrayado va a ignorar todos los valores adicionales que están disponibles Bien. Lo que también podemos hacer es extraer quizás los dos primeros elementos. Entonces lo que podemos hacer para hacer eso es que solo podemos decir agregar en B ahora y podemos decir imprimir A, B. Entonces A va a estar asociada a diez. B va a estar asociado a 20, y la salida será de diez y, por supuesto, de 20. Y el subrayado de Asterix ayudará a ignorar 30 y 40. Entonces si ejecuto esto, tener diez, y tenemos 20. Digamos que puedes extraer los dos primeros elementos. Digamos que queremos obtener el último elemento, que es 40 aquí. adelante y cambiemos lo que estamos definiendo aquí e ignoremos todo al inicio y luego podemos decir, sumamos una variable que es última y sumamos el año pasado, y eso quiere decir que el astérix y underscae aquí ignorarán 1020 y seti y solo se conservarán 40 para la última variable y la Si ejecuto esto, obtenemos 40. Digamos que puedes extraer el último artículo. Digamos que queremos ir a un seto y extraer el primer y último elemento Entonces lo que podemos hacer en este caso es decir primero sumar en tu astérix y subrayar y decir Y aquí, digamos que tenemos uno, dos, tres y cuatro. Entonces podemos decir imprimir primero y último. Entonces entonces solo obtenemos uno y obtenemos cuatro con todos los valores medios ignorados por el astérix seguido del Ahora, permítanme darle más información sobre el astérix y Entonces el subrayado es esencialmente un marcador de posición, bien, y podrías ver esto como una especie de variable ignorada El astérix que tenemos aquí, ¿no? Eso hace que el subrayado recoja múltiples valores o elementos ignorados , se podría decir, de la lista Y si no tenemos el astérix, bien, este subrayado sólo va a tener un solo valor en lugar de una Entonces eso es solo una cosa extra que podemos hacer cuando queremos ignorar valores y tal. Podemos combinar el operador astérix con el subrayado. Bien, así que ahí lo tenemos. Hay un montón de casos de uso a los que ahora puedes aplicar con el operador Asterix 56. Funciones de Lambda: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en las funciones de Lambda. Entonces echemos un vistazo. Entonces probablemente te estés preguntando, Bien, ¿ qué es la función Lambda en la Tierra? Entonces, una función Lambda es una función corta y anónima que toma múltiples argumentos, pero contiene solo una sola expresión, lo que significa que definirá su función Lambda en una sola línea. A diferencia de las funciones regulares, donde, por supuesto, al menos necesitarías tener algunas líneas para que todo se ponga en marcha y funcione. Pero con una función Lambda, va a contener una sola expresión en términos de su orden y patrón. Y una función lambda se usa a menudo para operaciones cortas y simples donde es innecesario definir una función completa. Entonces, si estás pensando para ti mismo, bien, necesito hacer una función, pero va a ser una función bastante corta. Entonces aquí es donde entra el valor de utilizar una función Lambda. Sin embargo, si tienes una función que es bastante larga con muchos requisitos, muchos argumentos, parámetros y funcionalidad que necesitas agregar en su lugar o una función que generalmente es más compleja en tu caso de uso general, entonces quédate con las funciones. Pero como dije, cualquier cosa corta y rápida o cualquier cosa que simplemente no necesites mucha funcionalidad en su lugar, entonces entonces las funciones son tu mejor manera de hacerlo, y te recomendaría encarecidamente que las utilices porque pueden ser bastante útiles en ciertas situaciones. Sí, en cualquier caso, eso es todo lo que tengo que mencionar teóricamente sabio en términos de funciones Lambda Entonces nos vamos a centrar en los ejercicios prácticos de laboratorio donde voy a empezar suavemente y facilitarte en él y simplemente enseñarte la diferencia entre una función y una función Lambda, especialmente y principalmente, debería decir en su sintaxis. Pero llegaremos a eso en los ejercicios de laboratorio. Pero de todos modos, eso es todo por la visión teórica. 57. Realiza operaciones con Lambda - [Lab]: Hola a todos. Bienvenido al próximo ejercicio práctico de laboratorio que se centrará en utilizar las funciones de Lambda en PySon Ahora, por supuesto, para que esto sea muy simple al principio, voy a mostrar cómo puedes comparar las funciones regulares con las funciones de Lambda para que puedas entender la sintaxis y cómo puedes utilizar las funciones de Lambda correctamente y desde el principio. Empecemos. En primer lugar, definamos una función regular. Sólo voy a añadir en un comentario y decir función regular. Entonces, por supuesto, comenzarías con tu palabra clave, que es Jeff. Entonces definirías el nombre de tu función, que sería, digamos, subrayado hola, por ejemplo Entonces en la siguiente línea, solo podemos decir print y podemos decir hola mundo como ejemplo. Entonces eso será lo que emitirá la función una vez que se llame. Entonces podemos llamar a nuestra función, que es decir subrayado hola, y eso va a llamar a esta función e imprimir hola mundo en la terminal Entonces si guardo eso y ejecuto el código, va a decir hola mundo. Perfecto. Ahora veamos cómo podemos aplicar esto cuando estamos trabajando con una función Lambda. Lo que voy a hacer no es eliminar este código, sino que simplemente voy a comentarlo para que puedas entender la sintaxis y la lógica más suavemente. Voy a añadir un comentario aquí que dice la función Lam D. Y lo primero que quieres hacer es definir el nombre de tu función. Ahora, con las funciones Lambda, lo que harías es establecerla igual a Lambda. Entonces, por ejemplo, en este caso, puedes decir, decir subrayado hola, y ese es tu nombre de función en Lambda, muy similar a lo que teníamos en la función regular donde decimos decir subrayado hola. Lo mismo. Así es como se define una función en Lambda, y luego se dice igual y se establece en Lambda. Y entonces quiero saber que Lambda aquí es igual es la expresión para configurar una función Lambda muy similar a decir muerte para una función regular. Intenta verlo como lo mismo. Entonces podemos sumar en nuestro colon, y queremos definir lo que queremos hacer. Entonces en esta función decir hola, definimos que queríamos imprimir hola mundo. Pero eso lo hicimos dentro de la función. Con la función Lambda con la función Lambda, lo estamos haciendo en la misma línea. Entonces esta impresión lo world solo estará aquí en la misma línea que la función Lambda. Esto es lo que quise decir en las conferencias teóricas cuando mencioné que con Lambda, va a ser una sola expresión. Así que sólo podemos decir imprimir y decir hola mundo. Ahí vamos. Entonces queremos llamar a nuestra función, esa va a ser exactamente como nuestra función regular que teníamos aquí y además tendremos los paréntesis, así que solo podemos decir subrayado, hola Así que ahora podemos ejecutar este código, y podemos ver aquí sale hola mundo. Muy bien hecho, así es como se puede utilizar una función Lambda, y ojalá eso tenga sentido con la sincronización y el uso en comparación con una función regular Pero no te preocupes, aquí vamos a pasar por algunos ejemplos y vamos a pasar por otra comparación directa entre una función regular y una Lambda. Derecha. Así que vamos a eliminar todo aquí excepto el comentario anterior, y ahora queremos sumar dos números. Entonces una función regular para hacerlo y una función Lambda. Ahora bien, algo que sí quiero mencionar es cuando estás trabajando con funciones Lambda, normalmente no es adecuado para definir variables dentro de una función Lambda. Ahora, sé que en funciones regulares, se puede hacer eso con variables locales, pero no es realmente un cantar realmente en Lambda. Así que a menudo lo harías si quieres devolver un resultado, a menudo querrías decir return en lugar de definir una variable y luego imprimirla. Entonces solo algo que quiero mencionar de antemano. Bien, esas son las funciones regulares finales. Diré que Def agrega números de subrayado. Esta vez vamos a trabajar con parámetros. Voy a tener X e Y, por ejemplo, y luego voy a tener una simple declaración de retorno que dice return X más Y. Entonces quiero utilizar la declaración print afuera y decir print, y luego quiero envolver alrededor del nombre de la función que es agregar en los números cuadrados, y luego necesitamos poner en los argumentos que queremos enviar a los parámetros de X e Y para que podamos devolver el resultado a través de la función print de lo que es X más Y. Aquí sólo voy a decir cinco y siete. Va a devolver cinco más siete, y eso va a imprimirse como salida , eso debería ser 12. Sigamos adelante y ejecutemos ese código. Entonces podemos ver 12. Entonces ahí vamos. Así es como podemos definir una simple función regular para sumar números. Ahora, vamos a aplicar esta función aquí como una función Lambda o re transformarla. Entonces voy a añadir un comentario y decir función Lambda. Así que todo lo que necesitas hacer recuerda de nuevo, necesitas referirte al nombre de tu función Lambda. Entonces aquí usamos agregar números para la función regular. Nosotros podemos hacer lo mismo. Entonces quieres decir iguales y Lambda. Ahora lo que quieres hacer es justo al lado de Lambda, quieres asegurarte seguir adelante y agregar tus parámetros. Aquí tenemos X e Y, y todo lo que necesitamos hacer es agregar un espacio junto a Lambda y decir X, Y, y esos son tus parámetros. Entonces junto a eso, quieres agregar en tu colon. Entonces es muy similar a lo que tenemos aquí. Entonces tenemos X, Y, pero aquí no tenemos paréntesis y agregamos en los dos puntos al final, y hacemos lo mismo con nuestra función Lambda Quieres definir lo que realmente quieres hacer en tu función Lambda. Entonces en nuestra función regular, estamos diciendo devolver X más Y. Así que aquí, todo lo que tenemos que hacer es decir lo que realmente queremos hacer directamente. Diré X más Y, así como así. Entonces vamos a decir imprimir como lo hicimos antes, y luego quieres pasar por el nombre de tu función. Entonces en nuestro caso, agrega números de subrayado. Y al igual que cuando estás enviando tus argumentos, va a ser exactamente el mismo tipo de estilo que las funciones regulares. Vas a tener tus paréneses y en la posición o palabras clave, pones lo que quieres devolver Voy a decir cinco y siete. Así que tenemos eso en su lugar. Entonces ahora si ejecutamos nuestro código, obtenemos 12. Correcto, perfecto. Ahí vamos. Entonces así es como puede utilizar una función Lambda, y lo más importante, cómo puede utilizar la sintaxis de función regular para ayudarlo a aprender rápidamente las funciones de Lambda y cómo utilizarlas en comparación con el funcionamiento de una función regular. Derecha. Perfecto. Para que podamos quitar esta pluma. Bien, así que esa es la primera parte en la utilización de funciones Lambda Vamos a trabajar en unos cuantos más tipo extra de cómo puedo decir actividades y ejercicios. Así que no te preocupes. Nos vienen más. Todo bien. Entonces ahora vamos a trabajar con Lambda, ya que ahora estamos bastante seguros de entender la definición de cómo usamos una sintaxis y todo. Entonces voy a trabajar en la creación de algunos programas. Entonces primero, notando a nosotros mismos, Bien, ¿cómo puedo crear un pequeño programa que sea útil y sea rápido de resolver con una función Lambda que podría ser tediosa con una Entonces digamos que queremos cuadrar un número. Necesitamos definir los nombres de las funciones. Voy a decir iguales cuadrados. Entonces tenemos que decir que esta va a ser una función Lambda. Tenemos que decidir, voy a poner en cualquier valor. Voy a poner en un valor que eso equivalga a un parámetro. Yo sólo puedo establecer el parámetro como digamos Num. ¿Qué quiero hacer? ¿Quiero devolver algo? Lo que quiero hacer es en realidad devolver lo que sea num multiplicarlo por NUM es. Entonces voy a asegurar que imprima esto los resultados. Diré print y quiero enchufar nombre de la función que es cuadrado y luego poner en el argumento que va a pasar al parámetro aquí como NUM y luego voy a tomar ese número asociado y multiplicarlo por sí mismo. Entonces cuatro por cuatro. Ahora bien, si ejecutamos el código, podemos ver si obtenemos 16, y así es exactamente como podemos cuadrar un número con una función Lambda. Bien, hagamos otra. Digamos que queremos duplicar un número. Entonces crearíamos una función y podemos llamar a esto double, por ejemplo, y esta va a ser una función Lambda, así que necesitamos definirla en consecuencia. Aquí vamos a tomar un parámetro. Entonces voy a poner esto como X, por ejemplo. ¿Y qué quiero hacer? Quiero regresar, sea cual sea el resultado de X multiplicado por dos. Bien. Entonces quiero imprimir esto, voy a decir print y quiero imprimir cualquiera que sea el resultado de la función, así que necesito llamar a la función para que eso ocurra y luego pasar por el argumento, que sustituirá a X y luego X va a ir y al siguiente código dentro de la función Lambda y decir X por dos. En este caso, seis veces dos. Ahora podemos ejecutar este código. Y tenemos 12. Perfecto. Eso es duplicar un número. Vamos a cambiarlo. Vamos a entrar en la lista. Ahora, digamos que queremos obtener el primer elemento de una lista. Sigamos adelante y definamos nuestro nombre de función, se podría decir. Voy a establecer esto como, yo diría primero es igual, ese será el nombre de mi función. Va a ser una función Lambda. Vamos a esperar un parámetro, así que sólo puedo llamar a esta lista de LST, por ejemplo, en los dos puntos Y ¿qué es lo que realmente quiero hacer? ¿Qué es lo que realmente quiero devolver? Entonces quiero devolver el primer elemento de la lista. Y ahora recuerda en PySon lista empezar en cero. Entonces voy a decir, Bien, la lista aquí, y quiero mirar a cero. Bien. Entonces lo que quiero hacer es decir print, referirme al nombre de la primera función, y dentro de parencs quiero definir una lista tal cual Voy a decir dentro de la lista diez, 20, 30. Ahora bien, lo que va a pasar es que voy a pasar por esta lista aquí, que está aquí definida dentro de mi disculpa, se define aquí dentro del argumento aquí. Tengo diez, 20 y 30, primero va a albergar todo eso. Se va a pasar a través del parámetro. Toda esta lista que he definido dentro primero. Entonces lo que va a pasar es que vamos a llamar a la lista y buscar el primer ítem, que serán diez, y eso va a ser output. Si ejecuto este código, vamos a ver que da como resultado diez. Simplemente estamos pasando por esta lista como un argumento en sí dentro de la primera función. Bien, así es como podemos hacer precisamente eso. Ahora, digamos que queremos obtener el segundo elemento de una lista. En otras palabras, eso va a ser cero, uno. Entonces podemos decir segundo es igual a Lambda, y podemos decir lista de nuevo, dos puntos, y luego podemos decir lista, y el resultado que queremos devolver es el primero. Es el segundo elemento, técnicamente de la lista, pero denotado por uno Podemos decir print, pasar por la función y los argumentos para la función, vamos a establecer como una sola lista con ítems de 15, 21, 87. Entonces ahora debería imprimir 21, así pasaremos esta lista aquí, a la lista aquí como parámetro, y luego vamos a consultarla en el procesamiento y buscar el segundo elemento, que va a ser 21. Así que vamos a ejecutar esto. Y luego obtenemos 21. Perfecto. Bien, chicos Entonces eso es esencialmente al presentarnos a las funciones de Lambda y cómo podemos usarla y lo más importante, cómo podemos distinguirla entre una función regular. Ahora bien, no hemos terminado con las funciones Lambda, hay algunas funciones incrustadas más que quiero usar con funciones Lambda que son bastante populares para muchos desarrolladores, y quiero sumergirme más en la función Lambda, así que vamos a hacer solo es la idea general de las funciones de Lambda y cómo se puede integrar. Ahora puedes practicarlo y utilizarlo a lo básico al menos para que sepas cómo pasar por los parámetros, cómo puedes generar datos y demás. Eso es todo para este ejercicio práctico de laboratorio. 58. Aplicar funciones lambda a otras funciones: Hola a todos, y bienvenidos a la siguiente lección que va a estar enfocada en aplicar funciones Lambda a otras funciones. Así podemos incrustar funciones dentro nuestras funciones Lambda dependiendo lo que nos gustaría hacer. Pero echemos un vistazo. Entonces las funciones Lambda funcionan bien con funciones integradas como la función map, y esto esencialmente aplica una función a cada elemento en un iterable, ahí que devuelva un nuevo iterable con valores modificados También tenemos la función filter y esta selecciona elementos de un iterable basado en una función que devuelve ya sea true o false, así podemos ver una situación en negrita de dos estados Finalmente, una función muy popular para utilizar con Lambda es la función de reducir. Esto aplica repetidamente una función para combinar todos los elementos en un iterable en un solo valor. Entonces ahí lo tienes. Por lo tanto, las funciones Lambda también pueden funcionar con otros tipos de funciones integradas . Sin embargo, estos son los más comunes que mayoría de los desarrolladores usarían cuando están trabajando con Pison, la función de mapa, la función de filtro y la función reducida con una función Lambda, normalmente se incrusta dentro de ella para ejecutar una determinada consulta de código que se agrega en su lugar Muy bien, chicos. Entonces eso es todo para el panorama teórico. Ahora nos vamos a centrar en integrar estas funciones dentro de nuestras funciones Lambda y armar todo 59. Incorporar lambda con otras funciones - [Lab]: Hola a todos, y bienvenidos al próximo ejercicio práctico de laboratorio, que se centrará en utilizar el filtro de mapa y reducir las funciones dentro de la función misma. Vamos a integrar todo juntos. Sigamos adelante y comencemos con la función de mapa. Eso es lo primero con lo que vamos a querer seguir adelante y empezar. Sigamos adelante y hagamos precisamente eso. Ahora bien, lo primero que vamos a querer hacer es definir una lista de números. Voy a decir números. Igual, y voy a decir uno, dos, tres, cuatro y cinco. Ahora bien, el objetivo de que utilicemos la función map en este caso de uso es porque queremos modificar cada ítem en una lista y luego queremos devolver una lista modificada que va a realizar alguna funcionalidad. Entonces lo que podemos hacer a continuación es ir a un seto y configurar lo siguiente Entonces vamos a ir a una cobertura y definir una variable aquí Así que voy a decir resultado es igual, y vamos a establecer eso en nuestra función de mapa. Y vamos a usar map para aplicar una función a cada elemento de nuestra lista, es decir, uno, dos, tres, cuatro y cinco independientemente cada vez. Y dentro de nuestra función map, vamos a agregar en la función Lambda. Entonces vamos a decir am D y vamos a pasar por uno parámetros. Voy a tener X, por ejemplo. Y luego la acción que quiero realizar, quiero multiplicar cada ítem por dos en la lista. Diré X asterisco dos o lo multiplicaré por dos. Y para ello, vamos a hacer uso de la lista de números. Entonces vamos a seguir adelante y referirnos a los números variables. Bien, así que tenemos eso en su lugar. Perfecto. Entonces déjame darte una visualización de lo que va a pasar. Entonces tenemos uno, dos, tres, cuatro, cinco. Ahora vamos a aplicar números aquí a esta función Lambft, y esencialmente, deberías verla como uno viene de números Entonces uno sustituirá a X, y luego uno por dos va a ser dos, y eso será almacenado, y procesado con nuestra lógica aquí que tenemos en su lugar con map y función Lambda, y eso va a ser almacenado hasta que podamos posteriormente sacarlo a una lista. Entonces vamos a pasar al siguiente ítem de la lista, que serán dos, dos serán de números, y luego vamos a sustituir X era dos y luego decir dos por dos , y eso va a ser cuatro. Nosotros hacemos lo mismo para el resto de los números para que eventualmente sea el resultado de dos, cuatro, seis, ocho y diez. Entonces lo que queremos hacer es ir a un seto y convertir nuestro objeto de mapa Este va a ser nuestro objeto de mapa, que almacenamos en el resultado de la variable. Podemos crear una variable aquí ahora llamada números duplicados, y vamos a convertir la lista del resultado final que obtenemos aquí. El resultado del proceso de salida que obtenemos de esta funcionalidad. Resultado ahora en este caso no es una función Lambda como seguimos adelante y demostramos o referenciamos como en la actividad práctica anterior en funciones Lambda porque cuando se trata funciones que están incrustadas con Lambda, como map reduce y filter, la variable que le asignaste, como en este caso, resultado aquí no va a ser la función Es esencialmente sólo va a ser variable que va a almacenar. El valor que se ha procesado ya que todo se ejecuta aquí mismo y no en una función Lambda separada. En cualquier caso, entonces almacenaremos los resultados aquí en la lista para que podamos convertir el objeto map que tenemos ahora en una lista para poder ver los valores modificados. Entonces para hacerlo ahora podemos decir print y referirnos a números duplicados. Bien, perfecto. Ahora podemos ejecutar este código, y podemos ver si obtenemos la salida dos, cuatro, 6810. Perfecto. Así es como podemos seguir adelante y configurar esto como debiera. Derecha. Ahora, sigamos adelante y veamos la función de filtro. Entonces, una vez más, vamos a tener algunos números. Solo voy a agregar digamos un número extra, y luego vamos a seguir adelante y utilizar la función de filtro. Ahora planeamos usar la función de filtro para mantener solo números pares. Así que sigamos adelante ahora y definamos una variable, que serán resultados para que podamos almacenar aquí el resultado que tenemos de nuestro valor aquí del objeto filter. Así que vamos a almacenar el resultado del objeto de filtro. Y vamos a decir filtrar e incrustar la función Lambda. Y nuevamente, tendremos un parámetro, al que podemos llamar X. Lo que queremos hacer es usar una defunción am para verificar si cada número o X es divisible por dos para, en otras palabras, mantener solo algunos elementos de una lista En otras palabras, deberíamos sacar números pares. Podemos seguir adelante y hacerlo diciendo X, y luego podemos agregar en nuestro símbolo de porcentaje, digamos dos, un equivalente a cero, y vamos a estar trabajando con la variable números, que es esencialmente la lista con la que trabajaremos. Vamos a seguir enchufando aquí. Vamos a agarrar uno. Entonces vamos a pasar sustituto uno a X y luego vamos a seguir adelante y comprobar aquí si uno es divisb por dos, si por alguna razón, el número no va a ser par, sólo vamos a omitirlo de la lista que vamos a sacar y luego solo guardar lo que va a ser par y divisible Bien. Después de ese proceso, y nuevamente, como la función map, vamos a revisar cada ítem o elemento que pudieras decir cada vez y luego almacenar los resultados necesarios a medida que avanzamos. Entonces queremos convertir nuestro objeto de filtro en una lista para que podamos ver nuestros valores filtrados, luego podamos encontrar una variable conocida como números pares, por ejemplo, luego usar una lista para emitir resultados aquí, esa variable. Y entonces lo que podemos hacer es seguir adelante e imprimir la lista filtrada. Entonces podemos decir print y solo podemos decir incluso números de subrayado Y que vamos a imprimir 24 y seis, que es exactamente lo que queremos como resultado. Entonces así es como podemos seguir adelante y asegurarnos de que seamos capaces de filtrar para que solo podamos mantener algunos artículos de nuestra lista. Correcto, perfecto. Ahora bien, la última función que queremos ver es cómo podemos utilizar la función de reducir. Entonces, esencialmente, lo que queremos hacer es que queremos combinar todos los elementos que tenemos en un solo valor, así que vamos a resumirlo así que agréguelo, se podría decir. Y para ello, necesitamos importar la función reducida, y eso viene del módulo funk tools Por lo que está construido en. Entonces podemos decir desde funk tools, que es el módulo, quiero importar la función reducida Ahora, queremos tener también una lista de números con los que queremos trabajar. Entonces voy a decir números, y voy a tener uno, dos, tres, cuatro y cinco. Entonces voy a asegurar que utilizo reduce para sumar todos los números juntos. Y nuevamente, necesitamos tener una variable para que podamos almacenar el resultado, claro, por lo que es necesario llamarlo resultado. Y entonces podemos usar la función reduce, que va a incrustar Lambda. Y nuevamente, vamos a tener esta vez dos parámetros porque estamos sumando, estamos sumando números juntos. Entonces tendremos X e Y. Y luego la acción que queremos realizar y lo que queremos devolver es el resultado de X e Y aquí. ¿Y en qué vamos a basar eso? De qué vamos a obtener nuestra información que queremos agregar de la variable números aquí, que podemos simplemente asociar, así. Bien, entonces la función y, tomaremos dos números, X e Y de los números, y los va a sumar, y luego va a seguir sumando hasta que obtengamos el resultado final. Entonces con los números aquí, lo que va a pasar es que vamos a seguir adelante y sumar los números consecuencia juntos hasta que obtengamos ese resultado final. Entonces va a ser uno. Entonces fueron X e Y, será uno más dos es igual a tres. Tres más tres equivale a seis, seis más cuatro equivale a diez, y luego diez más cinco equivale a 15. Y así vamos a seguir adelante y ver la secuencia de operaciones a medida que avanzamos. Ahora bien, el resultado final, por supuesto, debería ser 15, pero sigamos adelante e imprimimos el resultado para que podamos aclarar. Ahí vamos 15 y ahí lo tenemos. Así es como podemos combinar todos los ítems en un solo valor como ejemplo de suma. Muy bien, chicos. Eso es todo para este ejercicio práctico de laboratorio. Sé que esto podría haber sido un poco difícil, pero así es como podemos seguir adelante y seguir adelante si queremos combinar diferentes funciones y utilizarla con nuestra función Lambda juntas. Ahora una cosa importante sobre la que también quiero reiterar. Solo recuerda cuando estamos usando funciones con lamb como map reduce y filter, anteriormente cuando estábamos trabajando con funciones, podrías dictar y puedes referir a lo que asociamos con la función Lambda como el nombre de la función, podrías decir Pero en este caso aquí, esto simplemente va a ser una variable para almacenar el resultado de lo que está ocurriendo. Si ese resultado va a ser específicamente un objeto de filtro o si va a devolver un valor específico de clases o si va a devolver el objeto map, eso es algo para lo que lo estamos utilizando, no como un nombre de función. Todo bien. Entonces ahí lo tenemos. Entonces lo último que quiero mencionar es simplemente recordar también, una cosa más, que cuando estemos trabajando con el objeto map, vamos a estar almacenando. Cuando estamos trabajando la función map, estamos almacenando el objeto map, cuando estamos trabajando con la función filter, estamos almacenando un objeto filter y cuando estamos trabajando, por supuesto, con reduce y específicamente en este caso, la función reduced, estamos almacenando un valor específico que por supuesto vamos a estar emitiendo si queremos imprimirlo. Bien, vete. Eso es. Así es como podemos integrar otras funciones con Lambda. 60. ¿Qué es la programación orientada a objetos?: Hola a todos. Bienvenidos a la siguiente lección, que va a estar enfocada en mirar qué es la programación orientada a objetos. Ahora bien, esta lección va a formar parte de una serie de lecciones, así que todo va a estar conectado entre sí. Habrá un poco repartido a lo largo del siguiente conjunto de lecciones, pero justo ahora está todo junto y parte como una. Entonces, la programación orientada a objetos es un enfoque de programación que se centra en el concepto de clases y objetos. Entonces tu siguiente pregunta es probablemente ¿qué son las clases y los objetos? Entonces esto es lo que vamos a discutir en detalle en la siguiente lección, que se va a centrar en mirar clases y objetos desde una perspectiva de definición y también desde una perspectiva de analogía Va a diferenciar entre los dos y ver en general cómo va esto en el enfoque de la mano de la programación orientada a objetos en su conjunto. Así que estén atentos para la siguiente lección, vamos a sumergirnos en clases y objetos. 61. Clases y objetos: Hola a todos. Bienvenidos a la siguiente lección, que va a enfocarse en clases y objetos. Echemos un vistazo. ¿Qué es una clase y un objeto? En pocas palabras, una clase es un blueprint para crear un objeto, mientras que un objeto es una instancia específica de esa clase en particular Ahora, sé que eso podría ser un poco confuso al principio, pero veamos una analogía para ilustrar mejor esto Entonces digamos que tenemos una persona. Podemos llamar clase a una persona. Ahora, una persona tiene un conjunto de atributos. Entonces una persona tendrá, por ejemplo, un nombre de pila. Tendrán apellido. Tendrán su edad, su nacionalidad. Entonces estos son vistos como atributos en PySon donde la persona misma, como la estructura, la persona es la clase Ahora podemos ir un poco más allá en eso y echar un vistazo a los objetos. Ahora bien, los objetos, como mencioné, son, por supuesto, las instancias mismas. Podemos, por ejemplo, tener un objeto que va a pertenecer a una persona única y esa persona única, por ejemplo, puede llamarse Lucy Johnston, 22 años y su nacionalidad es Es de Alemania. Digamos que tenemos otro objeto, otra instancia específica. Entonces tenemos otra persona única. Esta persona es Mark Smith. Tiene 21 años y es de Austria. Entonces así es como todo se vincula con la clase, el blueprint, los atributos para seguir adelante y describir esta clase aquí, y luego los objetos que son las instancias específicas Echemos un vistazo a otra analogía para solidificar nuestra comprensión de clases Digamos que tenemos un auto. Ahora el auto puede verse como una clase y como un plano. Ahora, un automóvil va a tener varios atributos como la marca, el color, el modelo, el año del modelo, por ejemplo, y va a tener un conjunto de instancias únicas en cuanto a los objetos. Podemos tener un auto único en particular que es la marca de GMC. El color Sage, es el modelo GMC E dos y el modelo Y es 2007. Entonces también tenemos otra instancia específica, que va a ser la de un BMW, por ejemplo. El color es azul, es el BMWX tres, y el modelo E es 2011 Todo bien. Entonces así es como quiero que entiendas el proceso de programación orientada a objetos cuando estamos trabajando con nuestra clase, los atributos asociados de esa clase y los objetos que son instancias específicas que están correlacionadas entre sí. Ch. Así que trata de verlo todo junto como Zach Y lo que también recomendaría si también se está volviendo un poco confuso, solo repasarlo un par de veces más a las analogías y con la definición que le di y tratar de vincularlo entre sí Pero no te preocupes. Una vez que practiquemos esto en los ejercicios prácticos de laboratorio, verás con qué facilidad vas a recogerlo. Y así es como quiero que lo veas ya que trabajamos con programación orientada a objetos y específicamente con las clases y los objetos a la mano. 62. Creación de nuestra primera clase y objeto: [Lab]: Hola a todos. Bienvenido al próximo ejercicio práctico de laboratorio, que va a estar enfocado en clases y objetos. Empecemos. Ahora bien, lo primero que tenemos que hacer es definir nuestra clase. Ahora, recuerden, una clase es como un plano, vamos a crear una clase de persona Voy a decir persona de clase. A continuación, podemos pasar a la siguiente línea y sangrar. Y lo siguiente que vamos a querer hacer es que vamos a querer definir nuestro método innit Ahora, el método innit es esencialmente un método especial, también conocido como método Dunder, y se llama cuando se crea un nuevo objeto, y ayuda a inicializar los atributos de Ahora bien, los atributos incluyen, por ejemplo, la identificación de la persona, su nombre, su apellido, su edad, su nacionalidad, etcétera Entonces lo que podemos hacer es que podemos seguir adelante y decir D doble subrayado init Y dentro de nuestros parenss necesitamos pasar , en primer lugar , yo, y yo representará la instancia de nuestra clase, y permite el acceso a atributos de instancia y mesods si tuviéramos algún mesods por supuesto Ahora, queremos definir nuestros parámetros. Ahora bien, esto va a incluir, por ejemplo, la información de la persona, así su nombre, apellido, nacionalidad asiática, etcétera Y primero vamos a configurarlo como parámetros, ¿de acuerdo? Entonces esto va a ser temporal, y luego se va a asignar como una variable permanente con self, pero llegaremos a eso en un momento. Entonces podemos seguir adelante y definir, por ejemplo, ID. Tendremos nombre de primer subrayado, tendremos apellido subrayado, tendremos edad y nacionalidad Todo bien. Así que déjame alejarme aquí para mayor claridad. Y luego solo queremos sumar en dos puntos, y continuemos. Bien. Ahora lo siguiente que vamos a querer hacer es que queremos asignar nuestros parámetros a nuestros atributos de instancia. Entonces lo que vamos a hacer es decir autoidentificación de punto. Es igual a ID. Entonces, lo que estamos haciendo aquí es que esencialmente estamos asignando, por ejemplo, el parámetro ID al atributo instance de self dot ID Y esta va a ser esencialmente la identificación única para la persona, y nosotros hacemos lo mismo para el resto, el mismo tipo de proceso. Diremos self dot, primer nombre de subrayado. Eso va a igualar el nombre del primer subrayado. Entonces haremos self dot, apellido subrayado nombre, igual apellido subrayado Y se puede ver que se está configurando en consecuencia a medida que se está utilizando. Entonces podemos ver auto punto g es igual a la edad. La nacionalidad de punto propio es igual a la nacionalidad, así como así. Eso lo tenemos todo instanciado. Ahora, solo para dar un poco más de claridad aquí con la palabra clave self que estamos usando. Recuerda, es una referencia a la instancia actual de esta clase, y nos va a permitir acceder y modificar nuestros atributos que son específicos cada objeto que tenemos. Sólo recuerda eso. Entonces cuando tenemos aquí, self dot ID, self dot primer nombre, self, el apellido, self dot age, y auto nacionalidad. Se pueden ver estos como atributos, y cada atributo es una variable que almacena datos que son específicos del objeto. Entonces aquí, claro, va a ser la D de la persona, su nombre de pila, su apellido, su edad, y su nacionalidad. Entonces eso es esencialmente lo que estamos haciendo ahí. Ahora, lo siguiente que tenemos que hacer es crear una instancia de nuestro objeto de la clase persona. Entonces hagámoslo. Y tenemos que asegurarnos de ajustar donde estamos haciendo esto. Entonces tiene que estar en la misma línea que nuestra clase aquí. Así que vamos a crear un objeto de la clase person. Así podemos darle a esta variable el nombre lo que queramos. Voy a decir persona uno es igual, y entonces tenemos que hacer referencia a la clase persona. Y dentro de esa clase, esencialmente vamos a seguir adelante y sumar en nuestros valores o argumentos, se podría decir, de los atributos que tenemos. Bien, para que podamos seguir adelante y poner el valor. Entonces primero, tendremos identificación, nombre, apellido, edad y nacionalidad. Voy a pasarlos por encima. Diré uno para la identificación. Entonces tenemos nombre de pila. Diré Ono entonces tenemos el apellido, diré Pretorius y luego vamos a tener edad, LLC, 29, y luego tendremos nacionalidad, dice de África, así como así Entonces así es como podemos crear un objeto de la clase persona. Entonces queremos imprimir los atributos de la persona. Así que recuerda, tenemos nuestros atributos establecidos en consecuencia. Entonces, identificación, nombre, apellido, edad y nacionalidad. Entonces ahora queremos imprimirlos, así que te voy a mostrar cómo podemos hacerlo. Podemos entonces, por ejemplo, decir print entonces queremos referirnos a esa variable que establecemos aquí que está asignada a lo siguiente, y podemos simplemente decir persona uno y solo se puede decir punto y luego seguido del atributo. Entonces podemos decir ID por ahora, imprimir persona un punto primero, subrayado nombre E imprime persona un punto y teníamos apellido subrayado. Eso va a seguir adelante e imprimir el valor que se asignó para nuestro atributo. Tenemos uno, tenemos a Arno y Pretors y eso es lo que se va a imprimir en nuestra salida Sigamos adelante y sacemos y ejecutemos este código. Hagámoslo. Ahí vamos, así conseguimos uno, obtenemos honor y obtenemos Pretorius Así es como podemos ir a una cobertura y asegurarnos de que tengamos esa salida como debería ser Vamos a hacer eso un poco más claro para que veas, podemos ver la salida de ideales, el nombre y el apellido Así es como esencialmente podemos crear nuestra clase, cómo podemos definir nuestro método innit, configurar nuestros parámetros y cómo podemos ir en una cobertura y configurar el resto en su lugar y cómo nuestros parámetros esencialmente se convierten en esencialmente se convierten Todo bien. Eso es todo para este ejercicio práctico de laboratorio, bien hecho en la creación de tu primera clase y también definiendo tu primer objeto aquí y también dando salida a todos los datos necesarios haciendo referencia diciendo punto seguido del nombre del atributo y luego obteniendo todos los datos que se han vinculado al objeto S. Entonces, eso es todo. Voy a agregar aquí un ejercicio de laboratorio extra práctico, que va a estar más enfocado en la explicación. Así que sólo voy a explicar un poco más, y podemos hacer un poco de práctica, un poco más de práctica también. Así que puedes estar atento para ese próximo ejercicio, o puedes pasar a la siguiente lección. Realmente depende de ti en cuanto a lo que quieres hacer. Pero eso es todo, voy a decir, para este particular ejercicio de laboratorio. 63. Profundidad sobre las clases y los objetos - [Laboratorio opcional]: Hola a todos. Y bienvenidos al próximo ejercicio práctico de laboratorio, que esencialmente también va a ser opcional. Entonces, si quieres saltarte un seto, eres más que bienvenido a hacerlo y dirígete a la siguiente lección lo contrario, lo que vamos a estar haciendo es que simplemente vamos a seguir con clases y objetos con más detalle. Bien, así que quiero mencionar un poco más sobre parámetros y atributos. Así podemos ver los campos importantes que hemos definido que queremos utilizar, como ID, nombre, apellido, edad, nacionalidad. Ahora bien, en esto, cómo puedo decir, entre paréntesis aquí del método int, estos son vistos como nuestros parámetros, y solo existen dentro de este método int temporalmente Luego utilizando auto punto. Lo que estamos haciendo aquí esencialmente es que estamos configurando nuestros atributos como ID, nombre, apellido edad y nacionalidad diciendo self dot y luego refiriéndonos en consecuencia a la nacionalidad edad, apellido, nombre e identificación, y estos pertenecen al objeto y se puede acceder posteriormente Nuestros atributos pertenecen a nuestro objeto y se puede acceder posteriormente. Entonces claro, como sabemos, estamos creando un objeto, también conocido como crear nuestra instancia. Y lo que estamos haciendo aquí después con nuestras declaraciones impresas aquí es que estamos accediendo a nuestros atributos porque ahora están declarados en nuestro objeto. Otra cosa también a mencionar aquí con los parámetros que aquí hemos definido es que no existen fuera de nuestro método innit Solo nuestros atributos, que hemos definido permanecerán y serán exigibles fuera de nuestra clase Entonces solo algo que quería mencionar para que estés al tanto de lo que estamos configurando. Bien, y una cosa final, solo debes saber que nuestros parámetros aquí, de nuevo, son temporales y solo existen mientras innit se ejecuta, y nuestros atributos, que definimos usando self dot, son permanentes y vivirán dentro de nuestro objeto Todo bien. Entonces eso es todo lo que quería seguir adelante y mencionar para que tengan una comprensión más profunda de cómo podemos utilizar ambas opciones. Todo bien. Ahora lo siguiente que vamos a hacer es simplemente hacer otro ejercicio práctico. Entonces solo voy a mostrarte cómo podemos crear otra clase, así que solo conseguimos más práctica con ella. Bien, así que sigamos adelante y pongamos más práctica. Entonces ahora queremos definir otra clase, configurar nuestros atributos, crear nuestro objeto, etcétera Entonces voy a eliminar esto y comencemos. Entonces quiero decir clase, y vamos a trabajar con un auto, por ejemplo. Entonces queremos seguir adelante y configurar nuestro mensaje innit. Voy a decir de doble subrayado init, pasar a través de uno mismo, y luego con qué vamos a estar trabajando y lo que queremos en última instancia como nuestros atributos al Entonces tendremos marca, año modelo y color. En el colon. Entonces hemos definido nuestros parámetros los cuales son temporales. Ahora queremos configurar nuestros atributos, los cuales serán almacenados en nuestro objeto. Entonces, para ayudarnos, utilizaremos self y digamos self dot brand, es igual a marca. Entonces tendremos modelo de punto propio, modelo igual, auto punto aquí es igual a aquí, y el color de punto propio es igual al color. Ahí vamos. Así que lo hemos definido en consecuencia. Ahora queremos crear nuestro objeto o nuestra instancia de nuestra clase de autos, y necesitamos asegurarnos de hacer esto en línea con nuestra clase, y no dentro de este método init Así que quiero asegurarme de que estoy en línea con la clase aquí. Entonces lo que voy a hacer es un auto uno, por ejemplo, establecer una variable. Entonces voy a crear este objeto de mi clase de autos. Quiero referirme a la clase, entonces puedo pasar por los valores. Aquí voy a decir, por ejemplo, Ty Yota. Entonces voy a tener Cola y luego puedo decir 2021. Y podemos ver azul. Se puede ver que eso coincide. Primero, claro, podemos ver que tenemos marca, así que esa será Toyota, Corolla, tendremos modelo, año 2021 y color azul. Eso lo tenemos todo definido. Ahora queremos acceder a los atributos de nuestro objeto. Voy a desplazarme hacia abajo ahora y dejarme realmente alejar aquí. Y digamos print, y queremos referirnos a esa variable. Entonces vamos a decir auto un punto, y solo podemos referirnos al atributo, que será marca. Entonces podemos decir print car one dot, y luego podemos decir model, print car one dot, y vamos a tener, y luego imprimir auto un punto, y ese será color. Entonces eventualmente estaremos dando salida a los valores que tenemos aquí marca Dot será Toyota, modelo dot será Corla, punto será 2021 y el color del punto será azul Sigamos adelante y ejecutemos este código. Y aquí podemos ver que aquí obtenemos el siguiente resultado como se esperaba. Todo bien. Así es como podemos seguir adelante y trabajar con nuestras clases, nuestros objetos, parámetros y nuestros atributos, y cómo podemos juntarlo todo. Pero en última instancia, esto se centró principalmente en clases y objetos. Bien, chicos. Entonces eso es todo. Vi que solo voy a ir un poco para que podamos obtener más práctica y tal, pero eso será todo para este ejercicio de laboratorio en particular, así que solo podemos mover eso y eso es todo. 64. Métodos personalizados: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en el método personalizado. Echemos un vistazo. El programj ¿qué es un método personalizado? En pocas palabras, implica métodos que podemos definirnos dentro una clase para determinar las acciones que sus objetos pueden realizar. Entonces, si tuviéramos que tomar una analogía, utilicemos una con la que estuvimos trabajando antes Por lo que anteriormente creamos una clase que se basaba en el plano de la persona Los atributos que tenemos, por supuesto, incluirían ID, nombre, apellido, edad, nacionalidad, y con nuestros objetos, por ejemplo, podemos crear tantos objetos como queramos. Pero, por ejemplo, aquí tenemos dos objetos, y ellos pertenecen a cada persona única Lo que también podemos hacer es a estos objetos, podemos agregar en método. Entonces, en este caso, los métodos apropiados incluirían, para una clase de persona, comer, estudiar y dormir. Por ejemplo, si tuvieras una clase de auto, probablemente tendría sentido tener métodos como carro de servicio, coche de manejo, kilometraje o algún tipo de método o acción, debería decir. En cualquier caso, podrías tratar el mensaje como una acción que puedes incluir en el caso de uso por la naturaleza de tu clase y sus objetos asociados que creas. Todo bien. Entonces eso es todo para el panorama teórico. Ahora vamos a ir a trabajar en los ejercicios de laboratorio y aplicar esta lógica a una clase determinada. 65. Integración de métodos personalizados (Instancia): [Laboratorio]: Hola a todos, y bienvenidos al próximo ejercicio práctico de laboratorio, que se centrará en utilizar métodos personalizados con nuestras clases y objetos. Comencemos con lo básico primero definiendo nuestra clase, configurando nuestra estructura y luego creando nuestro objeto. Vamos a elegir un ejemplo más familiar solo para que podamos facilitar mucho la idea de métodos personalizados. Entonces, antes que nada, definamos nuestra clase. Entonces vamos a volver a usar a la persona. Entonces lo que queremos hacer es seguir adelante y definir nuestro método init junto con los parámetros que se requieren Entonces vamos a decir defunds init, seguido de un doble subrayado nuevamente Entonces tenemos que pasar por uno mismo, luego ID. Nombre de primer subrayado, apellido subrayado y luego tendremos edad y nacionalidad Solo alejemos aquí y en nuestra k al final. Todo bien. Ahora podemos usar self para almacenar los valores en nuestro objeto. Entonces ahora queremos configurar nuestros atributos. Así que voy a decir self dot ID es igual a ID, self dot, primer nombre de subrayado es igual al primer nombre de subrayado, luego self dot, apellido luego self dot, nombre es igual al apellido de subrayado Entonces la edad del punto del uno mismo es igual a la edad y la nacionalidad del punto propio es igual a la nacionalidad. Perfecto. Tenemos esa configuración. Ahora, fuera de nuestro método aquí en línea con nuestra clase, necesitamos crear nuestro objeto. Voy a decir persona uno es igual, luego referirse a la clase persona. Entonces puedo pasar por mis valores. Voy a tener uno. John, luego Doe, luego 28 años y nacionalidad, solo podemos decir USA. Bien, ahí lo tenemos. Entonces tenemos todo definido. Hay identificación, nombre, apellido, edad y nacionalidad. Ahora, vamos a seguir adelante e imprimir estos valores de acuerdo a los atributos a los que hacemos referencia. Entonces lo que voy a hacer es desplazarme un poco hacia abajo y podemos decir imprimir. Refiérase a la persona uno, punto, y luego ese es atributo. Tendremos, por supuesto, primer nombre de subrayado, y luego podemos decir persona impresa uno, punto, y podemos decir nacionalidad, por ejemplo Ahora podemos seguir adelante y ejecutar este código. Ahí vamos en salidas, como podemos ver a John y USA. Tenemos nuestra clase básica definida. hemos creado un objeto y hemos generado los valores que queremos de acuerdo con el atributo que se ha definido, y es agarrar los valores del nombre y de la nacionalidad en consecuencia. Perfecto. Tiempo de mensaje personalizado. Asegúrate de tener esto en su lugar y de que lo hayas entendido. Teníamos mucha práctica ahora con clases y objetos. Ahora vamos a aplicar el mensaje. Por el momento, solo podemos eliminar la declaración impresa y ahora sigamos adelante y definamos nuestros mesods. Derecha. Vamos a continuar. Ahora, cuando estás configurando tus métodos, necesitan estar en línea con tu mesod innit Va a estar dentro de tu clase en línea con el mensaje innit Como puedes ver aquí, hay una línea con sangría. Yo tendría que hacer lo siguiente. Esté en línea con su método de inicio, y luego podrá definir su método Voy a decir muerte y voy a llamar a esto introducir. Seré un mesod de introducción se podría decir. Entonces necesito pasar en auto aquí como parámetro. Y estamos usando self para que podamos acceder a nuestros atributos almacenados. Entonces tenemos, como puede ver, nombre, apellido, edad y nacionalidad. Y lo que queremos hacer a continuación es seguir adelante y configurar una sencilla declaración impresa que sólo va a decir hola. Mi nombre es el espacio de dos puntos, y luego voy a usar la concatenación de cadenas, porque vamos a estar tratando con un valor de cadena Entonces voy a decir self dot primer subrayado nombre. Derecha. Así es como podemos definir un método sencillo como ese. Ahora self dot Fn va a buscar el atributo y el valor que se ha configurado para el objeto que está vinculado a ese atributo En este caso, va a ser John va a ser salida al final. Ahora, todo lo que queremos hacer ahora es llamar a ese método. Ahora ese método se llama introducir lo vamos a aplicar a la persona uno, que por supuesto se establece a este particular Esto se establece como un objeto con el valor de John como nombre de pila. Así es como podremos decir el primer nombre de Seles, y va a estar vinculado a este objeto aquí que estamos creando y ese objeto que hemos creado atributo de primer nombre, que es John Entonces para hacer eso, necesitamos invocarlo, y para invocar esta función, puedes simplemente seguir adelante y decir persona uno Jugo de punto e introducción, parencs de apertura y cierre Y aquí, lo que va a pasar es que vamos a usar el autoacceso nuestro nombre, y esto va a imprimir esta afirmación ya que estamos llamando a este mesod Y lo que podemos hacer ahora es seguir adelante y ejecutar el código. Y dice: Hola, mi nombre es John. Bien, entonces es así de simple. Entonces así es como simplemente podemos seguir adelante y crear un método. Todo bien. Ahora vamos a seguir adelante y crear otro método. Quiero crear uno que diga feliz cumpleaños. Podemos ver que John Doe tiene actualmente 28, así que necesito crear un nuevo método. Déjame desplazarme hacia abajo. Voy a decir que este será DF y será tener subrayado cumpleaños el desastre un nombre Voy a pasar a través de self para que podamos acceder a los atributos, y luego necesitamos agregar alguna funcionalidad. Entonces podemos decir self dot age plus es igual a uno, y eso va a actualizar el atributo age que está almacenado en el objeto y agregarle uno. John tendrá entonces 29 años técnicamente. Así que ahora vamos a seguir adelante e imprimir esto sin embargo. Voy a decir imprimir. Feliz día de nacimiento, y voy a decir espacio de coma, concatenación de cadenas Voy a decir yo mismo, y voy a decir self dot primer subrayado nombre Entonces dice feliz cumpleaños. Y también voy a seguir adelante y decir, al final aquí, voy a decir que estás ahora. Y entonces lo que quiero hacer es que quiero seguir adelante y lanzar porque recuerden, la g aquí se trata como un entero, así que necesito lanzarla a una cadena aquí, y eso es ya que estamos usando alguna concatenación de cadenas Quiero decir cadena. Tenemos que decir más aquí. Y va a ser auto punto H. Y eso va a decir son ahora. Y la razón por la que agrego en el plus aquí es porque estamos usando concatenación de cadenas y vamos a lanzar a una cadena. ¿Bien? Y eso va a funcionar. Si no agregué el plus, entonces va a obtener un error, así que tenemos que asegurarnos de que agregamos aquí de la siguiente manera. Ahora solo puedo llamar a ese mensaje para entonces poder decir persona un punto y es tener subrayado cumpleaños, y podemos abrir y cerrar los paréneses que va a decir, feliz cumpleaños, John, ya estás y va a ir en un seto y conseguir la edad y recordar que lo estamos agregando más uno, así que va a conseguir la edad y agregarle más uno, así que va a ser 29, así que va debería imprimir esa estructura completa. Ahora si ejecuto el código, ya podemos ver que lo tenemos de la siguiente manera. Se ve un poco feo porque no agregué el espacio. Yo sólo puedo agregar el espacio ahí. Ahí vamos. Ahí vamos mucho más limpios ahora. Ya puedes ver que dice, Hola, mi nombre es John. Feliz cumpleaños, John, ya tienes 29 años. Derecha. Entonces así es como podemos crear y utilizar métodos dentro de nuestras clases y nuestros objetos y también cómo podemos llamar mensaje. Así que recuerda, dependería del caso de uso que estés usando. Entonces aquí está el código completo para que puedas ver. Por lo tanto, dependerá del caso de uso que estés utilizando y el mensaje sería apropiado en base a eso. Entonces en este caso, aquí, teníamos introducir y tener cumpleaños como nuestro mensaje porque eso es apropiado a una persona para presentarle a una persona y decirle feliz cumpleaños a la persona también. Derecha. Eso es todo para este ejercicio de laboratorio en particular. Voy a añadir en otro ejercicio de laboratorio que va a estar enfocado en los métodos, pero un poco más de detalle y vamos a entrar en eso en el próximo ejercicio práctico de laboratorio. Pero esto es lo básico para utilizar métodos personalizados. 66. Trabajar con métodos estáticos y de clase - [Laboratorio]: Hola a todos. Bienvenido al próximo ejercicio práctico de laboratorio, que va a seguir enfocándose en los métodos. Ahora bien, algo que quiero mencionar es que antes estábamos aprendiendo a utilizar métodos personalizados. Estos son también conocidos en el ámbito de clases y objetos como métodos de instancia, ya que estamos trabajando con self para trabajar con nuestros atributos de objetos. Ahora también hay otros dos métodos que obtenemos. Estos se conocen como métodos estáticos y también métodos de clase. También vamos a trabajar y enfatizar en eso también. Bien, así que comencemos con métodos estáticos. Bien. Entonces un método estático no usa self porque no interactúa con nuestros atributos de objetos, y se comporta de manera muy similar a una función regular, podría decir, pero está dentro nuestra clase solo para estar mejor organizado Y podemos llamarlo sin tener que crear un objeto. Así que vamos a seguir adelante y crear un método estático simple. Derecha. Bien. Entonces aquí tenemos nuestros métodos personalizados introducidos y tenemos cumpleaños, lo contrario, comúnmente conocidos como métodos de instancia. Vamos a definir un método estático y va a tener un decorador sobre él también Tenemos que estar dentro de nuestra clase, por supuesto, y en línea una vez más con nuestro método init, y tenemos que asegurarnos de que estamos establecidos así Necesitamos agregar algo de espacio. Y voy a crear un mensaje estático que va a comprobar si la persona es adulta o no. Entonces voy a decir que la muerte es subrayado adulto. Y lo que podemos hacer es seguir adelante y pasar por el atributo directamente mismo, que va a ser la edad. Entonces solo podemos decir la edad tal como está. Y recuerda, no nos usamos a nosotros mismos, ¿de acuerdo? Y esto va a asegurar que tendremos acceso a los atributos de manera directa. Bien. Ahora, después de haber seguido adelante y definido eso, necesitamos agregar en nuestro Cerlon y luego queremos realizar la funcionalidad Entonces vamos a decir que mayor edad es igual a 18, entonces podemos decir devolver verdadero, de lo contrario, devolver falso. Y recuerda, para hacer de esto un mesod estático al final, necesitas agregar en el decorador, que está en método estático Y ahora ya hemos configurado nuestro primer método estático. Bien. Ahora bien, otra cosa que quería mencionar aquí sobre el método estático que hemos creado es que pertenece a la clase pero no accede a nuestros atributos instantáneos. ¿Bien? Entonces solo algo que quiero mencionar. Y lo que simplemente hacemos aquí es que estamos pasando por la edad, y vamos a comprobar si la persona es adulta en función de su edad. Entonces ahora podemos llamar a este método es adulto y podemos aplicarlo a una clase en particular. Y en nuestro caso, nuestra clase es persona. Así podemos desplazarnos hacia abajo. Bien, agregando algo de espacio. Ahora lo que queremos hacer es que queremos decir print y vamos a llamar al mesod estático y vamos a referirnos a la clase person, y quieres decir punto es subrayado adulto y estamos llamando al mensaje estático aquí como puedes ver, entonces aquí podemos pasar en un valor particular Entonces aquí voy a decir 25, por ejemplo, y va a comprobar si la persona es adulta o no. Para que podamos ejecutar este código. Y aquí podemos ver que dice verdad aquí en la parte inferior. Si voy aquí arriba, podemos ver que esa ha sido la salida como verdadera. Bien. Y sigamos adelante y hagamos otra. Digamos que la persona es adulta, y déjenme poner 17. Y podemos ver que nos hacemos falsos aquí en la parte inferior, ¿verdad? Entonces así es como podemos ir a una cobertura y llamar a nuestro método estático y cómo podemos sentarlo Entonces fue solo un explícito muy simple que verifico que utilizamos. Bien. Entonces eso es algo que quería mencionar solo por claridad. Bien. Ahora bien, lo siguiente que queremos mirar es un método de clase. Bien, entonces tenemos nuestro método estático. Ahora bien, un método de clase funciona con la clase en sí, bien, no con un objeto individual, se podría decir. Y usa CLS en lugar de self para referirse a nuestra clase, y podemos usarlo para crear nuestros objetos de una manera diferente En otras palabras, lo que realmente podemos hacer es agregar valores predeterminados. Entonces es muy similar en cierto modo si estás siguiendo los argumentos por defecto en cierto sentido, y verás a lo que me refiero en un momento. ¿Bien? Entonces, antes que nada, definamos un método de clase. Voy a crearlo justo debajo aquí, método estático. Y lo que vamos a hacer es que podemos empezar con el decorador, y voy a seguir adelante y decir método de clase Bien. Y entonces podemos decir la muerte. Y yo estoy aquí. Voy a especificar el nombre del método como WIS, underscore default, underscore nacionalidad Bien. Y lo que queremos hacer entonces es pasar por CLS, como lo primero Y recuerda, CLS se refiere al objeto de clase a la propia clase, y estamos creando un nuevo objeto con él. Bien. Y esencialmente lo que queremos asegurar es que en lugar de pedir una nacionalidad, automáticamente la va a establecer un valor específico el cual se fijará como desconocido. Bien. Entonces, lo que entonces vamos a pasar es que vamos a ir en un seto y pasar por nuestros campos Entonces vamos a tener identificación. Tendremos primer nombre de subrayado Vamos a tener apellido subrayado, y vamos a tener edad omitiendo, por supuesto, la nacionalidad por ahora Entonces lo que queremos hacer es querer, como mencioné, crear una persona con desconocido como la nacionalidad. Puedo decir devolver CLS, y luego vamos a devolver ID, primer nombre de subrayado, apellido de subrayado, edad, y luego para el bloque de nacionalidad podemos poner en desconocido si no hay un valor en particular que se haya agregado Ahora lo que podemos hacer es crear un objeto usando nuestro mensaje de clase. Entonces esto va a ser muy específico. Entonces por ahora, voy a quitar esto por ahora, y ya verán aquí, voy a llamar a esta persona dos iguales, y vamos a decir persona punto. Y vamos a utilizar este mensaje de clase. Entonces aquí voy a decir W subrayado por defecto subrayado nacionalidad Bien. Y dentro de eso, voy a pasar por mis valores. Aquí voy a poner ideas dos, nombre, voy a decir Jane Smith, voy a decir 24. Ya van a ver voy a omitir la nacionalidad. Entonces, permítanme seguir adelante y ejecutar esto en consecuencia y verificar los resultados. Diré imprimir, referirme a la persona dos, la variable, decir punto, y luego simplemente voy a decir primer nombre de subrayado, y digo imprimir persona dos, y es justo lo que es eso aquí, Dot y voy a decir nality Ahora se puede ver que no puse en una nacionalidad en particular, así que va a volver a la salida Ahora vamos a ejecutar esto. Y aquí tenemos a Jane y desconocida. Y como pueden ver, ese es el caso cuando seguí adelante y me referí al atributo de nacionalidad, pero aquí no establecí un valor, así que fue y cambió este mesod Y como pueden ver aquí, estoy devolviendo el nombre, apellido, edad, DNI, pero aquí estoy dejando la nacionalidad como desconocida. ¿Bien? Entonces esto puede ser un mensaje de clase muy útil, y en este caso, queríamos otra forma de crear un objeto. Entonces esta es otra forma en la que puedes crear un objeto. Y por ejemplo, si quieres establecer un valor predeterminado, si un usuario no proporciona un determinado valor por sí mismo, como la nacionalidad, como puedes ver, Bien. Y esto es muy útil si queremos modificar nuestros atributos de nivel de clase ellos mismos. Todo bien. Entonces esta es la forma sencilla en la que puedes usar tus métodos estáticos y también tus propios métodos de clase. Bien. Ahora bien, lo último que voy a hacer, por supuesto, es que solo quiero tener otro tipo de inmersión profunda en este ejercicio en particular. Solo voy a pasar algún tiempo explicando más sobre el método estático y el mensaje de clase solo un poco más de detalle solo para solidificar tus conocimientos para que aprendas correctamente, ¿ debería decir Así que vamos a ir a explorar un poco más en eso. Derecha. Entonces lo siguiente que quiero explicar es aquí con nuestro método estático, tenemos edad. Ahora bien, la edad aquí solo está actuando como un parámetro normal, y estamos pasando como lo hacíamos antes de ese valor en particular. Entonces, si tuviera que seguir adelante y reiterar, si digo imprimir, voy a seguir adelante y referirme a ello en consecuencia diciendo persona punto es subrayado adulto, y vamos a poner, por ejemplo, 19 Para ejecutar el código, y tenemos aquí cierto. Esencialmente, es muy similar a cómo tendríamos funciones, pero podrías tratar el método estático como una función dentro de una clase, podrías decir en términos de su organización. Estamos llamando aquí al método estático y solo estamos devolviendo el argumento o valor que podrías decir, que va a ser pasado aquí y sustituido por edad aquí, que está actuando como el parámetro que de hecho estamos comprobando. Eso es algo que quería mencionar para mayor claridad aquí. Tratar de ver métodos estáticos son funciones que se acaban de definir dentro de una clase. Así es como quiero que lo veas. Bien. Ahora, la persona punto p aquí. Entonces persona es en realidad ese tipo de toque que mencioné es porque esto es una especie de función porque esta es una función dentro de una clase aquí, y nos estamos refiriendo a la clase. Así es como tendríamos que referirnos primero a él. Nos referimos primero a la clase, y luego por supuesto, al mesodname Bien, ahora, un poco más de claridad sobre el método de clase aquí. Entonces, esencialmente, lo que está pasando aquí con nuestro método de clase, por supuesto, en este caso, estamos usando CLS en lugar de self es lo que estamos haciendo aquí, y eso se refiere a la clase persona misma Y luego ID primer nombre, apellido H es esencialmente solo los parámetros que necesitamos para crear una persona. Como podemos ver, la nacionalidad no se pasa porque queremos establecerla desconocida por defecto cuando estamos realizando la declaración return. ¿Bien? Derecha. Como podemos ver después, regresamos CLS, lo que esencialmente estamos haciendo aquí es vamos adelante y llamando a la clase constructor, que es def init aquí, y nos va a ayudar a crear un nuevo objeto persona con los detalles dados y esencialmente esos detalles que podemos ver agregamos aquí cuando estamos llamando a la clase mesod y en la funcionalidad en el default la nacionalidad se va a establecer como desconocida, así que no tenemos que preocuparnos por tener establecer un valor extra que queremos pasar cuando estamos configurando los parámetros aquí en consecuencia. Muy bien chicos. Sólo un poco más de detalle sobre eso, sólo para explicar un poco más. Pero en otras palabras, chicos, eso diría, es. Ahora hemos aprendido a usar métodos personalizados, en otras palabras, métodos de instancia, métodos estáticos y también cómo utilizar métodos de clase también. Eso es todo para esta conferencia en particular, y luego nos vamos a centrar en la siguiente lección sobre herencia. 67. ¿Qué es la herencia?: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada a la herencia. Entonces echemos un vistazo. Rico. La herencia nos permite crear una clase hijo que herede todos los atributos y métodos de una clase padre Entonces echemos un vistazo a esto visualmente. Entonces tenemos una clase padre, y luego tenemos dos clases hijas, por ejemplo, y esas clases hijas esencialmente van a heredar ambos atributos y métodos de esa clase padre Ahora echemos un vistazo a una analogía para cimentar nuestro conocimiento sobre la herencia Entonces digamos que tenemos un padre. Entonces digamos que tenemos una madre y ella tiene dos hijos. Ahora bien, podríamos decir que con la genética y con la reproducción y todo lo que los niños heredarán, por ejemplo, digamos cabello rubio y ojos verdes Digamos que el niño, el macho hereda el pelo rubio, y la hembra, la niña hereda los ojos verdes Entonces esto es herencia. Digamos que el padre o la madre también les enseña a hablar y a caminar. Entonces los niños ahora heredan esos métodos de hablar y caminar Y eso solidificaría todo el concepto entre herencia en Python Entonces tendríamos la clase de padres y tendríamos las clases hijas. Muy bien, chicos. Entonces eso es todo sobre la herencia en términos de la visión teórica. Ahora vamos a sumergirnos en el ejercicio práctico de laboratorio. 68. Uso de la herencia: [Laboratorio]: Todos, y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en la herencia. Empecemos. Lo primero que tenemos que hacer es crear nuestra clase padre o clase base, se podría decir. adelante y utilicemos un ejemplo con el que ya estamos familiarizados solo para introducirnos en todo el concepto de herencia. Derecha. En primer lugar, voy a definir mi clase como persona. Entonces queremos definir nuestro método innit, también conocido como método constructor, y esto va a ser llamado una vez que se crea un nuevo objeto persona, y luego va a atributos inicializados y variables de instancia de nuestra Entonces podemos decir De underscore init, doble subrayado. Entonces vamos a pasar por subrayado autoIGF, apellido , edad y nacionalidad. Genial. En este momento queremos definir y asociar nuestro atributo. Entonces DNI, nombre, apellido edad y nacionalidad con auto. Entonces puedo decir autopunto ID es igual a ID. Entonces puedo decir self dot primer subrayado nombre, y ese va a ser primer subrayado nombre, self dot apellido Bien, y luego auto punto g y auto punto nacionalidad. Correcto, perfecto. Genial. Ahora bien, lo que también quiero hacer es crear un mensaje para que sepas cómo puedes heredar mensajes también junto con atributos Bien, así que en línea con tu mensaje de inicio, voy a decir muerte y otra vez, introduce Va a pasar por auto corte en. Y recuerda estos métodos personalizados que estamos creando son mensaje de instancia. Entonces, cuando estamos tratando con uno mismo, va a ser un método de instancia. Así que técnicamente se podría decir método personalizado. Derecha. Entonces esta instancia mesod va a permitir que la persona se presente, y queremos devolver una cadena con el nombre de la persona, con el nombre de la persona está perfectamente bien Entonces podemos decir retorno. Y esta vez vamos a usar cuerdas F solo para cambiarlo un poco, y voy a saludar. Yo soy, y luego solo voy a poner en mis marcadores de posición para las cadenas de self first underscore name, y luego vamos a tener self dot apellido subrayado nombre, así como así Y al final. Ahí lo tenemos. Ahí está nuestro método también vinculado a esta clase en particular Yo sólo quiero. Ahí vamos. Hagámoslo un poco más limpio. Bien, entonces tenemos ese set. Ahora, lo siguiente que queremos hacer es definir nuestra clase infantil. Entonces aquí tenemos nuestra clase de persona, y esa clase infantil va a ser la clase derivada de esencialmente la clase de persona, bien. Y va a heredar todos los atributos existentes y todos los métodos existentes Entonces podemos ver nuestros atributos aquí, y podemos ver este método introducido. Bien, entonces cuando estés trabajando con herencia, vas a heredar de tu clase de padres, y tiene que ser algo que tenga sentido Entonces no puedes tener, por ejemplo, una clase infantil que sea auto, y tienes una clase de padres en su lugar que es persona. No tiene sentido. Persona y auto. Es un poco confuso. Entonces un ejemplo adecuado en este caso sería empleado. Entonces empleado se deriva de la clase persona. Eso tiene sentido. Entonces sigamos adelante y hagamos eso. Ahora, vamos a tener que definir otra clase ahora. Entonces, en línea con la clase de persona, queremos crear otra clase. Entonces me desplazaré hacia abajo y diré clase. Y esto se va a llamar empleado, que va a heredar persona todos los atributos y todos los métodos Y podemos simplemente referirnos a la clase persona aquí mismo entre paréntesis para realizar herencia Y luego queremos seguir adelante y cerrar tal, y luego necesitamos definir nuestro método init, esto va a extender la clase persona, y también vamos a agregar nuevos atributos también Va a retener todos los atributos y mesods de la clase persona, y también vamos a agregar atributos adicionales Déjame mostrarte a lo que me refiero. Podemos decir Def, y podemos decir doble subrayado init, doble subrayado, y vamos Para que esto sea más fácil, solo podemos seguir adelante y copiar todo lo que ya existe aquí. Y quieres pegar eso en. Entonces puedes agregar atributos adicionales. Por ejemplo, lo que voy a hacer es decir puesto subrayado título y salario, recuerda agregar en dos puntos al final ahí Aquí van a estar los atributos extra que añadimos. Bien. Genial. Ahora podemos entrar y continuar. Y ahora lo que tenemos que hacer es querer utilizar algo conocido como la súper función. Bien. Ahora, la súper función se utiliza para llamar al constructor de nuestra persona de clase padre. Entonces este va a ser, por supuesto, nuestro constructor aquí. Y lo que vamos a hacer es que nos vamos a asegurar que lo hagamos, así que no necesitamos redefinir los atributos que ya existen en persona No queremos redefinir esto vamos a llamar a nuestro constructor de nuestra clase padre, que por supuesto será persona Y entonces lo que podemos hacer aquí es que podemos ir a un seto y asegurarnos de que digamos príncipes súper de apertura y cierre, y quieres decir punto doble subrayado en KIT, doble subrayado en KIT, Y entonces lo que vas a hacer aquí es que vas a pasar por la identificación, primer subrayado, el apellido del subrayado, la edad y la nacionalidad Entonces estos van a ser los atributos heredados de la persona. Aquí es donde estás heredando los atributos. Y luego queremos definir nuestros nuevos atributos que son específicos de la clase de empleado. Y eso va a seguir lo que hicimos aquí antes con self dot, self dot, etcétera Y eso va a ser, como pueden ver, por título de puesto y salario. Para que veas que no han sido resaltados. Entonces, lo que puedes hacer está por debajo de eso, puedes decir auto, y nosotros podemos decir punto, y vas a decir título de subrayado de trabajo, igual a título de subrayado de trabajo, y luego auto punto, salario igual a salario, así como así Así que ahora hemos seguido adelante y definimos nuestros atributos que son exclusivos de esta clase de empleados. este momento podemos seguir adelante y definir una función que es sólo para la clase de empleado. Aquí en línea con tu método de inicio, lo que puedes hacer es un trabajo de profundidad subrayado info, y quieres pasar por uno mismo, y vamos a seguir adelante y proporcionar este método que nos pueda dar información relacionada con el trabajo sobre el empleado, y vamos a devolver una cadena indicando su título de trabajo Así que solo voy a decir regreso, y vamos a seguir adelante y utilizar una cadena F, diré F, y voy a decir que trabajo como A, y luego para que se pase el parámetro, trabajo de self dot, título de subrayado, y punto ahí Bien, así que ahí lo tenemos. Entonces está el mensaje que sólo le pertenece al empleado Derecha. Así que tenemos que ahora podemos seguir adelante y crear una instancia u objeto de empleado. Entonces hagámoslo. Nuevamente, esto va a estar en la línea de la clase aquí en la primera línea. Así que así así podemos ver que está en línea como debería estar. Yo sólo quiero agregar en algún espacio. Bien. Ahora podemos simplemente crear una variable y llamar a este empleado uno igual. Queremos llamar y utilizar la clase de empleados. Que persona heredada y todos los atributos. Entonces ahora podemos pasar por los valores, bien, que pertenecen al nombre de identificación, apellido, edad y nacionalidad, junto con identificación, título de trabajo y salario también Entonces lo que voy a hacer es que voy a abrir mis prenses y voy a decir que la identificación será una Nombre John Joe, y entonces tendremos edad. Diré 28 y diré nacionalidad, será USA, y entonces tendríamos el título del puesto. Diré ingeniero de software, y después voy a fijar el salario. Diré 80 mil. Ahí vamos. Tenemos todo eso en su lugar. Entonces, puedes ver los valores extra que se establecerán a los atributos asociados y luego todos los valores que se van a establecer para los atributos que se han definido en la persona de clase. Bien. Entonces aquí tenemos ese objeto y podemos ver que heredamos los primeros y tenemos los últimos que son nativos para heredar nuestra clase que va a heredar de persona, entonces empleado Ahora lo que podemos hacer es decir imprimir y podemos decir empleado uno y podemos decir nombre de pila, eso será de la clase de padres esencialmente y luego podemos decir print, empleado un punto, y aquí podemos decir trabajo subrayado título Eso va a ser nativo de la clase de empleados. Bien, así que sigamos adelante y ejecutemos este código. Entonces conseguimos a John, y por supuesto, conseguimos ingeniero de software. Entonces ahí vamos. Tan bien hecho si llegaste a este punto, configuraste con éxito herencia y la configuraste muy bien. Ahora queremos llamar a los métodos que definimos. Entonces el primer método, que va a ser introducido desde la persona de clase, y luego el método de info de trabajo de la clase de empleado. Entonces, lo que podemos hacer aquí abajo, es que podemos decir simplemente imprimir, y tú vas a decir empleado uno, punto, y puedes decir introducir, y luego imprimir empleado un punto, y puedes decir trabajo, subrayado, información, apertura, cierre parencs Bien, entonces ahí tenemos eso, y yo sólo voy a comentar los dos primeros por ahora. Y podemos ejecutar el código. Aquí, dice: Hola, soy John Doe. Trabajo como ingeniero de software. El primer método ha sido llamado. Hola, soy John Doe, y luego trabajo como ingeniero de software, que viene del método de info de trabajo que definimos Podemos ver haciendo referencia a la variable ahí que esencialmente está creando ese objeto. Podemos referirnos a él y luego llamar a esos métodos que son únicos para cada clase y podemos ver que hemos heredado el método de la clase person que es porque podemos acceder a él y hacer uso de esta función en consecuencia. Bien, chicos, así que ahí van. Entonces, como puedes ver, esto muestra cómo puedes utilizar la herencia, y también es muy útil, como puedes ver, no necesitas reconstruir la voluntad y definir clases separadas y todo. Realmente puedes ahorrarte mucho tiempo utilizando esta súper función que tenemos aquí configurar automáticamente los atributos para nosotros de la clase anterior que tenemos y luego ir a una cabeza y esencialmente permitirnos asignar nuestros propios atributos que dependen de la clase más nueva, que es nativa de esa clase solamente. Bien. Perfecto. Muy bien chicos. Eso es. Sigamos adelante y eliminemos esto. Eso es todo por este particular ejercicio práctico de laboratorio sobre herencia. 69. Abstracción: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en la abstracción. Echemos un vistazo. Probablemente te estés preguntando qué es la abstracción en la tierra. abstracción es simplemente el proceso de ocultar detalles innecesarios y mostrar solo las partes importantes. Esto ayuda a simplificar sistemas complejos al enfocarse en lo que hace algo más que en cómo funciona. Ahora bien, si tuviéramos que utilizar esto en OOP, programación orientada a objetos, abstracción simplemente va a significar crear interfaces simples y fáciles de usar mientras ocultamos todos los detalles complejos de implementación Ahora bien, si tuviera que darle una analogía simple para ayudar a ilustrar mi punto sobre la abstracción, sería uno tan simple como este Digamos que tenemos un control remoto de TV y queremos ver la televisión. Ahora bien, para poder cambiar de canal, necesitaríamos hacer clic en el control remoto, y entonces eso va a enviar una señal a la televisión para decir: Bien, quiero que vayas a este canal. Quiero que vayas a ese canal. Y así es como quiero que intentes racionalizar todo el punto de la abstracción Entonces, para resumir eso, básicamente, no necesitamos entender ni saber cómo el control remoto cambia el canal o por qué. Sólo queremos ver la televisión. Ahora bien, si tuviéramos que aplicar esto a la abstracción, la idea es que no necesitamos entender cómo funciona algo internamente, al igual que una abstracción. Solo lo usamos para obtener el resultado que queremos. Bien. Bien, chicos. Entonces eso es todo sobre la lección de abstracción en términos de una visión teórica. Vamos a profundizar en aplicarlo a los ejercicios prácticos de laboratorio. Así que sigamos adelante y pongámonos directamente en eso. 70. Trabajar con la abstracción - [Lab]: Hola a todos y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en la abstracción. Empecemos. Ahora, lo primero que tenemos que hacer es llamar al módulo ABC. Y desde el módulo ABC, vamos a importar ABC y caps, que significa la clase base abstracta. Entonces vamos a usar una clase base abstracta y también el método abstracto asociado. Ahora, para importar un método abstracto, solo necesitas agregar una coma y decir mesodo Appstrct así como así. Bien, perfecto. Ahora queremos crear una clase abstracta. Ahora, voy a decir clase y me referiré a esto como persona. Entonces dentro de los paréntesis, se quiere pasar por ABC, que significa clase base abstracta Ahora bien, lo clave aquí con la abstracción es que si consideras que una clase es una clase abstracta, no puede ser instanciada En otras palabras, no se puede crear una instancia aquí. No se puede crear ningún objeto. Eso es lo clave aquí que también voy a probar cerca del final de este ejercicio de laboratorio para demostrarte lo que quiero decir con esto. Derecha. Ahora, ya que estamos creando una clase, vamos a hacer lo mismo que antes. Vamos a definir nuestro método init con nuestros parámetros y luego configurar y almacenar nuestras variables más permanentes que, por supuesto, van a ser atributos Entonces voy a decir Deere puntaje interno, pasaremos por uno mismo, nombre y edad. Entonces queremos decir el nombre de punto propio es igual al nombre y la edad de uno mismo es igual a la edad. Muy sencillo. Entonces en la misma línea, queremos definir nuestro método abstracto. Ahora me pregunto ¿qué es un método abstracto? El método abstracto es esencialmente un método que va a ser utilizado como decorador y se va a unir a un método en particular y va a hacer cumplir que todas las subclases o clases secundarias, debería decir, deben implementar dicho Es un método obligatorio que estableces para todas tus clases de sub o hijos. Lo que voy a hacer es decir DF y voy a decir trabajo subrayado descripción va a ser mi mesod abstracto y vamos a pasar por Lo que tienes que hacer está justo encima de él, necesitas agregar en tu decorador y decir método abstracto de app Eso se basa en lo que importamos aquí del módulo ABC. Correcto, perfecto. Ahora bien, este método, como mencioné, debe ser implementado por todas nuestras clases, y no vamos a definir cómo se usa. Sólo vamos a hacerlo obligatorio. En cada clase que ahora creamos, las subclases que creamos, ¿bien? Esencialmente, lo que va a pasar es que podemos agregarle nuestra propia funcionalidad, pero el método en sí, necesita ser utilizado. Eso es realmente lo clave aquí con los métodos abstractos. Ahora, como pueden ver aquí, tengo una línea roja y esto significa, claro, vamos a obtener un error. No podemos simplemente dejar vacío este método. Lo que vas a querer hacer es pasar por la palabra clave pass, bastante irónica, en realidad, solo para que no haya error y esto significa que no hay implementación en nuestra clase abstracta Ahora mismo lo siguiente que queremos hacer es que queremos definir aquí un mensaje regular. Entonces uno que podamos llamar y utilizar, que lo haremos, pero no va a tener ningún tipo de noción estricta en términos de mensaje abstracto. Entonces va a ser muy sencillo y sólo voy a decir de y voy a decir introducir como nombre del mesod Queremos pasar a través de uno mismo, y vamos a poner en una especie de declaración fija. Voy a decir retorno F, y voy a decir aquí está mi cadena, mi nombre es y paréntesis zen, voy a decir nombre de punto propio Y yo soy y podemos decir auto edad podemos pasar por años. Déjame un poco por aquí. Este va a ser un método estandarizado que vamos a utilizar cuando invocamos nuestros objetos creados en nuestras subclases Bien. Ahora mismo en la misma línea aquí que persona de clase, queremos definir a nuestro primer hijo o subclase Entonces lo que voy a hacer es seguir adelante y decir clase, y voy a llamar a este maestro, y esto va a heredar la clase abstracta conocida como persona ahora Entonces estamos realizando algo de herencia ahora y voy a seguir adelante y decir persona. Vamos. Y luego como antes, necesitamos definir nuestro mensaje innit, pasar por uno mismo, nombrar edad, y luego podemos poner algo único a esta clase, que será sujeto Entonces el nombre y la edad van a ser heredados de la clase de persona. Bien, ahora lo que queremos hacer es que queremos seguir adelante y llamar a la persona constructor. Entonces queremos asegurarnos de que a esto lo llamamos. Y lo que vamos a hacer para hacer eso es utilizar Super, y luego podemos decir puntaje rubio súper punto, puntaje rubio D. Y entonces vamos a pasar por aquí entre paréntesis lo que vamos a heredar Entonces heredaremos nombre y edad. ¿Bien? Y vas a ver aquí que la asignatura es nativa de la clase de profesores. Derecha. Ahora solo podemos decir auto punto sujeto es igual a sujeto. Entonces solo desafío regular aquí, definiendo regularmente, debería decir el atributo que es nativo de esta clase A. Lo siguiente que quieres hacer es ahora seguir adelante y llamar a ese método abstracto que aquí definimos que necesitamos utilizar, y también vamos a seguir adelante y definirlo nosotros mismos en este caso. Entonces lo que voy a hacer aquí es decir def, trabajo subrayado descripción a través Ahora podemos seguir adelante y agregar en nuestra propia descripción específica del trabajo, por ejemplo, para un maestro. Voy a seguir adelante y decir regreso, usar cuerdas S, voy a decir que enseño materia de autopunto en una escuela. Muy sencillo. Bien, ahí vamos. Entonces conseguimos ese set. Ahora podemos seguir adelante y crear nuestra segunda clase aquí. Entonces tenemos profesor de clase y vamos a crear otra una clase, y podemos seguir adelante y llamar a este doctor, por ejemplo. Entonces puedes ver el patrón aquí, tenemos personas o personas, y luego tenemos roles laborales que estamos analizando con subclases Ahora, queremos pasar y heredar todos los atributos de la persona, es decir, nombre y edad Para que podamos pasar eso así. Y luego queremos definir nuestro método innit. Vamos a ver la estructura. Sí, ahí agregamos espacio. Digamos, Def, doble subrayado, liendre, doble subrayado, y vamos a tener todavía el nombre propio y la edad, pero lo que será exclusivo de esta clase en particular será esta clase en particular Ahí vamos. Y luego haremos una pausa en Superterscore, Ntblescore. Así podemos agarrar y heredar el nombre y la edad en consecuencia que hemos establecido en nuestra clase de persona, igual que hicimos con la clase de maestro Bien. Derecha. Ahora queremos almacenar la especialidad médica como un atributo, así podemos decir auto punto, espacialidad es igual a espacialidad Bien, ahí vamos. Entonces ya tenemos ese conjunto en la misma línea. Tenemos que referirnos al método descripción del trabajo. Entonces puedo decir def trabajo subrayado descripción. Todo a través de ti mismo. ¿Y qué queremos hacer aquí? Podemos decir retorno F. voy a decir, soy médico especializado en y podemos decir aquí en nuestros marcadores de posición auto especialidad punto Así como así, y vamos a ponerle punto al final. Entonces así es como podemos llamar a esta descripción. Bien, entonces ahí lo tenemos. Así que asegúrate de haber agregado en todo de la siguiente manera. Así que ahora hemos seguido adelante y agregamos todo amablemente. También sólo voy a ordenar el código, hacerlo un poco más limpio. Bien, así que eso es lo que necesitamos para que todo empiece . Todo bien. Entonces continuemos y hagamos algunas pruebas para que podamos entender realmente el valor de las clases abstractas y cómo todo está funcionando en conjunto. Así que sigamos adelante y voy a sumergirme bastante profundo en esto. Así que vamos a llegar a ello. Bien. Entonces en la parte inferior ahora, solo podemos referirnos a nuestras dos clases. Entonces tenemos profesor y tenemos doctor, entonces nuestras subclases, ¿debo decir? Voy a crear instancias y voy a probarlas. Voy a decir maestro uno igual, maestro, ese es el nombre de la clase y quiero pasar por los valores que voy a establecer como mis atributos. Aquí tomaré Ale, y luego tendré 28, y luego voy a decir Msmatics Entonces voy a tener doctor uno que vincule a la subclase de doctor Aquí voy a poner en Bob y él tiene 31 y él es sólo un médico de cabecera, un médico general. Bien. Entonces ahora lo que quiero hacer es seguir adelante e imprimir de acuerdo con ese método de introducción que antes definí. Y lo que quiero hacer es ver cómo se aplica al profesor y al médico. Entonces lo que puedo hacer es decir imprimir y podemos referirnos al maestro ese profesor instancia punto intro DoS Entonces puedo hacer lo mismo y decir imprimir, doctor uno introducir Sigamos adelante y ejecutemos esto obtienes Mi nombre es Alis y tengo 28 años Mi nombre es Bob y tengo 31 años. Entonces, esencialmente lo que pasó aquí es llamamos a este método de introducción, que va a esperar que agarres el nombre y la edad donde quiera que sigas adelante y lo definas. Ahora, seguimos adelante y configuramos nuestros valores aquí en esta instancia que configuramos. Después enseñamos a uno y al doctor uno. Luego aplicó este método particular a cada uno de esos objetos y luego ejecutó esa función para recopilar de acuerdo a los valores que se fijaron en este objeto en particular, es decir, el nombre y la edad de los mismos. Esa es una manera muy útil en la que puedes agarrar tu método introducido. ¿Bien? Correcto, perfecto. Ahora lo siguiente que quiero mostrarles es la parte de descripción del trabajo. Entonces sigamos adelante y veamos eso. Entonces ahora quiero llamar a mi método abstracto, que he utilizado tanto en mi clase de médico como de profesor. Entonces solo podemos decir print. Y nuevamente, queremos referirnos a nuestras instancias. Así maestro uno, punto, trabajo subrayado descripción, apertura y ropa parenses Entonces quiero decir imprimir, doctor un punto, descripción del subrayado del trabajo Y podemos comentarlos solo por el ínterin. Y corre. Enseño matemáticas en una escuela. Soy médico especializado en GP, por lo que la práctica general, etcétera. Bien, así que ahí lo tenemos. Entonces ahora podemos ver que está dando salida a lo que necesitamos, como pueden ver ahora Derecha. Así es como podemos utilizar la abstracción. Ahora, voy a entrar un poco más de detalle para que podamos entender todo el punto de lo que estamos haciendo aquí. Vamos a ponerla en marcha en la parte superior aquí. La clase persona es una clase abstracta, por lo que eso significa que no podemos instanciarla directamente Lo que quiero decir con eso es que no se puede crear un objeto de persona. Te voy a mostrar a lo que me refiero. Aquí estamos creando objetos del maestro y del médico. Si yo fuera a decir persona uno igual y digo persona y yo fuera a poner en qué valores que tenemos aquí, teníamos nombre y edad. Diré John y 24. Te vas a dar cuenta si tuviera que seguir adelante y decir persona impresa un nombre de punto, verás que vamos a obtener un error ahora. Solo quiero comentar esto por ahora. Y ejecuta el código. Puedes ver aquí obtenemos un rastro de vuelta donde dice que no puedes instanciar persona de clase abstracta sin una implementación para el método abstracto, que es la descripción del trabajo Esto es lo que utilizamos antes utilizar nuestra descripción de trabajo aquí, un método abstracto, por lo que esencialmente podríamos seguir adelante y utilizarlo en nuestras subclases No se puede crear una instancia, como se puede ver de un método abstracto. Si tuviera que eliminar este método abstracto y simplemente mantenerlo como una clase regular, o si fuera una subclase, estaría perfectamente bien Esta es una de las cosas clave aquí que quiero mencionar aquí con abstracción aquí. No se puede seguir adelante y simplemente hacer tal cosa. Ahora, otra cosa que quiero mencionar aquí es que como pueden ver, obligatoriamente necesitamos usar la descripción del trabajo aquí. Estos dos métodos. Ahora bien, lo bueno aquí tener descripción del trabajo en ambos métodos y utilizar el método abstracto aquí es que hace cumplir la estructura con nuestras subclases de barras secundarias Nos está diciendo que deben implementar estos métodos. Como se puede ver. Ahora bien, si tuvieras que omitir, por ejemplo, los métodos en tus clases, te vas a encontrar con un error Así que solo tenlo en mente. Tienes que asegurarte de tener estas clases abstractas a las que te referías dentro de tus subclases Bien, entonces eso es muy importante tener eso en mente. Ahora bien, otra cosa que probablemente te estés preguntando es, ¿por qué todo este proceso es abstracción? ¿Dónde lo ves realmente? Aparte del hecho de que con la persona de clase aquí, solo yendo en un seto y lanzando una flecha si intentas instanciar una clase, ¿por qué es esta abstracción? Ahora bien, una cosa a tener en cuenta aquí es que el usuario no necesita saber cómo funciona internamente la descripción del trabajo. ¿Bien? Entonces aquí es donde el punto que estaba tratando de hacer en las lecciones teóricas es que tu usuario no necesita saber cómo funciona internamente la descripción del trabajo. ¿Bien? Entonces como puedes ver aquí, estamos pasando no estamos pasando ninguna información o funcionalidad. Sólo estamos diciendo, quiero una descripción del trabajo, clase de profesor, clase de doctor , hágalo ustedes mismos. ¿Bien? Y este es el punto en el que estaba tratando de hacer la analogía con el control remoto de TV y el televisor de aquí, ¿de acuerdo? No necesitas conocer los detalles extra y todo. Para que puedas ver una clase abstracta intenta que todo sea mucho más fácil de manejar sin todos los detalles extra. Para que lo veas simplificándolo para nosotros mediante la utilización de un método abstracto. Todo bien. Ahora bien, otra cosa que también quiero mencionar que es importante son nuestros usuarios, claro, cuando estamos definiendo nuestros objetos aquí y creando las instancias, ¿debo decir? Solo van a interactuar con nuestro método de introducción, y nuestro método de descripción del trabajo aquí sin tener que preocuparse por todos esos detalles de implementación. Se puede ver incluso aquí para el método introducir. Nosotros hemos seguido adelante y ya lo configuramos aquí. No es usar un método abstracto, pero ya lo hemos agregado a una clase abstracta, que podría verse como un código de inicio o código que está formateado para prepararlo sin tener que hacerlo usted mismo. Puedes ver aquí, no tuvimos que poner esto manualmente en cada una de estas clases. Ya estaban hechos por nosotros. Nuevamente, para resumir la abstracción. Ocultar la complejidad al tiempo que se aplica una estructura muy limpia. Bien. Derecha. Bien, chicos, así que eso es todo en términos de cómo se puede utilizar la abstracción en PySon Bien, entonces lo que podemos hacer ahora es que podemos seguir adelante y copiar esto y quitárnoslo. Y ahí lo tenemos. 71. Colecciones: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en las colecciones. Entonces echemos un vistazo. Probablemente te estés preguntando, ¿qué rayos son las colecciones? El módulo proporciona acceso a tipos de datos especializados en PySon Podrías ver las colecciones como un módulo en particular, y eso te va a permitir acceder a estos tipos de datos especializados. Ahora, a diferencia de los tipos de datos integrados con los que ya estamos familiarizados, como SDR para cadena, It bull list set y dit, estos deben importarse antes de su uso, y van a, a su vez, ofrecer una funcionalidad de mejora más allá nuestras estructuras de datos estándar Ahora, algunos de los tipos de datos especializados clave incluyen contador llamado Tuple order dit, default dit y DQ Entonces echemos un vistazo a esto gráficamente para que tenga más sentido, básicamente. Entonces, ¿qué tipos de datos obtenemos? Ahora, obtenemos, como mencioné antes, SDR para string, Tuple, int, set, float range, bull, dict y list Ahora, estos se conocen como los tipos de datos incorporados dentro de PySon Estos son los tipos de datos comunes que usamos día a día y todo el tiempo Luego obtenemos tupla de nombre de contador, dict de orden, dict predeterminado y DQ, estos son vistos como nuestros tipos de datos especializados que deben importarse para que puedan ser utilizados Estas son las diferencias. visualizar la diferencia entre los dos y agruparlos juntos. Cuando estamos trabajando con colecciones, vamos a poder importar estos tipos de datos especializados. Ahora, profundicemos en los tipos de datos que obtenemos. Contador. Ningún contador es esencialmente una herramienta que va a contar la frecuencia con la que cada elemento aparece en una lista determinada. Entonces hemos nombrado tupla. Ahora bien, este es un tipo especial de tupla donde los elementos tendrán nombres para facilitar el acceso Entonces hemos ordenado dict. Ahora, el dict ordenado es esencialmente un diccionario que va a mantener el orden en el que se agregaron los artículos. Entonces tenemos un dit predeterminado. Ahora, dict predeterminado es esencialmente un diccionario que va a proporcionar un valor predeterminado para cualquier clave faltante que esté ahí fuera. Y por último, tenemos a DQ. Entonces esto es algo como una lista como estructura, se podría decir, eso va a permitir adiciones y eliminaciones rápidas de ambos extremos, derecho Así que solo un poco de conocimiento de los conceptos teóricos de los siguientes tipos de datos especializados. 72. Explora el módulo de colecciones - [Lab]: Hola a todos. Y bienvenidos al siguiente ejercicio práctico de laboratorio, que se centrará en utilizar los tipos de datos especializados que provienen del módulo de la colección. Todo bien. Ahora, también quiero mencionar de antemano aquí que estos tipos de datos especializados se utilizan típicamente en forma de una clase o una función. Entonces eso es algo que quería mencionar para que estés consciente antes de que empecemos. Bien. Ahora, vamos a primero que nada, utilizar la clase de contador. En este ejemplo en particular, voy a mostrar cómo puedes usar la clase de contador, por ejemplo, para contar cuántas veces aparece cada ítem en una lista. Tenemos que decir desde el módulo de colecciones, quiero importar la clase de contador. Quiero definir una lista y voy a definir una lista de frutas por ejemplo. Diré que las frutas son iguales. En una lista aquí, voy a agregar algunos elementos. Voy a tomar Apple voy a tomar pera. Y también voy a agregar en lo mismo debería decir artículos? Voy a añadir en dos manzanas o dos peras o dos naranjas, etcétera. Voy a repetir algunas cosas para que podamos contar el número de ocurrencias con todos los ítems aquí. Entonces voy a agregar también otra manzana, naranja, y par. Ahí vamos. Entonces eso es bueno por ahora. Lo siguiente que quiero hacer es crear un objeto contador para contar las ocurrencias de cada fruto. Así que sólo voy a definir una variable que diga fruta subrayado cuenta, es igual, y voy a utilizar una clase de contador, y esta será anexada a la lista de frutas Ahora lo que voy a hacer es imprimir el diccionario de contador, que va a mostrar el conteo de cada fruta. Entonces, si tuviera que decir print, frutal subrayado cuenta y ejecute el código, vayamos un poco más bajo Vamos a ver aquí dice contador manzana dos, par dos, naranja uno. Se puede ver que cuenta las ocurrencias. Puedo ver tener dos manzanas, una, dos pares, y una naranja, y eso fue contado para mí en la salida como pueden ver aquí. Podemos ver que es salida como un diccionario de contador como podemos ver aquí mismo. Ahora, digamos, por ejemplo, quiero acceder a recuentos individuales, ¿verdad? Y para hacerlo, lo que puedo hacer es seguir adelante y decir print, y podemos decir que el subrayado de frutas cuenta Y luego aquí, sólo podemos añadir los corchetes y referirnos al ítem específico. Entonces aquí quiero decir Apple. Entonces ahora si ejecutamos esto puedes ver aquí obtenemos el resultado anterior, y luego podemos ver a Apple aquí. Bien, podemos ver que la salida aquí es dos porque Apple apareció dos veces. Bien, así es como puedes obtener el valor directo de cuántas repeticiones estuvieron ahí o cuántas veces se llamó en la lista Entonces para par, claro, son dos también, pero naranja, sólo hay una ocurrencia, así que veamos si va a ser uno, cual debería ser. Y podemos ver que es uno. Perfecto. Todo bien. Ahí vamos. Entonces así es como puedes utilizar la clase de contador. Ahora lo siguiente que queremos hacer es que queremos utilizar la tupla nombrada Ahora, la tupla nombrada es esencialmente una función, y podemos usarla para crear una clase muy ligera con atributos nombrados Entonces es por eso que ahora estamos haciendo colecciones, así que ya te sientes cómodo con las clases. Esto debería ayudarte a entenderlo mejor. Bien, entonces nuevamente, desde el módulo de colecciones, quiero importar la función tupla nombrada Quiero crear una persona tupla nombrada con campos o atributos con nombre, se podría decir Voy a decir persona igual, llamada tupla pasará por persona, en tu coma Entonces aquí vamos a tener, por ejemplo, nombre, edad y ciudad. Ahora bien, esto es muy similar a los atributos que se podría decir, pero aquí nos referimos a ellos como campos, pero es muy similar a los atributos que definimos en nuestra clase. Bien, ahí vamos. Ahora queremos crear una instancia de persona. Entonces voy a decir persona uno es igual a persona. Entonces podemos simplemente seguir adelante y decir nombre es igual a Juan. La edad es igual a 24 y la ciudad es igual a Ciudad del Cabo, así como así. Así es como entonces asociarías los valores y crearías esa instancia. Ahora, digamos que queremos acceder a los valores usando los nombres. Lo que podemos hacer es decir, por ejemplo, imprimir, y voy a decir persona, punto, nombre, y también voy a decir imprimir persona un punto ciudad. Yo sólo voy a mover eso hacia arriba entonces. Sigamos adelante y veamos la salida. Entonces tenemos a John y Cape abajo. Entonces eso se refiere al valor asociado para el nombre y al valor asociado para la ciudad. Todo bien. Entonces puedes ver, es muy, como mencioné, una manera muy fácil de crear una clase liviana, se podría decir con atributos nombrados. Bien. Perfecto. Derecha. Ahora, lo que también puedes hacer es ir a un seto y salir de una manera diferente Entonces las tuplas de nombre también se comportan como una tupla normal, también. Entonces puedo cambiar esto y decir persona impresa uno. Y dentro de las huellas, puedo poner en cero y luego a la persona uno, y puedo poner en una. Y si ejecuto eso, va a decir John y 24. Entonces va a actuar muy similar en cierto sentido al comportamiento de un tupur o una lista, podría decir, imprimiendo el primer valor de como podemos ver la instancia Entonces tenemos a John aquí, y luego tenemos 24. Si quiero obtener el último valor aquí que está cubierto en los parentinos, sólo puedo cambiarlo a dos Y luego sale capa hacia abajo para mí. Chicos. Así es como se puede utilizar una tupla con nombre Genial. Ya tenemos esa configuración. Lo siguiente que vamos a querer seguir adelante y hacer es que vamos a querer seguir adelante y utilizar dict ordenado. Ahora podemos simplemente quitar esto y podemos simplemente decir importación o podemos decir, creo que es EnCapsiao Ahí vamos. Entonces queremos crear un dict ordenado, sigamos adelante y hagamos eso. Quiero decir datos unsca ordenados, solo una variable. Vamos a asignarlo a la clase aquí de dicto ordenado. Entonces lo que voy a hacer es que voy a establecer los valores asociados aquí y este diccionario ordenado, se podría decir. Ordenó los datos nscoed, y diremos que A será igual a uno, y podemos simplemente brújula eso y simplemente configurarlo para B es igual a Y ver es. Ahora queremos imprimir la orden dict las claves van a estar en el orden de inserción. Primero, A era uno, B es dos y C es tres. No va a imprimirse en un orden diferente. Entonces ahora puedo decir imprimir. Datos de subrayado ordenados. Entonces ahora si ejecuto esto, va a decir orden dict A uno, B dos, C, y tres. Bien. Entonces así es como puedes seguir adelante y utilizar la clase dict ordenada. Ahora, digamos, por ejemplo, quieres agregar una nueva clave, aquí tenemos las tres claves, pero quieres agregar una nueva, entonces quieres decir D es igual a cuatro. Lo que puedes hacer, es bastante sencillo es que puedes simplemente seguir adelante y decir, o subrayar los datos G equivale a cuatro, y vamos a decir que la impresión ordenó los datos de la escuela. Bien. Quiero también para mejores propósitos de aprendizaje, también voy a dejar esto. Vamos a establecer eso como. Ahí vamos. Bien, entonces ahora verás la diferencia ahora. Bien, así que podemos ver aquí antes teníamos A uno, b2c3, y luego agregamos en consecuencia, agregamos una nueva clave que D es igual a cuatro, y se puede ver ahora que se anexa D D es equivalente a Bien. Entonces así es como podemos seguir adelante y utilizar un dict ordenado. Entonces esta sería una clase específica. Derecha. Lo siguiente que queremos hacer es que queremos echar un vistazo al dict predeterminado. Ahora, esto proporciona un valor predeterminado para las claves faltantes y por defecto automáticamente proporcionará un valor predeterminado para cualquier clave faltante en lugar de generar un error, que pueda ver dónde estaría el uso. Desde el módulo de colecciones, quiero importar dict predeterminado. Simplemente se definió así. Todo bien. Y entonces lo que podemos hacer es crear un dict por defecto donde los valores faltantes serán enteros, y por supuesto, el valor predeterminado va a ser cero Entonces podemos decir fruit, underscore counter equals, default dict, y solo podemos decir int ahora Entonces queremos agregar algunas frutas. Entonces voy a decir contador de subrayado de frutas, y eso va a ser manzana Y podemos decir más es igual a uno. Entonces podemos decir contador de subrayado de frutas, y luego vamos a decir par más es igual a uno Ahora queremos imprimir nuestras claves existentes, por lo que debería ir en un seto y sacar una y una para los dos. Entonces si digo print, fruit underscore counter, y yo tuviera que referirme a Apple podemos ejecutar esto, y podemos ver que da salida a uno, y lo mismo debería ocurrir si sigo adelante y digo par. Lo mismo debería pasar. Guarda el código, corre, obtenemos uno. Pero sigamos adelante y diferenciémoslo. S tres y dos, y vamos a mantenerlo a la par. Obtenemos dos por par, y con appn deberíamos conseguir tres. Obtenemos tres, tal como debería ser. Perfecto. Ahora, digamos, esta es la parte importante. Digamos, por ejemplo, quiero acceder a una clave que falta, y quiero acceder a naranja, por ejemplo, que puedes ver aquí no existe. Si yo fuera a decir print, fruta underscore counter, y digo naranja, pueden ver, solo va a tener el default aquí de cero Si falta algún entero y lo metemos en tier para asegurarnos de que estamos, por supuesto, vamos a estar trabajando con nuestros enteros y podemos ver que tiene cero No va a generar un error, así que puedes ver lo útil que puede ser la excavación predeterminada. Si estás trabajando con un programa y no necesariamente tienes un manejo de errores implementado y solo quieres una solución más corta o más simple, puedes utilizar dickie predeterminado como puedes ver para permitirte proporcionar un valor predeterminado en caso de que te falte una clave Como puede ver, antes había asignación, pero el naranja no existe en absoluto para una clave. Derecha. Genial. Ahora, la clase final que quiero mostrarles va a ser DQ Diríamos Import D Q, sobre así. Bien. Esencialmente, esto nos va a permitir agregar y eliminar rápidamente de ambos extremos de una Q, DQ es la abreviatura de Q de doble terminación, nos va a permitir agregar y eliminar rápidamente tanto de la izquierda como de la derecha de nuestra Q. Muy bien Así que vamos a crear un DQ con algunos números. Voy a decir que D es igual a DQ, y entre paréntesis vamos a agregar en un lister, así que voy a tener uno, dos Entonces quiero anexar a la derecha, lo mismo que lista anexar, se podría decir Quiero decir D append add en eso, y digamos que pongo en cuatro, y digamos que imprimo D. Sigamos adelante y veamos la salida Va a tener uno, dos, tres y cuatro. Entonces podemos ver que esto un método de pluma agregará el número a la lista que aquí hemos designado, digamos que también queremos anexar a la izquierda Bien. Ahora, esencialmente, DQ aquí, como podemos ver, es que hemos asignado una forma especial de tratar las listas como podemos ver aquí Ahora bien, lo que no es posible con las listas, claro, por su cuenta, es que no se puede añadir a la izquierda Entonces déjenme demostrarlo. Si yo fuera a decir Dt, apéntate a la izquierda , y digo cero, y digo print D, solo puedes ver que ahora tenemos cero, uno, dos, tres, y cuatro Bien. Y eso es muy útil para seguir adelante y ajustar en consecuencia. Digamos que ahora queremos eliminar de la derecha. ¿Bien? Entonces hagámoslo. Entonces puedo decir Dt Pop, Ar y luego podemos decir print G. Así que veamos dónde estamos. Entonces ahora tenemos cero, uno, dos y tres de ese último pop, para que eliminemos del lado derecho. Ahora, digamos que queremos quitar de la izquierda simplemente puedo decir D no pop a la izquierda, y luego imprimir D. Bien, ahí vamos. Ya podemos ver que ya no tenemos cero. Tenemos uno, dos y tres. Bien, entonces ahí lo tenemos. Así es como también puedes utilizar DQ. Bien, chicos, eso es todo en términos de utilizar estos tipos de datos especializados del módulo de colecciones. Entonces, como puedes ver, son muy útiles y son muy útiles. Pero sí, chicos, eso es todo por este ejercicio práctico de laboratorio. 73. Itertools: Hola a todos. Bienvenido a la siguiente lección, que va a estar enfocada en las herramientas de IR. Entonces echemos un vistazo. Entonces, ¿qué son las herramientas IR? Ahora, el modelo Iter tools ofrece funciones para trabajar con iteradores Ahora, puedo poner esto de una manera sencilla, y es que los iteradores son tipos de datos que se pueden usar en un seguimiento siendo la lista el ejemplo más común Ahora, estas son algunas de las funciones clave que puedes importar desde el módulo de herramientas IR e incluyen. Permutaciones de productos, combinaciones, acumulan, agrupan e infinitos iteradores Ahora, vamos a profundizar en estas funciones clave. Derecha. Así que tenemos producto. Ahora, producto calcula el producto cartesiano de iterables de entrada, generando todas las combinaciones posibles, permutaciones generando todas las combinaciones posibles Esto crea todos los ordenamientos posibles de elementos en un iterable Entonces tenemos combinaciones. Esto genera conjuntos únicos de elementos a partir de un iterable sin ninguna repetición Entonces hemos acumulado, y esto calcula sumas acumuladas o aplica otras funciones binarias a un iterable Entonces tenemos el grupo i, y este agrupa elementos consecutivos en un iterable basado en una función clave Derecha. Entonces eso es todo para la visión teórica. Profundizemos en el ejercicio práctico de laboratorio. 74. Trabajar con itertools - [Laboratorio]: Uno, y bienvenidos al siguiente ejercicio práctico de laboratorio, que va a estar enfocado en trabajar con herramientas de IR y las funciones asociadas que se pueden utilizar a partir de él. Derecha. Ahora, lo primero que queremos hacer es que queremos seguir adelante y utilizar la función de producto de Iter tools. Entonces solo podemos decir desde iter tools, podemos decir importar producto, así como así. Sólo para elaborar un poco más que yo herramientas es esencialmente un módulo con herramientas para trabajar con iteradores Y vamos a hacer uso específicamente ahora de la función del producto. Ahora, en nuestro caso, lo que queremos hacer es que queremos generar todos los pares posibles de elementos a partir de dos listas en este caso de uso para la función del producto. Entonces voy a definir dos pequeñas listas. Voy a decir A es igual a uno y dos, B es igual a tres y cuatro. Ahora mismo, en nuestro caso aquí, lo que vamos a hacer es definir una variable y llamar a esta prod igual. Entonces vamos a decir lista porque queremos sacar una lista al final y podemos envolverlo alrededor de la función product, que va a tomar en A y B. Ahora, product A y B generarán un iterador que cree todas las combinaciones de pares y lo estamos envolviendo alrededor de una lista que la va a convertir en una lista para que podamos ver todos los valores a la vez Ahora bien, si tuviera que decir print prod, y ejecute esto. Ahora puedo ver que tengo lo que pretendía, uno, tres, uno, cuatro, dos, tres, dos, cuatro. Echa un vistazo aquí, uno a tres, uno a cuatro, dos a tres, dos a cuatro. Así es como podemos utilizar la función del producto. Derecha. Ahora, todavía queremos asegurarnos de que estamos utilizando herramientas iter, pero esta vez lo que queremos hacer es que queremos utilizar la permutación Queremos crear todos los ordenamientos posibles de elementos. Voy a decir permutaciones de importación. Bien. Y definamos una lista. Diré nums es igual, y voy a tener de uno a tres, por ejemplo. Todo bien. Ahora voy a definir una variable. Yo sólo voy a llamar a esto permanente Nuevamente, quiero tener lista y poner en permutaciones y aplicar esto a mi lista llamada nums Nuevamente, nums de permutación. Vamos a agregar en la lista aquí y vamos a generar un iterador que producirá todos los pedidos posibles de nuestros artículos Como puedes ver, nuevamente, lo estamos envolviendo en una lista, y eso va a convertir, por supuesto , la salida en una lista. Así que vamos a seguir adelante y la salida permanente. Y ahora podemos ver toda una lista de permutaciones. Podemos ver uno, dos, tres, uno, tres, dos, dos, uno, tres, dos, tres, uno, tres, uno, dos, tres, dos, uno. Podemos ver que aquí tenemos todas las variaciones. Ahora bien, esto está, supongo, un poco fuera de alcance, pero es útil, especialmente en áreas de estadística o si estás trabajando con muchos datos y necesitas trabajar con la función de datos y necesitas trabajar permutaciones, y tal Derecha. Lo siguiente que quiero mostrar es cómo se puede hacer uso del módulo de combinaciones, la función de combinaciones, disculpe. Esto se utiliza para seleccionar grupos únicos de elementos o artículos, debería decir, y el orden no importa en que haga esto. Sólo podemos decir combinaciones. Desde el modelo itertools, queremos importar el módulo de combinaciones Nuevamente, quiero definir una lista y pondré esto como uno, dos y tres, por ejemplo. Nuevamente, voy a definir una variable. Diré C y queremos convertir la salida en una lista. Vamos a envolverlo con la función de combinaciones, y vamos a enyesar en nums y dos Combinación nums y dos. Esto nos permitirá generar un iterador y este iterador va a recoger todas las dos combinaciones numéricas Podemos volver a ver que está envuelto en nuestra lista, así que podemos obtener esa salida de lista como lo hicimos antes. Podemos decir imprimir C. Vamos a ejecutar el código. Y aquí podemos ver que obtenemos las combinaciones designadas que hemos establecido. Entonces tenemos dos aquí en cada set. Si tuviéramos que hacer uno, solo obtendríamos uno en sets separados. Y si dijéramos tres, vamos a poner todo el set en uno. Derecha. Entonces así es como podemos utilizar combinaciones aquí. Bien. Ahora bien, si tuviéramos que ejecutar esto, podemos ver que obtuvimos los mismos resultados, así que estamos generando correctamente. Genial. Todo bien. Ahora lo siguiente que vamos a ver es acumular. Ahora bien, esta es una interesante. Podemos, por ejemplo, realizar una suma acumulativa. Esto es algo que hemos visto en algún momento antes del curso, pero déjame mostrarte cómo puedes hacerlo con la función de acumular. Esta es una muy útil , por lo que puedes importar la función de acumular. Entonces lo que quieres hacer es definir una lista de números. Diré uno, dos, tres y cuatro. Entonces lo que quieres hacer es, nuevamente, solo definir una variable, agregar tu lista para que puedas convertirla y puedes convertir la salida de la función de acumular y yeso en nums aquí para tu función de acumular, y la salida estará en una lista asociada a AC Entonces voy a decir imprime A y vete. Ahora podemos ver que tenemos uno, tres, seis y diez. Ahora lo que se acumulan. Te explicaré lo que pasa. Comenzamos con el primer ítem o elemento de nuestra lista, luego decimos uno más dos es igual a tres. Esa es la siguiente parte de esta lista dada. Entonces tenemos tres más tres, eso nos da seis. Entonces tenemos seis más cuatro, eso nos da diez. Este es el proceso de acumulación, cómo podemos acumular en consecuencia. Si tuviera que cambiar esto ahora a dos, tres, cuatro, 25, cuatro, ocho, por ejemplo, código, vamos a obtener lo siguiente. Entonces comienzas a las dos. Dos más tres te da cinco. Cinco más cinco te da diez, diez más ocho te da 18. Bien, así sucesivamente y así sucesivamente y así sucesivamente. Se puede ver que es una función muy útil. A mí me gusta esta de la mayoría de las herramientas Iter porque es extremadamente simple y muy útil. Derecha. Ahora, lo que vamos a hacer ahora es enfocarnos en el grupo por función. Entonces voy a mover lo siguiente y podemos comenzar con el Grupo B. Bien. Ahora con el grupo B, esencialmente, lo que vamos a hacer de nuevo es de nuevo, crear un iterador, y va a generar grupos uno por uno Bien, así que sigamos adelante y comencemos con el proceso. Derecha. Y otra cosa que también quiero mencionar es mediante la utilización de la función group B, vamos a agrupar esencialmente elementos basados en una clave. Pero esto se va a ordenar antes de que realmente hagamos eso. En primer lugar, necesitamos establecer una lista de tuplas con categorías, agrupando la clave y los valores asociados Podemos decir datos, y vamos a poner esto en una lista. Voy a tener, por ejemplo, A será uno. Entonces el siguiente, podemos tener A, y eso serán dos. Entonces podemos tener otro que sea B, y tres. Entonces podemos tener, por ejemplo, B y cuatro, y luego podemos tener a y seis. Ahí vamos. Perfecto. Así que ahora tenemos esa configuración. Ahora queremos ordenar por el primer valor, esto va a asegurar que el grupo por función funcione correctamente. Entonces voy a decir dato punto SOT, con este método dentro de él, voy a decir K, va a ser igual a Lambda. Vamos a usar Lambda aquí con un parámetro de X, y luego va a tener X y cero aquí. Bien. Bien, entonces ahí lo tenemos. Ahora lo siguiente que queremos hacer es que vamos a definir una variable y podemos llamar a este grupo y establecerlo en el grupo B. Esa es la función del grupo B. Aquí vamos a pasar por esos datos que han sido ordenados, y vamos a decir que K es igual a Lambda. X, X y cero. Entonces, lo que estamos haciendo ahora es esencialmente dentro de lo que estamos haciendo es que vamos a asegurarnos de poder agrupar nuestros elementos en consecuencia. De acuerdo con la función Lambda que hemos estipulado de acuerdo a la clave. Ahora podemos ir en una cabeza y poner un bucle. Entonces vamos a ver cuatro grupos clave agrupados Bien. Y luego podemos decir print, key, y después queremos convertir la lista a grupo. Bien. Derecha. Así que dentro de este bucle, esencialmente, vamos a convertir dentro del bucle, vamos a convertir cada grupo en una lista para ver todos los elementos a la vez. Entonces, sigamos adelante y ejecutemos este código. Y aquí podemos ver por las categorías. Podemos ver para A, tenemos A uno, A dos, A seis, para B, tenemos B tres y B cuatro. Bien, así es como podemos seguir adelante y agrupar nuestras categorías, como pueden ver. Bien. Entonces ahí lo tenemos esencialmente en su lugar. Ahora, también quiero mencionar aquí con nosotros definiendo y clasificando de acuerdo con Lambda aquí. Básicamente vamos a agregar los valores en consecuencia a través nuestra función Lambda para ordenarla, y luego vamos a agruparla, y luego luego, vamos a imprimir cada iteración, y va a aparecer de la siguiente manera en el grupo por Bien. Entonces ese es el grupo por función que hemos utilizado. ¿Bien? Ahora, sí quiero mencionar un poco más y más detalle, sobre todo con la función Lambda. Así que vamos a hablar un poco más sobre eso y luego vamos a ver el conjunto final de iteradores en términos de las funciones de conteo, ciclo y repetición Entonces llegaremos a eso pronto, pero acabemos con el grupo B. Bien, así que vamos a seguir adelante y entrar en más detalles aquí. W ordenación de datos. Ahora ya sabemos que los datos son una lista de tuplas, y por supuesto lo rodeaste dentro de un formato de lista Entonces queremos ordenar los datos aquí esencialmente que hemos establecido, esencialmente, el método de clasificación de puntos va a ordenar la lista en su lugar en función de nuestra función clave. Bien. Tenemos K es igual a Lambda X, colon y luego X y cero aquí. Lo que vamos a hacer es que vamos a tomar cada tupla y claro, eso va a ser sustituido, como puedes ver por X. Cada tupla, claro, por ejemplo, puede ser A uno, A dos, P tres Vamos a seguir adelante y sustituirlo. Entonces vamos a extraer el primer elemento aquí mismo, que va a ser una A o una B y luego vamos a ordenar la lista en función del primer elemento. Bien. Luego a continuación, lo que vamos a hacer, como puedes ver aquí que tenemos agrupados iguales al grupo B. Sólo estamos definiendo una variable para asignar aquí el resultado de la función del grupo B, y group es esencialmente va a agrupar los números consecutivos que tienen la misma clave. ¿Bien? Entonces tenemos, por supuesto, la función clave aquí mismo, que va a extraer el primer elemento. Entonces A o B. No va a ordenar los datos en este caso aquí, ¿de acuerdo? Sólo va a asumir se podría decir que los elementos o elementos similares están uno al lado del otro, razón por la cual lo ordenamos primero. A continuación, tenemos aquí los cuatro bucles con los que estamos trabajando, y como sabemos que el grupo por función que tenemos aquí va a devolver pares de clave y grupo donde la clave es la clave del grupo. A o B en este caso, tenemos grupo, ¿verdad? Y ese es un iterador de los ítems que pertenecen al grupo Bien. Todo bien. Entonces lo que vamos a hacer esencialmente es seguir adelante y asegurarnos de que convertimos grupo a nuestra lista. Así podemos imprimir todos los artículos a la vez, bien. Así que esa fue la exposición más profunda de cómo podemos utilizar este grupo por función. Ahora bien, este es un poco complicado, así que en realidad no te preocupes demasiado por esto. Es un poco descabellado, pero es bueno al menos tener contexto en lo que estás haciendo y con lo que trabajas Todo bien. Ese es el grupo B. Bien, así que sigamos adelante y continuemos con el resto de funciones con las que hemos estado trabajando. Entonces ahora lo que podemos hacer es seguir adelante y trabajar con los iteradores infinitos Entonces estos iteradores siguen generando valores para siempre, y necesitan ser, por supuesto, detenidos manualmente Bien. Entonces tenemos ciclo de conteo, y repetimos. Entonces vamos a seguir adelante e importar los moles, contar, ciclo y repetir Cuenta va a seguir contando para siempre como un bucle de cuatro que nunca termina. Por ejemplo, podemos decir cuatro yo en recuento, y aquí podemos decir cinco. Ahora, lo que te recomiendo que hagas es que me veas hacer esto. No quiero que estés en una situación en la que vayas a tener un programa que siga en bucle y nunca termine y si te metes en ese problema, así que por favor te aconsejo solo mires lo que estoy haciendo por esta parte Vamos a empezar a contar desde cinco. Entonces podemos decir imprimir I. Entonces lo que queremos hacer es que queremos decir I I es igual a diez, entonces quiero detener manualmente el bucle. Voy a decir break. Vamos a ejecutar esto. Entonces podemos ver aquí vamos todo el camino 5-10, y luego dijimos break, y eso detiene el loop de correr. Si no sigo adelante y tengo irrumpir, o, lo que puede pasar es que podemos tener una situación interesante con el bucle pasando por siempre y para siempre. Entonces así es como puedes usar la función count. Bien, así que sigue contando para siempre y sigue adelante y no va a parar a menos que tengamos un rastrillo en su lugar También tenemos la función ciclo, así que eso es repetir una lista infinitamente como se podría decir adelante y pongamos el conteo a cero, y podemos decir cuatro ítem en ciclo, y vamos a pasar en una lista de ítems o elementos, se podría decir. Y queremos sumar en el colon. Entonces queremos imprimir cada artículo. Entonces vamos a decir más es igual a uno, y va a seguir dando vueltas y dando vueltas Y si llegamos a la cuenta de seis, se va a romper. Adelante y ejecuta el ciclo. Aquí tenemos A, B, C, A, B, C. Así es como podemos seguir adelante y utilizar la función de ciclo. Bien. El último por el que vamos a pasar va a ser repetido. ¿Bien? Entonces queremos repetir un valor, un número específico de veces. Bien, entonces podemos decir REP, por ejemplo, como variable. Queremos decir list porque queremos convertir la salida en una lista. Queremos envolver dentro de la función repeat. Y aquí quiero saludar, y tres. Entonces quiero decir print, ap. Bien. Entonces si tuviera que ejecutar esto, dice hola, hola, hola. Estamos optando por repetir el primer valor que ponemos aquí en los análisis sintácticos y la derecha es donde definimos cuántas veces queremos repetir lo que aquí hemos definido en el lado izquierdo El primer parámetro que podrías decir es, por supuesto, lo que quieres repetir. El segundo parámetro que técnicamente podrías decir es cuántas veces quieres que se repita. Si fuera a decir, me gusta la misa, y quiero repetirlo cinco veces. Se va a repetir me gusta la misa cinco veces. Y como lo convertimos en una lista esa salida que obtenemos aquí de esta función de repetición aquí, la va a poner en una lista y los datos dentro la lista y acabamos de imprimirla. Entonces así es como podemos usar una función de repetición. Ahora obviamente, yo diría que contar y ciclo están bien, pero yo diría que repetir es más útil como una de las herramientas iter. Muy bien chicos. Eso es. Entramos en detalle de las funciones que puede utilizar con las herramientas de Iter. 75. Administradores de contexto: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada a los gestores de contexto. Entonces echemos un vistazo. Entonces probablemente te estés preguntando qué rayos de la Tierra es un gestor de contexto. Entonces, un administrador de contexto en Python maneja la configuración y limpieza de recursos automáticamente, como abrir y cerrar archivos usando la instrucción WI Ahora, la declaración WI simplifica la gestión de recursos, haciendo que nuestro código sea más seguro y más legible Entonces déjame mostrarte una diferencia aquí en cuanto a administrar archivos manualmente, como hemos aprendido anteriormente en el curso y cómo puedes hacerlo más cómo puedo decir de manera más simple, más eficiente, debería más bien decir que era un gestor de contexto. Aquí está el archivo básico IO que se está realizando. Estamos abriendo un archivo conocido como car dot TXT y queremos escribirle. De ahí que el modo W esté en su lugar. Entonces nos referiremos a ese objeto de archivo en particular, y vamos a decir car file dot right y luego diremos que mis tarjetas favoritas son Forward y un Tesla, y luego tenemos que cerrar nuestro archivo. Sin embargo, podemos simplificar esto un Gestor de Contexto, que va a abrir y escribir en nuestro archivo. Como puedes ver, es mucho más simple, menos líneas de código. Así que tenemos WIS Open, car dot txt, el mismo modo, y vamos a configurarlo como archivo car. Eso sería lo que lo pondríamos como en términos de configurar la variable. Y luego diremos archivo de auto, correcto, y escribiremos como de normal. Ahora bien, una buena cosa que puedes ver aquí es que no necesitas cerrar tu archivo después de escribir, y esto puede resolver un gran punto de dolor. También un poco más suave en cuanto a cómo se escribe. No tienes que ser tan simplificado y definir una variable y decir punto escribir punto cerrar. Es un poco más limpio y más eficiente. Además, lo que puedes hacer es seguir adelante y aplicar esto en este siguiente ejemplo donde estamos abriendo nuevo un archivo para anexarlo Entonces aquí tenemos archivo car es igual a abrir CartXT luego A, y podemos ver que estamos escribiendo y cerrando el archivo, podemos seguir adelante y con nuestro Gestor de Contexto, solo podemos simplificar esto para reemplazarlo con W abierto y luego decir como archivo car, sería la definición Muy bien, chicos. Entonces esto es solo un poco de conocimiento para usted, que pueda ver cómo los administradores de contexto nos ahorrarían al menos la molestia de tener que cerrar el archivo, y es mucho más suave y limpio utilizar administradores de contexto, especialmente cuando está realizando ILO de archivos con entrada y salida de archivos. 76. Trabajar con administradores de contexto: [Laboratorio]: Hola a todos, y bienvenidos al próximo ejercicio práctico de laboratorio, que se centrará en utilizar el administrador de contexto. Empecemos. Ahora bien, lo primero que quiero hacer es que solo quiero hacer alguna revisión con todos ustedes y simplemente pasar por archivo básico IO nuevamente, peso manual sin usar un gestor de contexto. Correcto, al seguirlo de esta manera, aprenderás a ver las diferencias y aprenderás a aplicar ambos casos. Queremos definir una variable y puedo llamar a este archivo car, y vamos a asignarlo a nuestro objeto file, esencialmente, que se crea utilizando nuestra función open y pasaremos en carritos el archivo que queremos abrir o crear si no existe, y queremos escribir en ese archivo de ahí que el modo sea W. A continuación, queremos hacer referencia a llamado archivo y agregar en el mensaje de escritura, queremos escribir en el archivo. Aquí quiero decir que me gustan las tarjetas rojas. Entonces queremos cerrar el archivo y decir carflet close. Vamos a ejecutar el código. Vamos a nuestro directorio. Y aquí puedes ver que el punto TxDFLE ha sido creado en el directorio de nuestro proyecto. Si puedo dar click en eso, puedo ver que da salida a mí me gustan los autos rojos como debería. Muy bien, perfecto. Ahora, lo que voy a hacer a continuación es que voy a comentar este código, que puedan ver y aprender las diferencias entre el manejo regular de archivos y cómo hacerlo con un gestor de contexto. Entonces voy a hacer click derecho sobre car dot TXT y eliminarlo. Y muévelo a la papelera de reciclaje. Genial. Así que ahora el gestor de contexto, diríamos Wi open, y utilizamos la función open y queremos crear un archivo car dot txt con la intención de escribir en el archivo, y este va a ser almacenado como archivo car. Y esa es la variable a la que asignamos este objeto archivo. Entonces podemos decir carfle dot justo debajo de él, y ese va a ser exactamente el mismo mensaje que usamos antes Y aquí quiero decir que me gustan los autos azules y es ejecutar este código. Vamos a nuestro directorio. Aquí podemos ver que tenemos Tarjeta en TXT que ahora dice, me gustan los autos azules. Perfecto. Ojalá ahora se pueda ver la distinción entre los dos. Ahora antes de seguir adelante y probar esto con el modo append, lo que quiero hacer es pasar por otro ejemplo contigo con la escritura de archivos que puedas empezar a aprender la distinción entre ambos métodos Podemos eliminar esto sigamos adelante y hagamos el siguiente ejemplo y luego anexemos. Todo bien. Ahora lo que voy a hacer es basar esto en una persona. Diré archivo de persona igual, y voy a decir abierto. Esto va a crear un archivo llamado persona punto GXT y quiero escribir en este archivo Ahora voy a decir persona archivo punto R, y quiero escribir Hola. Yo soy Auto. Entonces necesito cerrar el archivo diciendo persona archivo punto cerrar. Sigamos adelante y ejecutemos el código. Ir al directorio. Y aquí podemos ver que tenemos persona punto TXT. Si damos click en eso, podemos ver, Hola, Amano. Genial. Así que ahora todavía puedo ver que tenemos el carrito archivos TXT. Entonces lo que voy a hacer es que voy a seguir adelante y borrar ambos archivos a partir de ahora. Entonces podemos comentar este código por el momento. Y vamos a hacer exactamente lo mismo para un archivo de persona. Entonces voy a usar el gestor de contexto ahora y voy a decir Wi voy a decir abierto. Y aquí, lo que voy a hacer es crear un archivo TXT punto persona con la intención de escribirle como archivo de persona. Voy a decir persona archivo punto derecho, y voy a escribir Hola iMou Vamos a ejecutar código ahora. Se puede ver a una persona en archivos TXT creados que dice hola soy no. Sencillo. Ahí lo tenemos. Ahora tenemos esa práctica fundamental en su lugar ahora. Ahora lo siguiente que queremos hacer es ahora que tenemos a esa persona en el archivo TXT, realidad sigamos adelante y lo abramos y agregemos a ella usando el archivo básico IO Sabemos que esto existe, así podemos seguir adelante y eliminar todo. Guarde ese archivo. Ahora vamos a abrirlo. A partir de este momento, solo dice, Hola soy Ro. Lo que podemos hacer es que podamos volver a abrir ese archivo y añadirlo. Yo lo llamaré archivo de persona. Ver abierto, y esto se llama person dot TxD y nuestra intención es agregarle . Ese es el modo que estableceremos. Entonces queremos seguir adelante y decir persona archivo punto derecho, y quiero agregar un espacio y quiero decir hola Ana fue lo que decía, y me gustan las películas. Muy sencillo. Y podemos decir archivo persona punto cerrar. Sigamos adelante y ejecutemos este código. Vamos al directorio, prisión f Dice, Hola, no soy, y me gustan las películas. Perfecto. Entonces podemos ver así es como podemos utilizar un método pen con archivo básico IO. Sigamos adelante y configuremos esto con un Gestor de Contexto. Entonces dice, y me gustan las películas, sigamos adelante y ajustemos esto. Entonces voy a comentar esto. Vamos a añadir de nuevo a ese archivo. Queremos ver WIS abierto aquí dentro de Parenss me voy a referir a ese archivo, que se llama persona punto Mi intención es anexar a ese expediente como expediente personal. Entonces podemos escribirle. Diré persona archivo punto, bien. Veamos qué tenemos en este momento. Hola, soy y me gustan las películas. Entonces voy a decir algo afuera que diga, soy de Sudáfrica. Eso debería anexar después, y quiero poner en un espacio aquí. Ahí vamos. Entonces sigamos adelante y veamos si se le agrega. Entonces si ejecuto el código, vaya a persona punto TXT, y ahí vamos. Podemos ver Hola, soy Ano y me gustan las películas. Soy de Sudáfrica. Ahí vamos. Sencillo. Así es como podemos utilizar los gestores de contexto cuando estamos trabajando con nuestros archivos. Entonces puedes ver que es muy efectivo si queremos simplificar y omitir cualquier miedo a cerrar nuestros archivos después de reescribirlos porque puede ser un poco tedioso y puedes olvidar y puedes encontrarte Pero con los gestores de contexto, se encarga de todo por ti. Muy bien chicos Entonces eso es todo en este ejercicio práctico de laboratorio sobre gestores de contexto. 77. Gestores de contexto integrados vs. personalizados: Hola a todos, y bienvenidos a la siguiente lección, que se centrará en comparar el gestor de contexto integrado versus el personalizado. Entonces echemos un vistazo. Todo bien. Ahora, con el gestor de contexto incorporado, normalmente usarías con open, y usaríamos la instrucción Wi con la función open para abrir un archivo. Bien. Ahora bien, este es un gestor de contexto integrado que gestiona automáticamente nuestros recursos como archivos para abrirlos y cerrarlos, y esto es con lo que hemos estado trabajando como en la lección anterior. También contamos con un gestor de contexto personalizado. Un ejemplo de cómo se utilizaría esto es que un gestor de contexto personalizado es básicamente una clase que creas que definirá métodos enter y exit dentro de la clase para ejecutar y administrar recursos o acciones cuando entramos o salimos de un determinado bloque de código. Ahora lo que vamos a hacer es seguir adelante y trabajar con un gestor de contexto personalizado. Ya tenemos experiencia con un gestor de contexto incorporado, con el que hemos estado trabajando en el anterior ejercicio práctico de laboratorio, pero ahora vamos a crear nuestro propio gestor de contexto personalizado. Te voy a mostrar cómo puedes gestionar todo con tus archivos, por ejemplo, si vas a trabajar con una clase determinada. Así que vayamos directo a ello. 78. Crea un gestor de contextos personalizado: [Lab]: Hola a todos y bienvenidos al próximo ejercicio práctico de laboratorio, que se centrará en crear un gestor de contexto personalizado para el manejo de archivos. Sigamos adelante y comencemos. Ahora, ya tenemos experiencia con clases, así que vamos a hacer uso de una clase. Lo primero que queremos hacer es definir nuestros nombres de clase. Voy a decir clase y lo llamaré administrador de archivos. Entonces necesito seguir adelante y definir mi mensaje de inicio. Diré Derescore entonces tenemos que pasar por nuestros parámetros, así que tendremos self, nombre de archivo y Ahora queremos inicializar nuestra clase de gestor de archivos y lo que vamos a hacer es vamos a especificar los atributos Vamos a decir que el nombre del archivo self dot es igual, y ese va a ser el nombre del archivo. Entonces vamos a tener auto modo, y eso va a ser igual al modo. Vamos a almacenar el nombre del archivo aquí con nombre de archivo self dot y también vamos a almacenar el modo como modo y que puede ser R para lectura, puede ser W para, por supuesto, escritura y puede ser A para append Bien. A continuación, lo que queremos hacer es querer definir nuestros métodos. Recuerda con los mensajes, necesitan estar en línea con tu método de inicio Voy a primero que nada, decir Defunderce entrar, doble subrayado, y aquí vamos Esencialmente, lo que queremos hacer es que queremos ingresar al contexto de tiempo de ejecución relacionado con nuestro objeto, y este método va a ser llamado cuando la ejecución ingrese al Wispblock que definiremos más adelante, y abre el archivo y devuelve el objeto file Bien. Entonces, lo que queremos hacer es decir archivo de punto propio es igual a abierto. Vamos a decir nombre de archivo self dot y modo self dot. Entonces queremos abrir el archivo en el modo designado que se le da. Entonces queremos decir return, self dot file. Bien. Ahora, el archivo self aquí, por supuesto, va a ser nuestro objeto file, y ese será el archivo abierto que se puede usar en el bloque WIS. Entonces eso es lo que vamos a hacer aquí. Y como podemos ver, a esto se le asigna como variable en ingenio. ¿Bien? A continuación, lo que tenemos que hacer es seguir adelante y especificar nuestro método de salida, y eso va a salir del contexto de tiempo de ejecución y limpiar los recursos. Este método se llama cuando la ejecución sale del bloque With. Sólo voy a decir Jeff, salida de doble guión bajo, y doble subrayado Va a pasar por bastantes parámetros. Primero, vamos a tener auto. Entonces vamos a tener el tipo de subrayado EX. Ese es el tipo de excepción si se produjo una excepción. De lo contrario, sólo va a devolver ninguno. Entonces tenemos valor de subrayado EXC. Esta es la instancia de excepción si ocurrió un error, y por supuesto, si no ocurre nada, simplemente va a ser ninguno. Entonces vamos a tener rastro atrás. Ese es el objeto de rastreo que contiene detalles de error. Podemos seguir adelante y cerrar lo siguiente. este momento, lo que queremos hacer es querer primero que nada, verificar si el archivo está abierto. Diré que yo mismo punto archivo. Entonces, si se abre ese archivo, y en ese caso, si lo ha sido, entonces lo que quiero hacer es cerrar el archivo para liberar recursos. Entonces esto está al salir. Así que vamos a verificar si el archivo está abierto inicialmente, y cuando esta salida si se ejecuta este método de salida, entonces podemos cerrar ese archivo en particular. ¿Bien? Porque no se puede cerrar algo que no está ya abierto. Bien. Entonces se va a llamar al método exit cuando queramos seguir adelante y salir de nuestro archivo y cerrarlo. Entonces el método va a verificar si ese archivo está realmente abierto en este momento, si hay algo demasiado cerca, y luego lo va a cerrar. Entonces diríamos archivo self dot, dot close. Entonces vamos a cerrar el archivo, y eso va a ayudar a liberar recursos. Bien. Perfecto. Ahora lo que queremos hacer es que queremos seguir adelante y justo aquí fuera de nuestro administrador de archivos de clase, lo que queremos hacer es querer usar nuestro gestor de contexto personalizado. Eso va a ser lo que hemos usado antes con la lógica que hemos estado utilizando antes. Vamos a seguir adelante y decir, Whiz, vamos a llamar a nuestra clase aquí, que es el encargado de archivos Y entonces nos va a gustar antes, definir lo que queremos abrir o crear. Entonces aquí, voy a decir coche punto TXT, y luego quiero escribirle, así voy a poner en el modo W, y voy a decir como CarFle. Vamos. Bien. Entonces como podemos ver aquí, tenemos esta es declaración aquí, y eso va a ir una bruja y llamar a nuestro método de administrador de archivos, que es Enter, que va a abrir el archivo y devolverlo, y se le asignará el objeto de archivo de retorno Para archivo de auto y se usa dentro de la cuadra. Entonces lo que queremos seguir adelante y hacer es asegurarnos de que estamos escribiendo a nuestro expediente. Hasta aquí, voy a decir carfle dot. Aquí voy a decir, me gusta Honda. Bien, así que escribimos en el expediente. Entonces el archivo ahora que está abierto, también va a escribir en el archivo. Y automáticamente cuando hayamos realizado la acción necesaria, cuando termine el bloque, es decir, con la declaración WIS que hemos configurado aquí, va a llamar al administrador de archivos en términos de su método de salida que se designa aquí mismo y va a llamarlo automáticamente para cerrar el archivo. Bien. Ese es el proceso aquí y la ejecución con lo que estamos configurando aquí. Yo sólo voy a alejar aquí. Para que veas, definimos nuestra clase, agregamos en los parámetros y declaraciones necesarias. Y luego justo aquí al final afuera, solo estamos llamando a nuestra clase y luego a ir a un seto y crear un archivo y luego toparnos con él De hecho, podemos seguir adelante y probar esto. Entonces lo que voy a hacer ahora es que voy a probarlo. Entonces si ejecuto mi código, no va a haber una salida, pero si voy aquí mismo, puedo ver que tengo esta tarjeta punto archivo TXT que dice, me gusta Honda. Y se puede ver que todo se gestionó automáticamente para nosotros y como debería ser. Muy bien, bien. Así es como puede seguir adelante y esencialmente crear un administrador de contexto personalizado para el manejo de archivos, y lo más importante, lo estamos usando a través de Visa a través de clase aquí, como puede ver, llamado administrador de archivos. Bien, entonces todo el proceso, como pueden ver, funciona muy similar a la forma habitual en la que seguimos adelante y trabajamos con nuestras clases. Bien. Eso es para la parte principal. Lo que voy a hacer ahora es simplemente seguir adelante y analizar más y mostrarte qué más puedes hacer. Todo bien. Vamos a continuar. Ahora lo siguiente que vamos a querer hacer es que vamos a querer seguir adelante y personalizar más dentro de nuestros métodos enter y except. Ahora antes de continuar, lo que quiero hacer es simplemente hacer un poco de limpieza. Voy a ir a Explorer y quiero eliminar estos archivos que tengo excepto el archivo principal punto pi. La persona dotXT y el auto dotXT. Ahí vamos. Solo asegúrate de no eliminar el archivo punto principal. Eso es con lo que estamos trabajando. Lo que podemos hacer ahora es que podemos seguir adelante y hacer un poco de personalización dentro de nuestro método interino. Lo que quiero hacer es una vez que se abra un archivo, quiero sacar algún texto para decir el nombre del archivo que se abrió y también para seguir adelante y sacar el modo en que se abrió En este caso aquí, quiero imprimir que CDTxt fue abierto o creado y el modo de escritura estaba habilitado para ello Así que aquí estaba en mi Entrar mensaje. Vamos a mover eso ahí. Puedo decir imprimir. Voy a usar cadenas S para decir el archivo. Y aquí voy a poner en mi orden de lugar en sí nombre de archivo. Entonces va a llamar al nombre del archivo, que se llamará en txt, y luego al modo, que será W. Quiero decir que el nombre del archivo es el archivo, así y así está abierto, y el modo es, y entonces puedo decir modo de auto punto. Vamos. Ahora, digamos que quiero agregar en una declaración justo antes de que se cierre el archivo, así puedo utilizar el método de salida para eso y ajustarlo. Puedo decir imprimir. El expediente está a punto de ser cerrado. Tenerlo. Ahora voy a recrear ese archivo TXT que tenía antes y aparecerá aquí adelante y ejecutemos el código, pero ahora deberíamos ver salida en nuestra consola la salida que se está mostrando. Sigamos adelante y guardemos y ejecutemos este código. Ahí vamos. Como podemos ver aquí, dice, la tarjeta de archivo TXT está a punto de abrirse y el modo es W y el archivo está a punto de cerrarse. Podemos ver nuestro método enter corrió e imprimió la siguiente declaración, que fue la primera aquí, con nuestro método de salida imprimió el archivo está a punto cerrarse y siguiente como podemos ver aquí mismo. Perfecto. Bien hecho. Así es como puedes seguir adelante y agregar funcionalidad extra a tus métodos. Derecha. Ahora, sigamos adelante y realicemos el manejo de errores. Ahora, digamos que tenemos un error al salir de nuestro archivo. Por ejemplo, aquí, quiero seguir adelante y anular este archivo que tenemos actualmente, y sólo voy a cambiar algún texto para decir me gusta por ello como ejemplo. Entonces sólo voy a, por ejemplo, llamar a Afle. Voy a decir aquí carfle punto aleatorio. Bien, y eso va a ser un mensaje aleatorio, algo aleatorio aquí. Entonces digamos que queremos llamar a un método aleatorio, algo que no existe, va a tener un error al cerrar el archivo porque recuerden, cuando estemos abriendo el archivo, bien, vamos a asegurarnos de que seamos capaces de acceder a él, que podemos hacer, y podemos escribirle, lo que podemos hacer aquí mismo. Y vamos a escribir al expediente al abrirlo, y va a ser escrito. Y entonces sólo se va a cerrar cuando estemos ejecutando el mensaje de salida. Entonces después de haber escrito en el archivo, vamos a cerrar el archivo, pero antes de que se pueda cerrar, luego seguimos adelante y agregamos en este método no válido, que va a desencadenar un error en este método de salida porque ahí es donde estamos en la etapa actual del programa. Esencialmente, lo que quiero hacer es ir a un seto e imprimir una excepción Entonces lo que voy a hacer, lo voy a mantener muy simple, y voy a ir a decir que si tuviera una excepción, voy a decir aquí, si mi excepción guión bajo chip no es ninguno Entonces, si tengo una excepción, entonces quiero imprimir temporalmente excepción siendo manejada Bien, así como así. Y lo siguiente que quiero hacer es simplemente decir salir aquí afuera, y quiero volver verdad. Bien. Ahora, déjenme elaborar lo que estoy haciendo aquí. Entonces esta declaración impresa aquí dice que la excepción que se maneja significa que quiero imprimir un mensaje si ocurrió una excepción. Entonces este tipo de excepción dice, I tipo de excepción no es ninguno, lo que significa que si hay una excepción, quiero imprimir excepción siendo manejada. ¿Bien? Todo lo que estoy haciendo aquí fuera de eso declaro es que estoy diciendo salida de impresión. Eso va a imprimir este mensaje independientemente de si hubo una excepción o no. Devolver verdad aquí, es muy importante porque eso va a suprimir cualquier excepción que haya ocurrido dentro del bloque WIS aquí. Se va a asegurar que no hay más errores de salida. Te voy a mostrar lo que va a quedar cuando me ocupe primero de la excepción. Lo estoy haciendo al revés. Entonces, si tuviera que ejecutar este código, podemos ver, Bien, está abierto. Podemos ver que se está cerrando. Entonces podemos ver la excepción siendo manejada y salida. Ahora, digamos que iba a quitar ese manejo de excepción, y dejarme ir a un seto y solo comentar para sonar y quitar eso Y ahora lo que voy a hacer es que voy a ejecutar exactamente lo mismo y decir run code. Bien. Y podemos ver aquí el archivo está a punto de cerrarse y salir. Ahora bien, lo que verás aquí es que todavía no está lanzando flechas, y eso es porque he vuelto verdad aquí, y eso suprime tus excepciones dentro del wispblock Entonces lo que vas a querer hacer es agregar tu hashtag aquí y solo agregarlo en el comentario, y podemos seguir adelante y ejecutar el código. Ahora puedes ver que se produce un error de rastreo. Podemos ver ahora tenemos este error, por lo que es un error de atributo y el objeto tiene un atributo mesod aleatorio podemos ver donde ocurrió ese error de acuerdo con el traceback Podemos ver el mensaje aleatorio de carfle dot, y aquí es donde ocurrió ese error Eso es algo que quería mencionar. Ese es el error que obtendrás si no tienes el manejo de errores en su lugar. Ahora bien, si quieres que sea un poco más conciso y quieres que sea específico, lo que esencialmente puedes hacer es lo siguiente. Vamos a decir retorno verdadero. Queremos obtener ese tipo de excepción. Pero dentro de esta declaración aquí, queremos ver los detalles más concisos. No queremos el manejador de excepciones predeterminado. Queremos darle estilo nosotros mismos. Quiero ver el tipo de excepción y el valor de excepción, y quiero ver el traceback todo aquí en esta declaración impresa Lo que voy a hacer es que voy a seguir adelante y agregarlos. Voy a decir, tipo de excepción. Lo que voy a hacer es que creo que voy a usar cuerdas F, así que simplemente puedo volver a ello Voy a decir tipo de excepción. Entonces vamos a tener valor y quiero ver el rastro de vuelta. También voy a cambiar el texto. Esto es para tener mis propios mensajes de error personalizados. Trazback. Ahora, vamos a ejecutar esto. Entonces recibo mis propios mensajes de error personalizados, y esto es realmente útil. Tipo de excepción, podemos ver error de atributo, valor de excepción, podemos ver que no tiene ningún atributo mesod aleatorio que sea perteneciente a esto y podemos ver también un traceback en términos del objeto traceback ahí Ese es el error ahí. Ahí vamos. Siento que es una forma más útil si quieres manejar también el manejo de errores, solo seguirías adelante y verificarías tranquilamente si el tipo de excepción no es ninguno, y luego volverás true para que puedas suprimir cualquier excepción que ocurra, claro, como mencioné, dentro del Wistblock también se asegurará de que no desencadene el error predeterminado dentro del consola, y al manejarlo usted mismo mirando manualmente el tipo, el valor del traceback también puede ser muy efectivo, porque como puede ver, también está en una especie de salida muy limpia de salida Bien, así es como también puedes manejar el manejo de errores cuando estás tratando con tu gestor de contexto personalizado Entonces otro punto muy útil para mencionar aquí es cuando estás trabajando con gestores de contexto, tienes más opciones para cambiar cómo quieres, por ejemplo, el proceso de manejo de archivos para ir. Muy bien, chicos. Así que eso es todo para este ejercicio de laboratorio sobre la utilización de administradores de contexto personalizados con manejo de archivos en este caso particular. 79. Generadores: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada los generadores, comencemos. Bien, entonces probablemente te estés preguntando qué demonios es un generador. Un generador es esencialmente una función única que conserva su estado y produce una secuencia de valores uno a la vez, lugar de devolverlos todos a la vez. Ahora, probablemente te estés preguntando, es bueno saberlo, pero ¿cómo funcionan realmente? En lugar de retorno, los generadores utilizan la palabra clave yield. Ahora bien, esto significa que no corren todos a la vez, sino que hacen una pausa en el rendimiento. Y esto hace que los generadores sean eficientes en la memoria, ya que no almacenan toda la salida en la memoria. Ahora bien, los efectos que ves no es algo que verás enseguida. Realmente no lo verás en el código, pero es en términos del procesamiento del backend. ¿Bien? Así es como medirías la eficiencia, pero sí tengo una lección sobre que estamos como donde lo explicaré para que tenga más sentido sobre la eficiencia de la memoria. En fin, continuemos y enfoquemos en los generadores. Pero ahora lo que quiero hacer es explicar una analogía simple para explicar una analogía simple que puedas entender mejor a los generadores, y esta analogía va a estar enfocada en ver Netflix Entonces en el concepto de rendimiento en generadores, podemos compararlo en Netflix con el botón Pausa. Entonces yield es el botón de pausa. Después de terminar un episodio, Netflix hace una pausa en lugar de reproducirlo todo a la vez Netflix también tiene la opción hacer clic en el botón Siguiente para ir a continuación. Y cuando estamos trabajando con generadores, tendemos a usar a veces la siguiente función. Entonces el siguiente es un botón de reproducción. Entonces, cuando estés listo, presionas Reproducir para ver el siguiente episodio, y eso también puede ocurrir con los generadores. Podemos utilizar la siguiente función para pasar al siguiente resultado que se está rindiendo Ahora, otra cosa importante es que ahorra donde quiera que lo dejaste. No tienes que empezar desde el principio cada vez que se produce un episodio en Netflix. Siempre recuerda dónde te fuiste por última vez. Lo mismo con la utilización de generadores y la utilización del rendimiento. Va a recordar dónde estuviste por última vez. Bien. Ahora, apliquemos esto a un programa. Entonces creo una función, que es un programa de Netflix, y luego voy a ceder, por ejemplo, tres episodios. Así que cede el episodio uno, episodio dos y el episodio tres. Entonces voy a seguir adelante y almacenar esta función de programa de Netflix en una variable, y esta variable finalmente será un objeto generador que se está almacenando porque estamos utilizando la palabra clave yield. Entonces lo que podemos hacer es imprimir cada episodio en orden utilizando la siguiente función. Podemos decir imprimir a continuación y luego encapsular el episodio. Eso va a imprimir el Episodio uno. Entonces utilizamos la siguiente función siguiente, y ponemos en el episodio y eso va a dar salida al episodio dos. Va a recordar el estado. No va a imprimir los episodios uno, dos y tres. Si solo sigues adelante y muestras el episodio, tendríamos que decir lo siguiente y lo va a hacer en iteración Bien. Ahora bien, ese va a ser el caso si estamos haciendo saltos manuales, igual que en Netflix, si nos estamos saltando manualmente un episodio ¿Bien? Seguiríamos usando la siguiente función cada vez para hacerlo. Ahora, lo que también podemos hacer es que podemos automatizar esto para que vaya un poco más rápido. Podemos usar un bucle de cuatro. ¿Bien? Así que inicia el programa de televisión y recorre los episodios. Por lo que usamos un bucle de cuatro al decir cuatro episodios en el programa de Netflix , episodio impreso, y esto va a imprimir todo en el orden designado. Bien. Y eso sería saltarse automáticamente. Derecha. Así es como podemos aplicar y utilizar generadores. Vamos a practicar y vamos a seguir adelante y hacer algunos ejercicios prácticos de laboratorio para trabajar en generadores. Estén atentos. 80. Trabajar con generadores - [Laboratorio]: Hola a todos, y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado a los generadores. Ahora bien, como mencioné en las lecciones teóricas que mencioné, un generador es una función única que conserva su estado y produce una secuencia de valores uno a la vez, lugar de devolverlos todos a la vez. Ahora, solo quiero mostrarte y demostrarte que un generador no es solo una función regular y que es una función única. Así que sigamos adelante y definamos una función normal para empezar. Voy a decir la muerte y todavía vamos a tener la misma llamada que teníamos antes. Voy a decir Netflix underscore show como el nombre de la función, a cada lado, paréntesis vacíos Yo sólo voy a, por ejemplo, ir a un seto y decir Imprimir episodio uno, y eso es todo Entonces voy a conseguir una variable y voy a decir episodio es igual al programa de subrayado de Netflix Entonces si digo episodio impreso, vamos a ver aquí que no devuelve ninguno. Eso es sólo una prueba muy simple para ver si estamos tratando con una función. Pero si tuviera que quitar print y decir yield, use la palabra clave yield y quiero decir episodio uno, y hago lo mismo y corro, va a dar salida a un objeto generador. Entonces esto es una indicación para mostrar que al agregar en yield, le estamos diciendo a Pison que queremos transformar esta función como un generador, en otras palabras, una función única Entonces solo algo que quería mencionar ahí solo para que podamos tener algo de claridad sobre la diferencia. Así que vamos a la cabeza hacia atrás. De todos modos necesitamos definir una función. Va a ser programa de Netflix, y luego queremos dar algunos resultados. Entonces voy a ceder, en primer lugar, episodio uno, y va a ser que va a decir algo al azar, el molino. Rendimiento. Ahora voy a decir episodio dos. La prohibición y el rendimiento Episodio tres villa. Ahora, puedes agregar algo de espacio aquí si quieres, o puedes mantenerlo apretado. Realmente depende de usted en cuanto a lo que quiere hacer, pero asegúrese de tener tres declaraciones de rendimiento. A continuación, queremos asociar la función aquí, Netflix show, que ahora es un generador a una variable para que nuestra variable luego contenga este objeto generador. Entonces voy a decir episodio igual, y va a ser programa de subrayado de Netflix Y hemos asignado ese objeto generador. Perfecto. Ahora podemos seguir adelante e imprimir los episodios uno por uno. Entonces si digo print, puedo usar la siguiente función, y solo puedo decir episodio. Y sigamos adelante y ejecutemos esto. Y puedes ver aquí dice Episodio uno el Molino. Déjame ejecutar el código aquí. Episodio uno el ML. Entonces no va a continuar y sacar cada episodio que tengamos. Lo va a hacer en segmentos. Entonces, para que vea el siguiente episodio, voy a tener que utilizar de nuevo la siguiente función, así que voy al episodio dos, luego al episodio tres, y así sucesivamente. Entonces déjame hacer eso. Simplemente puede seguir adelante y emitir el estado de impresión tres veces. Por lo que el episodio uno se imprimirá primero. Episodio dos siguiente, y episodio tres compartido. Entonces, sigamos adelante y ejecutemos esto. Y como puedes ver ahora, ahora está dando salida al Episodio uno. Para responder en orden. No se trata sólo de ir y sacarlos a todos de manera tan repentina ¿Bien? Entonces así es como podemos seguir adelante y configurar un generador simple. Ahora, digamos que queremos automatizar esto. No queremos tener que usar constantemente la siguiente función cada vez. Entonces lo que podemos hacer es que podemos seguir adelante y eliminar esto. Todo bien. Y queremos quitar eso también y podemos decir cuatro episodios en Netflix. Subrayar Mostrar Colón, y queremos decir episodio impreso. Y si ejecutamos esto, vamos a conseguir el episodio uno, el Molino, el Episodio dos, el granero y el Episodio tres, la Vella. Ahora, probablemente te estés preguntando, Bien, qué es lo único de todo el proceso, eso tiene que ver con la eficiencia detrás de escena de los generadores, y esto no es algo que verás inherentemente en tu código, sino algo que sucederá en segundo plano Y como mencioné, esa es una lección que voy a cubrir en la siguiente lección, debería decir, de seguir adelante con ese proceso. Pero en cualquier caso, sigamos adelante y solo hagamos otro ejemplo sencillo de un generador, y hagamos eso. Todo bien. A continuación, voy a decir D y después voy a decir, vamos con digamos DF y quiero decir rosario subrayado elementos serían mi función Ahora bien, para convertir esto en un generador, voy a necesitar decir yield, al menos tener una declaración. Aquí voy a decir manzana. Producción de leche. Rendimiento, y podemos decir carne. Ahí vamos. Ahora queremos seguir adelante y asignar nuestro generador a una variable, nuestro objeto generador. Voy a seguir adelante y puedo decir que el producto es igual, y vamos a decir artículos de subrayado de comestibles Ahora producto ahora es ahora un objeto generador. Entonces ahora sigamos adelante y probemos el proceso. Entonces, si yo fuera a decir print, puedo decir siguiente, usar la siguiente función, y luego quiero agregar en ese objeto generador, así producto. Entonces ahora si ejecuto esto, va a dar salida a Apple. Y si sigo ejecutándolo, no va a ir más allá, solo va a hacer el siguiente valor particular que se establezca aquí. Tendría que hacer eso por la cantidad de veces que tengo esos artículos en particular si corro manzana, leche y carne. Perfecto. Automatizemos esto. Entonces, eliminemos lo siguiente. Simplemente podemos ir aheage y sumar un flop. Entonces voy a decir para producto en abarrotes subrayan los artículos Y podemos simplemente imprimir el producto. Entonces cada declaración en particular que tenemos aquí, y es correr eso. Y aquí tenemos manzana, leche y carne. Bien, así que ahí vamos. Así es como simplemente podemos seguir adelante y utilizar un generador en Bison Voy a pasar por la siguiente lección ahora, la parte de eficiencia de memoria para que puedas entender el beneficio real de los generadores. Bien, chicos. Entonces eso es todo para particular este ejercicio de laboratorio en particular. 81. Eficiencia de la memoria del generador: Hola a todos. Y bienvenidos a la siguiente lección que se va a centrar en entender la eficiencia de la memoria en términos de géneros. Muy bien, así que entender la eficiencia de la memoria. Una función regular almacena todos los valores en la memoria a la vez, lo que puede ser ineficiente para grandes conjuntos Por otro lado, un generador va a producir un valor a vez sin retener los anteriores, y esto lo hace mucho más eficiente en la memoria. Entonces digamos, por ejemplo, estamos trabajando con una función regular. Y en esta función regular, definimos una función conocida como programa de Netflix. Estamos regresando una lista de episodios, y entonces lo que estamos haciendo esencialmente es que vamos a seguir adelante y asignar esos episodios a esa función en particular aquí, y esa lista entera se va a crear en la memoria, y luego podremos seguir adelante y hacer un bucle de estos episodios, muy similar a lo que hicimos con los géneros. No obstante, aquí es donde entra en juego el tema. El problema es que la función crea instala toda la lista en la memoria antes de hacer un bucle Por ejemplo, si hubiera millones de episodios, tomaría mucha memoria. Ahora una función regular, si va a estar devolviendo, por ejemplo, listas compuestas por muchos valores, va a cargar todo en la memoria a la vez. Ese es el tema que tenemos aquí con una función regular. Sin embargo, un generador puede resolver este problema. Si miramos a un generador en este ejemplo, solo estamos cediendo, como pueden ver, nuestros valores. Rendimiento episodio uno, rendimientos dos, rendimiento episodio tres. Probablemente te estés preguntando ¿por qué es esto mejor? Como puedes ver, solo un episodio, como puedes ver, se guarda en la memoria a la vez. Tan pronto como se imprime un episodio, se descarta, y eso ayuda a liberar memoria. Entonces la función generadora, tenemos yield, a diferencia de una función regular tendremos retorno al utilizar yield, va a cargar un valor a la vez, y esto ayuda a mantener bajo su uso de memoria. Todo bien. Entonces, ojalá ahora eso te brinde una mejor comprensión con la comprensión de la eficiencia de memoria con generadores, y así es como puedes ver el valor de usar generadores con la palabra clave yield. Entonces como dije, lo sé en la primera lección y con el impuesto especial práctico de laboratorio, no parecía que hubiera mucho porque esto es esencialmente algo que ocurre detrás de escena y ayuda con tu memoria Aquí es donde va a ser útil si estás tratando con aplicaciones más adelante o actualmente ahora y quieres ver el uso de tu memoria, generadores realmente pueden ayudar en este sentido. 82. Copias superficiales y profundas: Hola, Ron. Bienvenidos a la siguiente lección, que va a estar enfocada en la copia superficial y profunda. Echemos un vistazo a la diferencia entre ambos. Una copia superficial, esencialmente, crea un nuevo objeto, pero conserva referencias a los elementos originales, lo que significa que los cambios en los objetos anidados afectan a ambas copias También tenemos una copia profunda, y en este caso, una copia profunda hace un duplicado totalmente independiente, incluyendo todos los objetos anidados, asegurando que los cambios en una copia no afecten a la otra Entonces aquí están las diferencias entre copia superficial y profunda, y vamos a hacer un ejercicio práctico de laboratorio sobre ellos para que puedas ver cómo se va a aplicar este seri a los ejercicios de laboratorio Así que eso es todo en las definiciones de copia superficial y profunda, profundicemos en los ejercicios de laboratorio. 83. Usa textos superficiales y profundos: [Lab]: Hola a todos. Y bienvenidos al próximo ejercicio de laboratorio, que se centrará en la copia superficial y profunda. Entonces vamos a trabajar con algunos ejemplos para que podamos cimentar mejor nuestros conocimientos sobre copiado. Así que sigamos adelante y comencemos. Ahora en este primer ejemplo, vamos a aprender cómo podemos asignar sin copiar. Así que todavía no estamos haciendo una copia, solo para profundizar en toda la idea de ello. Entonces primero, quiero definir una lista. Voy a decir lista de subrayados originales. Va a decir uno, tres, y cinco está en la lista. Quiero asignarlo a otra variable. Diré que nueva lista de subrayados es igual a lista original. Y con esto todo lo que estoy haciendo, como mencioné, es asignar la lista original aquí a una nueva variable llamada nueva lista, y en realidad no estoy haciendo una copia. Sólo lo estoy asignando. Ahora, digamos que quería modificar la nueva lista y decir nueva lista, y voy a decir a cero, quiero ponerla en 99. Ahora lo que quiero hacer es imprimir lista de publicaciones. Voy a decir imprimir, y voy a decir aquí lista original. Y es que en y luego quiero decir imprimir nueva lista, y luego podemos pasar por la nueva lista. Vamos a ejecutar esto. Podemos ver aquí en la lista original, tenemos 99 y tenemos tres y tenemos cinco. Entonces en la nueva lista, tenemos 99, tenemos tres y tenemos cinco aquí. Ahora, sigamos adelante y entendamos el proceso aquí en cuestión. Ahora aquí podemos ver que la nueva lista no es una copia de la lista original. Ambas variables apuntan a la misma lista en la memoria. Cuando cambiamos nueva lista, como podemos ver aquí, cero, la lista original también cambia porque son el mismo objeto. Como puedes ver aquí, 993-59-0935. Así es como podemos simplemente asignar una lista que no cree una copia. Derecha. Eso es lo primero que quiero mencionar. Ahora lo que vamos a hacer es profundizar en la copia superficial. Eso es copiar sólo la lista externa. Con una copia superficial, creará un nuevo objeto, pero no copia objetos anidados, nos sumergiremos en eso en el momento Entonces sigamos adelante y hagamos precisamente eso. Asegúrate de que te sientes cómodo con lo que acabamos de pasar. Todo bien. Así que sigamos adelante y centrémonos en la copia superficial. Recuerde, una copia superficial crea una nueva lista externa, pero las listas internas siguen siendo las mismas. No se copian, solo referencia, comencemos. Para ello necesitamos importar el módulo copy. Bien. Entonces queremos antes que nada, crear una lista original con listas anidadas Entonces podemos decir que las listas originales son variables, y aquí vamos a tener una lista, y luego vamos a tener una lista en una lista que va a tener uno, dos, tres, agregar en coma, y luego queremos tener cuatro, cinco y seis Bien. Entonces ahora tenemos una lista con listas anidadas Entonces una lista en a está bien. Ahora queremos crear una copia superficial. Voy a asignar esto a mi variable llamada copia superficial para crear esa copia superficial, necesitarías llamar al módulo copy y el módulo copy tiene una función llamada copy, y podemos simplemente colocar en la lista original dentro de eso. Eso va a crear una copia superficial para nosotros. Ahora queremos modificar la lista interna que comparten ambas listas. Para ello, diríamos copia de subrayado superficial. Diríamos cero, cero, y podemos establecer eso en 99. Lo que eso va a hacer esencialmente es que va a ir a una cobertura y cambiar el valor del primer elemento de la lista interna Aquí, podrías tratar esto como la lista que tenemos afuera, y esa va a ser esta lista aquí, y entonces denotaríamos esta lista aquí como cero, y esta lista aquí como una. Entonces estamos diciendo cero, eso significa que queremos trabajar con éste. Y luego dentro de esa lista, viene en segundo lugar viene el segundo argumento aquí. Queremos seguir adelante y hacer referencia al primer elemento de esa lista, este de aquí mismo. Eso va a cambiar e ir al 99, y eso va a reflejarse tanto en nuestra lista original como en nuestra copia superficial también. Entonces, sigamos adelante e imprimimos el comunicado para que podamos ver esto. Diré imprimir. Voy a decir original ist. Y luego copia superficial. Copia superficial. Ahí vamos. Entonces ahora sigamos adelante y queremos imprimir nuestra lista. Ahí lo tenemos. Tenemos 99, dos, tres, cuatro, cinco, seis, y podemos ver que aquí tuvimos un cambio en la lista original y por supuesto, la lista superficial por defecto, claro, habría tomado 99. Pero se puede ver que la lista original también cambió junto con ella, y eso es porque la lista original aquí por cero, y por supuesto en nuestra copia superficial a cero en términos de la posición del elemento, se refiere a la misma lista en la memoria. Esto demuestra que las copias superficiales solo copian la lista externa y no los objetos anidados en su interior Esa es la razón por la que estamos obteniendo el siguiente resultado. Derecha. Ahora sigamos adelante y centrémonos en la copia profunda, y eso va a asegurar que Deep Copy tenga una copia totalmente independiente que no altere la lista original en sí. Entonces lo que queremos hacer es ir a una cobertura y eliminar lo que tenemos aquí y vamos a cambiar esto por copia profunda, y vamos a llamar al módulo de copia, y vamos a decir copia profunda, utilizar esa función Entonces queremos pasar por la lista original. Y eso va a crear una copia profunda. Entonces queremos modificar la lista interna en la copia profunda, así podemos decir copia de subrayado profundo, y 00 es lo mismo que hicimos antes Y podemos decir print, y vamos a decir lista original. Seguido de copia profunda, profunda. Ahí vamos. Así que ahora tenemos eso en su lugar, y vamos a ejecutar esto. Y ahí vamos. Entonces ahora se puede ver que la lista original aquí, se mantuvo intacta, así que todavía tenemos uno, dos, tres, cuatro, cinco, seis. Y en ese posicionamiento, el efecto no se dio en el primer elemento aquí. Yo me quedé igual. No obstante, en copia profunda, ese cambio se ajustó. Aquí se puede ver que 99 está ahora en el lugar de donde solía estar uno. Entonces probablemente te estés preguntando, Bien, ¿por qué lista original esta vez se mantuvo sin cambios? Porque la copia profunda era cero, ¿de acuerdo? Y lista original en cero, también, bien, ya no son la misma lista. copia profunda duplica todo por completo, por lo que los cambios en la copia profunda no afectan a la lista original Bien. Entonces eso es simplemente algo muy importante para recordar. Así que recuerda, estás usando asignación, como te mostré anteriormente, y si estás usando la función de copia, los cambios afectarán al original en términos de la lista. Pero si estás usando deep copy, se va a copiar completamente a la otra lista, por ejemplo. Muy bien, chicos. Eso es copia superficial, copia profunda y la asignación general en términos de cómo asumiría que funcionaría la copia. Muy bien, chicos. Eso es todo para este ejercicio práctico de laboratorio. 84. Registro: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en la tala. Entonces echemos un vistazo. Entonces, ¿qué es la tala? registro es la práctica de capturar eventos, mensajes o errores dentro de una aplicación. Ahora, ayuda a los desarrolladores a depurar, rastrear problemas y también a monitorear el comportamiento del sistema. Ahora, los registros también se pueden almacenar en archivos, bases o servicios externos, y también se categorizan por niveles de registro. Entonces echemos un vistazo a estos niveles de inicio de sesión que obtenemos. Entonces obtenemos los siguientes niveles. Incluyen TBug que proporciona información de diagnóstico detallada para la resolución de problemas Entonces tenemos info, que proporciona mensajes operativos generales confirmando información normal. Advertencia. Esto va a ser bajo cualquier indicio de posibles problemas que puedan requerir atención. Entonces obtenemos error, que por supuesto está enfocado en dar salida a información sobre cualquier problema significativo que afecte a la funcionalidad de la aplicación, y nos volvemos críticos, y críticos, por supuesto, va a dar salida a información que indica que hay errores severos que conducen a fallas del sistema o inestabilidad Entonces estos son los niveles que obtenemos en login. Depuración, info, advertencia, Eror y crítico. Todo bien. Entonces ahora que eso está hecho, sigamos adelante y adentrémonos en lo práctico. 85. Implementar mensajes de registro: [Laboratorio]: Hola a todos, y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en la tala de árboles. Entonces, el primer ejemplo que vamos a ver es cómo podemos implementar el registro básico, y esto es útil para reemplazar la función print. Ahora, probablemente te estés preguntando, Bien, la función de impresión es genial. Realmente nos puede ayudar a generar ciertas declaraciones dependiendo dónde las coloquemos en nuestro código. Si bien eso es cierto, podemos usar el registro, que puede rastrear los eventos de nuestro programa de manera más eficiente con sus funciones y estructuras y todo. Así que sigamos adelante y comencemos. Primero, queremos importar el módulo de registro. Ahora queremos configurar el registro básico. Entonces vamos a definir nuestra función. Entonces necesitamos referirnos a nuestro módulo, digamos logging dot. Entonces vamos a referirnos a la función que se llama basic config. Ahora bien, esta es una función que configura el registro. Configura cómo se comportan los registros. Y dentro de eso, queremos decir que el nivel es igual al registro de información de punto, ¿verdad? Entonces level es esencialmente un parámetro que establece el nivel de registro más bajo para grabar, y eso va a ser, por supuesto, info y superior. Entonces lo tenemos asignado al registro de información de puntos, y este es un atributo o constante que representa el nivel de información. Bien. Ahora lo que queremos hacer es que queremos registrar un mensaje informativo Entonces voy a decir logging dot info. Y entonces aquí estaba entre paréntesis. Bien. Quiero seguir adelante y decir que el programa ha comenzado. Bien, entonces esto registra un mensaje con el nivel de información. Bien. Entonces eso es solo algo importante que siento que es importante para que te des la cabeza. Todo bien. Ahora bien, esta es la función particular que estamos usando la función info para que podamos seguir adelante y ejecutar la siguiente declaración. Entonces si ejecuto esto, yendo a la ruta info, el programa ha comenzado. Así que bien, hecho, esta es la forma más básica en la que podemos integrar la tala. Bien, así es como podemos seguir adelante y empezar con eso. Derecha. Ahora que nos sentimos cómodos con la información, ahora queremos aprender cómo podemos registrar errores con traceback Así que esto puede ayudar a depurar errores sin detener nuestro programa. Entonces vamos a ajustar lo siguiente. Nuevamente, vamos a hacer uso del módulo de registro. Pero esta vez queremos configurar el registro para mostrar errores y superiores. En otras palabras, error y crítico. Entonces voy a seguir adelante y llamar al módulo de registro. Entonces quiero ejecutar la configuración básica. Quiero agregar eso en, así que esa es la función que quiero usar. Voy a establecer el nivel para registrar error de punto. Bien, entonces es exactamente el mismo proceso que hicimos antes. Todo lo que estamos haciendo ahora es que vamos a querer dar salida y mostrar el error de error, ¿debería decir? Sin información ni nada por el estilo. Ahora sólo podemos crear un programa sencillo. Voy a decir try y voy a decir resultado es igual a 10/0. Esto va a provocar un error de división cero. Lo que quiero hacer entonces es decir excepto y lo que voy a decir es registrar punto E. Y aquí voy a decir que intentaste dividir por cero. Entonces al final, quiero decir excepción E XC, subrayado info va a ser cierto Bien. Así que sigamos adelante y echemos un vistazo aquí. Entonces estamos definiendo el módulo de inicio de sesión, y vamos a usar la función de error para generar un mensaje que dice que intentas dividir por cero, y queremos proporcionar una información de excepción aquí sobre ese error. Entonces registrando error de punto, por supuesto, es decir, esta es esencialmente la función que registra un mensaje de error. Y luego cuando tenemos EXC subrayado info es igual a true, ese es el parámetro que agrega nuestros detalles de rastreo Bien. Entonces, sigamos adelante y ejecutemos este código. Y aquí vamos. Podemos ver raíz de error. Se intenta dividir por cero, así podemos ver que viene como podemos ver como sigue, y podemos ver que estamos obteniendo un rastro aquí atrás para que podamos ver la pantalla EXC en focales true Entonces este es el rastro que mencioné, y aquí nos da todos estos detalles. Dice cero división error división por cero. Entonces así es como también puedes habilitar el traceback. Derecha. Entonces eso es lo que necesitamos para asegurarnos de que tenemos, y esto puede ser muy útil para la depuración Todo bien. Bien, perfecto. Entonces así es como podemos seguir adelante y enfocarnos en registrar mensajes de error. Llave. Ahora lo siguiente en lo que vamos a querer centrarnos es en cómo podemos registrar las advertencias para posibles problemas. Esto puede ser muy útil porque, por supuesto, los desarrolladores quieren ser alertados sobre posibles problemas antes de romper el código Entonces no va a romper un código, sino que es sólo una especie de advertencia para hacérnoslo saber. Bien. Entonces lo que vamos a querer hacer es decir registro, punto, y vamos a decir config básica, y ahora queremos establecer el nivel, y eso va a ser advertencia de registro. Bien. Ahora vamos a crear un programa. Voy a decir que la edad es igual y voy a decir menos cinco. Eso va a ser una edad inválida, claro. Entonces quiero verificar la entrada no válida. Voy a decir que envejezco menos de cero. Quiero entonces seguir adelante y decir advertencia de punto de registro usa la función de advertencia aquí y va a decir que la edad no puede ser negativa. Entonces quiero decir recibido. Voy a agregar en símbolo de porcentaje y D aquí, y luego voy a agregar solo estoy agregando en algún formato para que la edad se agregue aquí a la propia cadena. Tenemos advertencia de registro aquí, esencialmente, lo que va a pasar aquí es que va a registrar mensajes de advertencia. Entonces aquí este símbolo porcentual y la G aquí está el especificador de formato que va a insertar el valor entero de edad, que por supuesto, en este caso, enviamos a menos cinco Lo que podemos hacer es seguir adelante y ejecutar este código. Aquí nos llega una advertencia diciendo advertencia, edad no puede ser negativa recibida menos cinco. Así es como podemos registrar las advertencias de posibles problemas que podamos recibir. Derecha. Genial. Ahora lo siguiente que creo que te va a gustar, es realmente bastante interesante, debería decir, así es como podemos guardar los registros en un archivo. Podemos mantener un registro permanente de los registros en lugar de simplemente imprimirlos como puede ver aquí. Ahora bien, esto será muy beneficioso, sobre todo si trabajas para una empresa a la que le gusta hacer un seguimiento de los registros y hacer auditorías o cualquier cosa por el estilo. Podemos seguir adelante y quitar todo tal como está. Ahora vamos a aprender a guardar registros un archivo. Todo bien. Entonces, como queremos hacer antes, queremos configurar login para escribir en un archivo. Entonces lo que vamos a hacer es que vamos a decir registro y tenemos que decir config básica, antes que nada, luego vamos a especificar un nombre de archivo, y ese va a ser esencialmente el parámetro que establece el nombre del archivo. Entonces voy a decir nombre de archivo. Ese es el parámetro. Y entonces aquí lo llamaré app dot log. Bien. Y entonces lo siguiente que quiero hacer es poner a nivel. Entonces voy a decir que el nivel es igual y voy a decir registro de información de punto. Voy a añadir en coma y después sólo quiero decir Enter para ir a una nueva línea aquí Yo sólo voy a decir formato, y voy a especificar el formato que quiero configurarlo como. Este formato aquí esencialmente va a ser el parámetro que define el formato de registro. En otras palabras, la marca de tiempo, nivel y el mensaje, y así es como vamos a querer hacerlo Vamos a querer agregar en nuestras cotizaciones, símbolo presentado y luego aquí, solo podemos agregar en nuestros parenses y decir pedir tiempo Y eso va a ser S, y luego cuando digas Dasher, y luego símbolo centid, inferencias queremos agregar en el nombre del nivel Y podemos decir S y luego podemos agregar en el símbolo de porcentaje y podemos tener el mensaje también se ponga aquí con S también. Déjame alejar el zoom para que veas y solo podamos volver a poner esto y eso es ahora todo en una línea para ti. Todo bien. Genial. Ya tenemos eso configurado. Queremos registrar un mensaje informativo. Voy a decir registrando información de puntos aquí quiero pasar por el programa iniciado con éxito. Oh. Ahí vamos. Ahora queremos verificar el registro de la aplicación de archivos para los registros y luego veremos la entrada de registro de ejemplo. Entonces sigamos adelante y hagamos eso. Ahora, antes de hacer eso, solo quiero mencionar aquí tenemos nombre de archivo app log. De nuevo, solo quiero explicarte para que estés al tanto. Este es un parámetro que va a configurar el archivo para guardar nuestros registros. Entonces tenemos el nivel es igual al registro de información de punto. Entonces solo estamos definiendo el nivel que vamos a utilizar aquí. Va a ser a nivel info. Entonces nuevamente, solo reiterar nivel es el parámetro que establece, por supuesto, en este caso, el nivel más bajo para grabar, que va a ser info. Bien. Y recuerda, el registro de información de puntos va a ser el atributo que representa el nivel de información que estamos definiendo. Derecha. Bien, así que sigamos adelante y ejecutemos nuestro código. Entonces lo ejecutamos, y ahora quieres ir a tu directorio. Y aquí tenemos un archivo de registro de puntos de aplicación que fue creado. Va a mostrar la fecha, la hora, y también va a mostrar la información que dice que el programa comenzó con éxito. Entonces así es como podemos seguir adelante y asegurarnos guardar nuestros registros en un archivo. Bien. Entonces así es como podemos hacer eso. Perfecto. Así que tenemos esa configuración. Ahora podemos simplemente mover todo aquí y continuar. Bien hecho. Ahora lo último que queremos mirar es cómo podemos agregar niveles de tiempo y registro para la depuración Tenemos que asegurarnos de que tenemos el módulo de registro importado y vamos a configurar el registro con marcas de tiempo y niveles de gravedad También tenemos, como puedo decir debug. Eso es muy útil para cuando queremos como dirías depurar nuestro código. Sigamos adelante y comencemos. Ahora bien, lo primero que queremos hacer es decir tala. Y queremos definir la configuración básica. El nivel aquí, vamos a decir que el nivel es igual al registro, y vamos a establecer esto en T bug. Bien. Entonces ese es un parámetro que permite todos los mensajes de registro, debug y superiores. Bien. Derecha. Entonces ahora lo que podemos seguir adelante y hacer es que solo podemos agregar en nuestra coma y ahora necesitamos agregar en nuestro formato Así que aquí sólo voy a decir formato, añadir en mi símbolo de porcentaje de cotizaciones, y queremos encapsular el formato de mensaje de registro Entonces queremos que primero muestre SKT. Podría agregar en la S. Entonces queremos agregar en nuestro símbolo de porcentaje, y queremos también generar nombre de nivel. Entonces esto es lo que normalmente verías en el archivo, por ejemplo, y luego s, ir al siguiente símbolo de porcentaje, mensaje de inferencias, y luego S ahí vamos Entonces ahora tenemos ese formato en su lugar. Déjame mover eso aquí. Entonces ahora ya sabes cómo definir eso. Derecha. Perfecto. Ese es el formato de mensaje de registro que ahora queremos registrar mensajes con diferentes niveles de gravedad. Hagámoslo. Bien, entonces voy a decir logging dot y primero tendremos a Dbug Voy a decir que este es un mensaje de D Bug. Entonces diré registrando información de puntos entonces voy a decir que todo está funcionando sin problemas. Voy a decir registro de punto, y voy a decir advertencia. Esto va a decir cuidado con posibles problemas. Entonces podemos decir registrando error de punto aquí voy a decir que algo salió mal. Entonces podemos decir tala, crítica. Quiero decir fracaso crítico. Ahí vamos. Entonces ahora sigamos adelante y obtengamos nuestra salida, guardemos ese archivo, ejecutemos el código, y aquí lo tenemos. Podemos ver aquí que hemos configurado el tiempo. Hemos configurado el nombre del nivel, y también hemos configurado el mensaje, y eso es todo en una, dos y tres secciones. Entonces eso va a encapsular. Se puede tratar esto como los símbolos centurd parenss con el formato que estamos Podemos tratarlos como nuestros marcadores para cada segmento al que nos referimos Ahora, el nombre del nivel va a estar viniendo de debug, si la función que hemos aclarado aquí, como puedes ver, y el mensaje va a venir de lo que declaras en esa función. Y así fue como todo salió. Y podemos ver que el formato está en tiempo ASC, así que eso va a mostrar el año, los meses, el día, y luego la hora en que se adelantó y registró, acuerdo a debug info error de advertencia y crítico Bien, así que ahí lo tenemos. Así es como podemos implementar la tala. Vamos. Eso es todo para esta lección sobre el uso de registros y cómo podemos generar varios registros dependiendo de nuestras situaciones. 86. JSON: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en JSO. Echemos un vistazo. JSON significa JavaScript Object Notación, y es un formato ligero para almacenar e intercambiar datos. Ahora, también utiliza pares de valores clave de una manera estructurada legible por humanos y también se usa ampliamente en API y aplicaciones web. Y otra cosa importante a tener en cuenta aquí es que JSON soporta varios tipos de datos, como cadenas, números, matrices, objetos, y también booleanos Entonces nos vamos a centrar en JSON y cómo podemos aplicarlo en Hisen. Así que comencemos. 87. Trabajar con JSON - [Laboratorio]: Hola a todos y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en JSO Entonces te voy a mostrar tres ejemplos de cómo puedes implementar mejor JSON dentro de PySon Ahora, el primero va a estar enfocado en convertir un diccionario a una cadena JSON. Después vamos a aprender a convertir una cadena JSON a un diccionario PySon Y lo último que vamos a hacer es que vamos a guardar JSON en un archivo y leer JSON de un archivo. Y esa va a ser la realmente importante, ya que aquí también vamos a utilizar gestores de contexto para llevar a cabo ese proceso. Bien, así que sigamos adelante y comencemos. Así que vamos a empezar de manera muy sencilla y convertir un diccionario a una cadena JSON. Primero, necesitamos importar el módulo JSON, y luego necesitamos crear nuestros diccionarios. Voy a decir datos, y mi diccionario va a tener los siguientes pares de valores clave. Primero, vamos a decir nombre como la primera clave, y eso va a ser puesto en honor. El segundo par de valores clave consistirá en el Él es la clave, y el valor 29, entonces tendremos la ciudad, y voy a poner eso en ape um, correcto. Entonces ahí lo tenemos. Ahí tenemos nuestro diccionario. Ahora, lo que podemos hacer es seguir adelante y convertir este diccionario en una cadena JSON. Y para ello, primero necesitamos definir una variable para poder asignar el resultado que obtendremos al final de la conversión. Voy a decir cadena JSON igual. Entonces voy a referirme al módulo JSON, digamos punto y luego voy a usar el método volcados, y eso va a convertir mi diccionario a una cadena JSON Así que solo necesito pasar por los datos, los va a convertir por mí, y todo lo que necesito hacer es decir imprimir y luego voy a decir cadena de subrayado JSON Y eso va a generar en consecuencia en una cadena JSON para mí. Entonces ahora puedo hacer es que puedo seguir adelante y ejecutar mi código, y ahí lo tenemos. Entonces ahora está en un formato JSON adecuado. Derecha. Perfecto. Así que solo recuerda que JSON siempre está entre comillas dobles y no en comillas tradicionalmente simples. Y esto puede ser muy útil si quieres enviar tus datos JSON a una API web o almacenar JSON como texto. Bien, así es como podemos seguir adelante y configurarlo. Puedes ver aquí el código completo que se utilizó. Puedes ver cómo puedes seguir adelante y convertir tu diccionario a una cadena JSON. Lo siguiente que vamos a hacer es seguir adelante y convertir tu cadena JSON a un diccionario Python. Bien, sigamos adelante y hagamos eso. Entonces lo que voy a hacer es poder eliminar este código. Queremos utilizar el módulo JSON todavía. Pero lo que vamos a hacer ahora es que queremos especificar nuestros datos JSON como una cadena formateada como JSON. Voy a decir JSON bajo cadena de susto en iguales, y lo que vamos a querer hacer es ante todo, agregar entre comillas simples. Necesitamos agregar comillas simples y luego dentro de eso, podemos definir nuestro diccionario con nuestros datos JSON. Así es como debe ser la cadena si quieres convertirla en un diccionario. Voy a definir el par de valores clave así tendremos nombre. Y eso va a ser RNO, entonces vamos a tener edad, colon y eso va a ser 29, y luego vamos a tener ciudad, y entonces eso va a ser Ciudad del Capetown. Ahí lo tenemos. Ahí está nuestra cadena JSON. Solo recuerda que las citas al final son muy importantes y asegúrate de tener todo configurado. Ahí vamos. Estamos bien. Bien, ahora queremos convertir el JsoString en un diccionario Y lo que vamos a hacer es simplemente almacenar todo esto en la variable de datos. Vamos a referirnos al módulo JSON y luego al mensaje de cargas que viene de él, y vamos a pasar por cadena JSON. Bien, entonces JSON que carga, nos va a permitir convertir ese JSomString ahora en un diccionario Entonces eso es lo que va a pasar ahora. Hemos pasado por esa cadena JSON, y va a ser convertida en un diccionario. Entonces todo lo que queremos hacer ahora es imprimir los datos, antes que nada, voy a decir imprimir datos. Y ejecuta este código. Aquí podemos ver que tenemos un diccionario regular en PySon como puedes ver Ahora, detalle clave para esto es que ahora se puede ver que está en comillas simples. Mientras que en PySon técnicamente, podrías seguir adelante y configurar tu diccionario en términos de comillas dobles Puedes hacer eso, pero generalmente el valor predeterminado con PySon es entre comillas simples y esa es una buena prueba para ver que ahora está en PySon y se ha configurado correctamente Lo podemos hacer ahora es que podemos acceder a valores individuales desde el diccionario, por lo que no es necesario que sigas adelante y digas datos tal cual. Simplemente puede agregar entre corchetes y puede elegir de él. Serían tus claves a las que te referirías, y luego recuperarás el valor. Si quiero obtener el valor de mi nombre real de no, tendría que poner un nombre aquí y ejecutar el código. Las salidas directamente para mi nombre. Si quiero conseguir ciudad, que es Capetown, y dirijo esto, saldrá Capetown . Justo ahí vamos. Así es como puedes convertir una cadena JSON a un diccionario Python. Ahora bien, el importante del lote y el más divertido, diría yo, eso es guardar JSON un archivo y leer JSON de un archivo. Empecemos y creamos un diccionario, antes que nada. Voy a decir que los datos son iguales, y voy a abrir esto, sumar mi par de valores clave, nombre. Con no. Entonces tendremos edad, colon, 29. Entonces vamos a tener ciudad colon. Vamos a tener Ciudad del Capetown, y hay todos nuestros datos dentro de este diccionario Ahora, lo siguiente que queremos hacer ascie. Queremos guardar nuestros datos en un archivo, por supuesto, y vamos a decir Wi open, luego el archivo que queremos crear. Voy a decir en bastante datos punto JSON. Y quiero escribir a este archivo. Entonces el modo va a ser W. Y voy a decir como archivo, voy a llamar a esto como. Por lo que también va a abrir el archivo en modo escritura. Y luego queremos referirnos a JSON y queremos usar el método dump aquí. El volcado JSON es un mensaje que va a escribir los datos JSON en un archivo. Y para ello, necesitamos pasar por los datos y luego el archivo porque queremos tomar estos datos y queremos escribirlos en nuestro archivo. Y eso va a escribir los datos JSON en el propio archivo. Bien. Así que sigamos adelante y escribamos primero en el archivo, revisemos nuestro directorio, luego podemos leerlo después. Así que ahora podemos ejecutar el código. Vayamos a nuestro Explorer. Y aquí puedes ver que tenemos datos JSON, y podemos ver que se ha guardado en nuestro archivo JSON de punto de datos. Entonces podemos ver nombre a los 29 años, estudiar Ciudad del Capetown, y ahí lo tenemos todo guardado Ahora, digamos que queremos volver a leer estos datos del archivo y leerlos en el terminal, por ejemplo, así que aquí mismo en el terminal de salida. Cierre esto, vaya a nuestra siguiente declaración, y podemos seguir adelante y decir, Wiz, abrir Queremos abrir ese archivo. El archivo que queremos abrir se llama data dot JS on, y queremos leerlo. En nuestra curtesía, diremos R, diremos como archivo, y luego podemos definir una variable llamada datos de subrayado cargado, y vamos a establecer eso en carga de puntos JS Estamos usando el método dot load, y eso nos va a permitir leer los datos JSON del archivo, y también se va a convertir a un diccionario. Voy a decir archivo. Bien. Entonces todo lo que queremos hacer al final es imprimir que cargaron datos. Voy a decir imprimir datos de subrayado cargados. Sigamos adelante y ejecutemos este código. Ahí vamos. Podemos ver que tenemos los datos y también de vuelta en la versión predeterminada para diccionarios en PySon Como dije antes, va a ser entre comillas simples y eso es una buena indicación de que se ha convertido en un diccionario para nosotros para equivalentes de Python. Cierto chicos, eso es esencialmente todo. Así es como podemos utilizar JSO. Todo bien. Ahí lo tenemos. Yo sólo voy a seguir adelante y eliminar este código. Todo bien. Ahí vamos. 88. Colas: Hola a todos. Bienvenidos a la siguiente lección, que va a estar enfocada en es. Así que comencemos. Entonces, ¿qué es una Q? Una Q es esencialmente una estructura de datos que sigue el principio primero en entrar primero en salir. Es posible que hayas escuchado antes de un principio conocido como FIFO, así que eso es el primero en entrar primero en salir, y eso es lo que sigue una Q Ahora, puede ser muy útil si te estás enfocando en la programación de char, el buffering, el manejo, los datos de secuenciacion, y también se puede implementar usando qt iss o collections dot Ahora las operaciones clave incluyen NQ. Esto es para sumar y DQ, que está quitando, y esto va a pertenecer a ciertos elementos adelante y echemos un vistazo al ejemplo aquí, así que una analogía y luego veamos el PysonPgram asociado para Sigamos adelante y echemos un vistazo al ejemplo aquí, así que una analogía y luego veamos el PysonPgram asociado para una Q. Derecha. Entonces digamos que tenemos a mucha gente haciendo cola para votar. Entonces todo el mundo está parado en la cola y podrías verlo como un sistema FIFO Entonces primero en entrar, primero en salir. Entonces la persona que primero se quedó ahí a las 3:00 de la mañana frente a la caseta de votación fue la primera en salir. La segunda persona, por supuesto, finalmente se convirtió en la primera persona, y también salieron. Entonces una cola. Si tuviéramos que crear un programa Python, crearíamos algo que llevara lo siguiente donde seguiríamos adelante y tomaríamos el módulo Q. Entonces podemos importar la clase Q. Entonces podemos crear una Q, así creamos una instancia de una Q. Votar Q va a ser igual a Q. Entonces si la gente se une a la Q, que es NQ, solo podemos referirnos a nuestra instancia y decir punto put, podemos utilizar el método dot, que esencialmente va a realizar NQ Y agregar gente a la cola. Y eso va a estar en el orden. Entonces Alice, Bob y Charlie. Y entonces digamos que esa gente ha hecho sus votos. Ellos van a dejar la cola, eso va a ser un acto de DQ que entonces podamos imprimir el orden en el que están Entonces podemos referirnos a la instancia que creamos de Q y utilizar el método dot get. Y eso va a salir entonces en orden quién entró primero y quién salió primero, y va a ir en orden de Alice, Bob Charlie, quien sea el primero en entrar, y va a sacar exactamente lo mismo ahí cuando lo decimos y así emitimos su voto. Derecha. Entonces esa es una analogía muy simple que podemos utilizar para entender el concepto de señales Entonces eso está en la visión general teórica. 89. Consulta de colas: [Lab]: Hola a todos. Bienvenido al próximo laboratorio de ejercicios prácticos, que va a estar enfocado en Qs. Empecemos. El primer programa que vamos a hacer va a cimentar nuestro conocimiento sobre cómo podemos crear una Q básica y lo más importante, cómo podemos utilizar el put y el mensaje a NQ para agregar a una Q y DQ para eliminar de una Q. Lo primero que quiero hacer es que quiero obtener los módulos Voy a decir desde Q, y quiero importar la clase Q de ese módulo, y tiene que ser una Q mayúscula aquí que indique que es la clase. Entonces lo que quiero hacer es crear una instancia de mi Q. Voy a definir una variable llamada voto subrayado Q. Voy a poner eso a la clase Q con paréntesis de apertura y cierre A continuación, quiero agregar a mi P. voy a decir voto subrayado Q punto PUT Entonces aquí dentro de los paréneses voy a agregar a la Q voy a decir encendido y votando subrayado Q punto p, voy a poner a John y después votando subrayado Q punto p. voy a poner a Sarah. Ahí vamos. Ahora lo que quiero hacer es seguir adelante y deque. Entonces quiero sacar de la cola y ver qué estoy obteniendo cada vez que estoy en la cola, a quién se le está quitando. Entonces agregaría en una declaración impresa, y solo puedo decir, votando understore Q. quiero referirme a esa variable en particular aquí que tenemos que creamos una instancia de la clase Q. Entonces lo que quiero hacer es decir punto G. Estoy usando el método G. Después de haber establecido el método G, puedo añadir en coma y después quiero decir que emitan su voto Esencialmente, lo que va a pasar es que va a llegar a cualquier valor de la persona que primero se puso en el Que que es Ro va a conseguir no va a decir ningún caso voto. Si tuviera que seguir adelante y ejecutar esto, va a decir un voto de cuidado. Pero aunque tuviera que ejecutarlo repetidamente, va a seguir diciendo ono car di voto porque hay que seguir imprimiendo explícitamente y ejecutando el punto get message aquí tres veces o la cantidad total de veces que has puesto en la cola. De ahí que se pueda ver el primero en entrar primero en salir tipo de lógica. Entonces ahora si sigo adelante y copio la primera declaración por segunda vez, iba a decir que no vota a Cars, luego a votar John Cars. Y tendría que hacerlo un SRT para conseguir a la última persona, así que esa será Sarah Y podemos ver a Ana Cars votar, John Carsey votar y Sarah Cars votar Ahí lo tenemos, y eso está realizando DQ. Bien, entonces ahí vamos. Entonces así es como puedes realizar los conceptos básicos de hacer cola con putting y getting Derecha. Bien, ahora vamos a seguir adelante y explorar los otros métodos que vienen con una Q. Entonces lo que voy a hacer es quitar siguiente y aquí votando Q, solo voy a ajustar esto para que tenga Q. Y puedes establecer un parámetro en tu Q aquí. Bien. Y voy a establecer esto como tamaño máximo, y aquí es donde determinas el tamaño máximo que puede ser tu Q. Ahora queremos agregar elementos a los Ques, voy a decir tarea subrayado Q, y voy a decir punto put, y voy a poner aquí la tarea uno Voy a copiar eso dos veces más. Y podemos decir dos, y podemos tener tres. Tenemos tres ítems en nuestra Q o tres tareas. Digamos que aquí quiero obtener el tamaño de mi tarea. Lo que puedo hacer es decir print y puedo decir Q size colon space aquí, entonces quiero referirme a la tarea Q y usar el método dot Q size que va a dar salida a cuántas tareas tengo. Voy a decir código de ejecución. Puedo ver las tallas Q ahora mismo. Esto no va a imprimir el tamaño máximo. Va a ser del tamaño de tu que instalaste aquí. Si tuviera que quitar una tarea y ejecutarla, va a decir que tamanos también. Analizo cuántos artículos se han puesto en la cola usando el método PUT. Bien, ahí vamos. Ahora, digamos que quiero comprobar si la Q está llena. Yo sólo puedo seguir adelante y decir print, y voy a decir que es la Q completa. Puedo decir tarea subrayado, Q, y quiero seguir adelante y decir punto completo Bien. Y es correr. Y aquí, el tamaño de la cola es tres y la Q está llena porque se ha alcanzado el tamaño máximo de tres. Pero si tuviera que quitar un artículo y ejecutarlo, talla Q es dos y la Q no está llena, es falsa, entonces no lo es. Bien. Entonces, cuando estás llamando tarea, Q aquí, cuando la estás llamando, va a recordar automáticamente lo que tienes en tu y cuántos elementos tienes en tu u Entonces esta variable va a hacer un seguimiento de eso, y todo lo que estamos haciendo es queering ella mirando y aplicando estos métodos hacia ella. Entonces esta variable va a hacer un seguimiento de eso, y todo lo que estamos haciendo es queering ella mirando y aplicando estos métodos hacia ella Ch, eso está perfectamente bien, y solo quiero volver a poner el final que. Ahora, lo que quiero hacer es eliminar y procesar tareas. Voy a decir imprimir. Tarea subrayado q punto Obtener Estamos usando el mensaje Get y voy a decir que está terminado, justo al lado de eso. Básicamente va a conseguir lo que pongamos como primer elemento aquí en el mensaje put, esa es la tarea uno Entonces va a ser la Tarea uno está terminada. Entonces si conseguimos la siguiente, va a decir que la Tarea dos está terminada. Voy a hacer eso para los dos primeros. Bien. Y entonces lo que quiero hacer es seguir adelante y comprobar si la cola está vacía. Entonces puedo decir imprimir y podemos decir, es la Q vacía. Voy a agregar la coma, y voy a referirme a la tarea q punto Y sigamos adelante y ejecutemos esto Y aquí podemos ver que la Tarea uno está terminada. La tarea dos está terminada, y ¿el Qu vacío es falso? Debido a que tiene todos los artículos no se han completado en la cola. Sólo los dos primeros, tarea uno y dos. No hemos hecho tres. Por eso no está vacío y está volviendo falso. Bien, entonces lo que podemos hacer es entonces simplemente usar la siguiente declaración para que se complete la tarea tres. Y ahora si ejecutamos esto, podemos ver que la tarea tres está terminada. Así que ahora podemos seguir adelante y volver a verificar usando el método vacío. Guarda esto y corre. Ahora podemos ver que la tarea tres se completa antes de que fuera falsa porque no se completó. Ahora la cola está vacía porque todas las tareas se han completado y está vacía y está disponible. Ahí lo tenemos. Solo algunos métodos más para que los utilice. Recuerda que encima de do y punto g obtienes punto vacío para verificar si una cola está vacía. También obtienes el punto cuatro para verificar si una Q está llena, tamaño de la cola para generar el tamaño actual de la cola. También puedes establecer aquí el parámetro del tamaño máximo de tu cola que quieras establecer. Bien. Entonces eso es un poco más en Qs. Entonces sigamos adelante y eliminemos eso siguiente. Bien, chicos. Entonces eso es todo en Qs. 90. Recursión: Hola a todos, y bienvenidos a la siguiente lección que va a estar enfocada en la recursión. Echemos un vistazo. Recursión. La recursión es esencialmente una técnica en la que una función se llama a sí misma para resolver subproblemas más pequeños Ahora se repite hasta llegar a un caso base, y esto ayuda a evitar que ocurran llamadas infinitas. Ahora bien, lo importante a tener en cuenta aquí es que la recursión se puede aplicar en muchos contextos. Es decir, se puede utilizar en la inversión de árboles, factoriales, y también en diversos Derecha. Así que eso es en la visión general teórica, profundizemos en los ejercicios de laboratorio. 91. Realización de llamadas recursivas - [Laboratorio]: Todo el mundo. Y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en la recursión Así que comencemos. Bien, entonces con recursión, normalmente tendremos un caso base, y eso es lo que vamos a estar evaluando dentro de una función, y luego tendremos nuestro caso recursivo, o nuestra llamada recursiva Y esto es lo que vamos a seguir adelante y evaluar en contra de ello. Así que vamos a utilizar el caso base y equipararlo con el núcleo recursivo Bien, así que sigamos adelante y comencemos. Vamos a crear un programa simple para empezar, y vamos a llamar a esta función cuenta regresiva. Vamos a tener N como parámetro. Y voy a poner esto en comentarios para que empieces a aprender. Entonces vamos a tener un caso base, y eso va a ser en este caso, si N es igual a cero. Voy a imprimir digamos explosión. Entonces una vez que imprime blast off, quiero detener las funciones, voy a decir return y eso va a ejecutar y evitar que la función continúe. Entonces quiero definir mi llamada recursiva. Esencialmente aquí quiero imprimir mi número actual. También quiero volver a llamar a la función con N menos uno. Para ello sólo puedo referirme a la función aquí y decir N menos uno. Entonces necesito pasar un argumento afuera llamando a la función, así puedo decir cuenta atrás y puedo pasar por cinco, y esto es lo que va a pasar. Voy a tomar cinco como argumento, pasar como parámetro por N. Comprobar el caso base, que es si N es igual a cero, imprimir blast off, y luego devolver y detener la función. Sin embargo, no es el caso, así que no va a ejecutar esta sentencia if y en su lugar imprimir N, sea cual sea el argumento asociado, que es cinco, entonces va a llamar nuevamente a la función, cuenta atrás y decir cinco menos uno, que va a ser cuatro Entonces vuelve a repetir todo el proceso y va cuatro, cuatro no es igual a cero. Entonces va a imprimir cuatro, cuenta regresiva, cuatro menos uno, eso va a ser tres, ahora es tres Si tres es igual a cero, que no lo es, imprima N, que es tres, cuente atrás tres menos uno, dos, retroceda. N es, por supuesto, va a ser dos, entonces lo que va a hacer es decir I N es igual a dos, no va a luego imprimir N, no va a luego imprimir N, que va a ser dos, cuenta regresiva , dos menos uno, eso va a ser uno, y luego vamos a ir hasta llegar a cero y una vez que sea cero, va a decir print blast off y luego terminar la función Así funciona un programa recursivo básico. Tienes tu caso base y tienes tu llamada recursiva. Ahora sigamos adelante y guardemos esto y corramos. Entonces pueden ver aquí tenemos cinco, cuatro, tres, dos, uno, y luego volamos. Entonces puedes ver aquí cuando dice print N, eso va a ser cada vez que sea un número después de que se le haya restado Entonces primero, serán cinco, cinco menos uno va a ser cuatro. Comience la evaluación con cuatro, cuatro y luego cuatro, imprímela y simplemente continúe con ese mismo proceso hasta que lleguemos a explosión y volvamos a la función de configuración de salida. Entonces así es esencialmente como funciona este programa. Borde. Entonces eso es lo esencial de la recursión. Todo bien. Ahora vamos a hacer algunos ejemplos más para que podamos construir nuestro conocimiento de la recursión. Todo bien. Ahora el siguiente programa aquí, lo que voy a hacer es configurar una función de conteo. Entonces sigamos adelante y hagamos precisamente eso. Voy a decir Def cuenta hacia arriba, y en realidad podemos poner subrayado aquí, y va a tomar en Bueno, va a tener un parámetro que está tomando adentro, pero también vamos a tener un argumento predeterminado establecido aquí, y voy a establecer eso como actual igual a Bien. Entonces mi caso base, quiero decir si la corriente es mayor que N, quiero decir print done. Entonces cuando lleguemos a N, quiero imprimir hecho, y luego quiero volver, lo que va a detener la función. Entonces ahora voy a decir print current, y voy a llamar a la función, que es contar para arriba, y voy a pasar por N, y voy a decir actual más uno. Bien. Entonces aquí lo estamos haciendo es que estamos llamando de nuevo a la función con actual más uno y necesitamos pasar por un argumento para comenzar con contar arriba, voy a decir cinco. Vamos a tener cinco y recordar que esta es nuestra llamada recursiva Estoy pasando cinco es un argumento. Tenemos cinco aquí y tenemos corriente que se establece uno si corriente mayor que N, tenemos cinco. No es el caso, vamos a ir a la llamada recursiva Vamos a imprimir actual actual por supuesto, va a ser uno. Entonces lo que vamos a hacer es que todavía vamos a pasar por cinco aquí. Entonces vamos a decir actual más uno, lo que significa que esencialmente va a ser dos. Ahora bien, no le pasa nada al valor N aquí porque esencialmente el valor N va a seguir siendo cinco. Pero actuales, claro, ahora van a ser dos. Entonces corriente va a ser dos y el valor aquí de corriente ahora será dos. Entonces si dos mayores que N, imprime, no lo es. Entonces vamos a imprimir actual, y va a ser dos cuentas arriba. Todavía vamos a tener cinco y actual más uno, ahora va a seguir adelante y repetir, y actual va a ser tres, y va a ser tres aquí, y va a ser siempre cinco y luego actual más uno, ahora vamos a tener cuatro, y hasta que sean seis, bien, va a entonces imprimir hecho todo el camino cuando sea hasta seis. También quiero imprimir N para ti para que veas que esto queda a las cinco. Entonces, si yo fuera a decir print N, verás ese resultado también. Entonces tal vez debería poner algo de textura para que sea más fácil. Así que permítanme poner esto en una cadena F, en realidad. Y voy a decir actual es. Y voy a seguir adelante y justo eso y NN es y ahí vamos Entonces, sigamos adelante y ejecutemos esto. Bien, para que podamos ver aquí. Actual es uno porque eso es lo que dijimos en el defecto N es cinco. Va a ser agregado a uno. La corriente es dos y es cinco, corriente es tres y es cinco, corriente es cuatro y es cinco y se hace. Bien. Entonces, cuando tengamos seis, ¿de acuerdo? Entonces, si la corriente es de seis, que es mayor que N, se va a imprimir hecha. Entonces no va a tener oportunidad de imprimir aquí abajo para mostrar actual es cinco. Entonces técnicamente hablando, en realidad podemos llamar a esto y decir aquí, la corriente final fue. Y si ejecutamos esto, se puede ver aquí dice que la corriente final fue de seis. A eso llegó al final ya que era mayor a cinco. Si fuera mayor que igual a, esa habría sido otra historia. Pero así es como también podemos usar un caso base, configurar nuestra llamada recursiva, y cómo podemos seguir adelante y crear un programa que cuente hasta Esa es otra forma en la que podemos hacerlo. Ahora, sigamos adelante y hagamos otro ejemplo y es repetir un mensaje con recursión Vamos a definir nuestra función, que es repetir mensaje de subrayado, y vamos a pasar por dos parámetros, message y N, y nuestro caso base Si N es igual a cero, quiero regresar. Voy a parar cuando N llegue a cero. Eso es todo lo que voy a hacer. Entonces mi llamada recursiva es imprimir el mensaje, y queremos llamar a la función de repetición de mensaje, y queremos repetir esto, y vamos a volver a llamar a la función con mensaje y menos uno Entonces ahora llamamos a la función afuera, repetimos mensaje, y pasamos por nuestro argumento, así tendremos hola que va a mensaje, y luego vamos a tener tres, que va a N. Así que vamos a resolver esto. Entonces hola es el mensaje. N es tres. Si N es igual a cero, regresa. No es el caso. Entonces vamos a imprimir mensaje, así que va a ser hola. Después realizamos la llamada recursiva y pasamos por el mensaje, que es hola Y luego decimos menos uno. Bien. Entonces lo que tenemos ahora es tres ahora va a convertirse en dos. Entonces evaluamos. Si N es igual a cero, devuelva, imprima hola, repita el mensaje. Voy a decir que pasas por hola y menos uno. Eso va a ir luego a uno. Regresar, repetir la función otra vez, ejecutarla de nuevo, imprimir el mensaje, hola otra vez. Ejecuta de nuevo la función, luego va a comenzar de nuevo en el caso base. Entonces finalmente va a llegar a un punto en el que es cero. Entonces va a regresar, y verás aquí que el mensaje hola se imprimirá tres veces aquí, dijimos menos uno, y acabamos de repetir la función para ir una y otra y otra vez. Todo bien. Entonces así es como podemos usar esa llamada recursiva en este caso Derecha. Bien, entonces eso es todo en las recursiones, como puedes ver, tendrás tu caso base y tendrás tu llamada recursiva Y estas e implementación de recursión, como dije, tiene muchos campos en los que puedes utilizar y usar casos, pero es muy útil si quieres repetir tu función y ejecutarla hasta llegar a cierto caso Bien, chicos. Entonces eso es todo sobre recursión. 92. Comprensiones: Hola a todos. Y bienvenidos a la siguiente lección, que va a estar enfocada en la comprensión Entonces echemos un vistazo. Todo bien. Entonces obtenemos dos tipos de comprensiones. Obtenemos comprensiones de listas, y una comprensión de lista es esencialmente una forma abreviada o corta de crear una nueva lista en una sola línea transformando o filtrando los elementos o elementos de un Ahora, la sintaxis será la siguiente. Tendrás tu expresión, entonces tendrás cuatro HM en tu picazón entonces por supuesto, también puedes tener una condición if también Puedes ver que todo está escrito en una línea para ti. No tienes que ir de cabeza y definir, por ejemplo, tu bucle de cuatro, tu declaración if y hacer eso todo de manera secuencial. Ahora puedes seguir adelante y poner todo esto en una sola expresión. También tenemos comprensiones de diccionario y una comprensión de diccionario va a funcionar de manera similar y va a generar pares de valores clave en una sola línea mientras aplican filtros o transformaciones Ahora, tiene una sintaxis similar. Tendrás tu expresión clave, tu expresión de valor, y eso va a ser cuatro elementos en su, también tendrás tu bucle y la declaración if opcional también en términos de la condición I que quieres utilizar. Comprensiones. Casi se puede tratar de compararlo en el sentido de cómo es Lambda a las funciones. Podemos ver comprensiones con comprensiones diccionario y lista Podemos ver que también va a ser un enfoque más sencillo cuando queremos tener expresiones de líneas simples donde queremos aplicar para bucles y declaraciones if y también para asegurarnos de que podemos generar eso configurándolo como una lista o un diccionario en el proceso. 93. Uso de comprensiones de lista: [Laboratorio]: Hola a todos. Bienvenido al próximo ejercicio práctico de laboratorio, que va a estar enfocado en la comprensión de listas Recuerda, lista la comprensión, tenemos nuestra expresión, luego tenemos nuestro fol, que va a ser para el ítem en el iterable, y luego también podemos agregar en una condición if, que también es algo que puedes agregar si quieres agregar en algún filtrado Bien. Entonces la expresión part, eso va a modificar o transformar cada ítem y generalmente en una lista. Y luego los cuatro ítems en cada parte, eso va a recorrer la lista. Y eso va a aportar los valores para nuestra expresión. Derecha. Así que sigamos adelante y comencemos con algunos ejemplos. Digamos que tengo una lista de números, y tengo uno, dos, tres, cuatro y cinco. Entonces quiero crear una nueva lista donde cada número sea cuadrado Entonces voy a seguir adelante y definir esta variable llamada números cuadrados, que esencialmente va a ser la nueva lista Y para ello, vamos a realizar alguna comprensión de listas. Ahora, lo primero que tenemos que hacer es definir la expresión. Entonces, ¿qué queremos hacer? Quiero decir Num multiplicado por Num. Entonces quiero multiplicar dos números. Esto va a provenir de los ítems en la lista de números por el bucle cuatro que dice cuatro num en números. Así es como vamos a obtener nuestros valores o ítems. Vamos a ejecutar este bucle de cuatro y Num por supuesto, va a como va la salida, agarrar cada valor y luego podemos utilizarlo en nuestra expresión aquí, que va a almacenar cada valor con cada iteración en la lista a la vez Déjame mostrarte a lo que me refiero. En un comentario aquí. Entonces tenemos uno, dos, tres, cuatro y cinco. Entonces cuatro num en números. Primero, vamos a agarrar uno. Ese va a ser el primer número que se va a poner en bucle. Entonces vamos a tomar uno y decir uno multiplicado por uno. Va a ser uno. Entonces vamos a bucle al segundo ítem, que va a ser dos. Entonces hemos agarrado dos aquí de este bucle de cuatro, y luego podemos decir, con la expresión aquí a la izquierda, dos multiplicados por dos, eso nos va a dar cuatro Entonces seguimos adelante y lo volvemos a mirar. Entonces tenemos tres, y hemos recordado y hemos recogido tres, y ahora vamos a decir tres multiplicado por tres, nos va a dar nueve Entonces pasamos a cuatro ya que ese es el siguiente ítem en el bucle cuatro, vamos a agarrar cuatro y decir cuatro multiplicado por cuatro. Eso nos va a dar 16. Entonces con nuestro bucle de cuatro vamos a recorrerlo y vamos a agarrar cinco. Entonces podemos decir cinco multiplicado por cinco, eso nos da 25. Si fuéramos a imprimir números al cuadrado, que ahora va a ser una lista basada en el resultado que hemos establecido en consecuencia aquí, podemos seguir adelante y ejecutar el código y aquí obtenemos uno, cuatro, nueve, 16 y 25 Esa es la forma más sencilla en la que puedes realizar la comprensión de listas Para elaborar de nuevo, a la izquierda, tenemos nuestra expresión y eso va a cuadrar cada número como vimos en el lado derecho, tenemos nuestros iteradores que estamos definiendo era nuestro cuatro bucle para escoger números uno por uno y el resultado está todo almacenado en la variable de números cuadrados, que esencialmente va a ser de un tipo de datos de lista, y luego imprimimos la salida y todo de que se va a almacenar uno por uno en la nueva lista. Hagamos otro ejemplo. Digamos que tenemos palabras y tenemos hola, tenemos mundo, y tenemos pyson Sigamos adelante y creamos una lista donde cada palabra necesita tener un punto de explicación al final. Sólo voy a definir una variable llamada palabras excitadas. Tenemos que definir primero nuestra expresión, lo cual prefiero hacer primero. Voy a decir palabra más y ponemos el punto de explicación. Esto va a estar basado en el bucle, que va a recorrer todas las palabras por palabra en palabras. Bien, entonces aquí vamos otra vez. Así que vamos a ejecutar este bucle for, y vamos a almacenar temporalmente hola y luego vamos a agarrarlo y utilizarlo aquí en nuestra expresión y decir hola, más, y luego el punto de explicación. Eso va a guardarlo luego en una nueva lista que va a saludar. Entonces vamos a ejecutar este programa otra vez por palabra en palabras y luego vamos a agarrar bien. Se va a almacenar en la palabra variable word, y luego podemos simplemente decir word plus, y eso va a ser como sigue. Entonces vamos a ejecutar de nuevo nuestro bucle de cuatro. Word va a ser almacenado en PySon. Entonces podemos simplemente decir PySon plus y eso va a ser de la siguiente manera Vamos a ejecutar nuestra lista ahora. Palabras emocionadas tiene una nueva lista. Eso va a decir hola, mundo y PySon. Eso debería ahí vamos. Y esa va a ser tu salida. Deberías poder hacerte una idea para el patrón aquí. Bien, genial. Ahora sigamos adelante y hagamos otra. Éste va a ser para convertir a mayúsculas. Voy a tener frutas y voy a tomar manzana Pare naranja. Ahora quiero seguir adelante y crear una nueva lista. Entonces voy a llamar a este subrayado mayúscula frutas. Bien. Para que podamos seguir adelante y definir cuál sería nuestra expresión, yo diría fruta punto superior. Y nuestro lazo sería de cuatro frutos en frutos. Entonces echemos un vistazo a lo que estamos haciendo aquí. Entonces cuatro frutas y frutas, vamos a pasar por cada uno de los artículos de forma independiente. Entonces apple, vamos a almacenar apple, y luego vamos a decir apple dot upper con este punto mesod superior y eso va a cambiarlo en apple que almacenaremos en nuestra lista Entonces continuamos por frutas y frutos. La fruta se va a almacenar entonces como par de pera punto superior, eso va a ser pera. Ejecutamos nuestro bucle cuatro de nuevo y luego vamos a agarrar naranja, eso va a ser almacenado en nuestra variable, y luego podemos decir naranja y superior. Va a ser naranja. Ahora bien, si imprimimos frutas de subrayado en mayúsculas y ejecutamos esto, podemos ver que obtenemos manzana, pera y naranja todo en mayúsculas en nuestra nueva lista Esa es la forma más sencilla en la que podemos seguir adelante y comenzar con la comprensión de listas Recuerda que el lado izquierdo es tu expresión. El lado derecho aquí va a ser tu bucle de cuatro. Derecha. Así que tenemos eso en su lugar. Ahora, lo siguiente que vamos a querer hacer es que vamos a querer trabajar con una declaración if al respecto. Entonces, sigamos adelante y miremos eso. Bien, así que agreguemos una llave en las obras. Entonces queremos trabajar ahora con nuestros si condicionales, también. Entonces definamos una lista de números, y voy a decir uno, dos, tres, cuatro, cinco, seis, siete, ocho, nueve, diez. Ahora solo queremos mantener números que son parejos para que podamos definir nuestra nueva lista por la variable números pares. Y vamos a seguir adelante y decir num, num en este caso sólo va a actuar como marcador de posición para ser pasado a nuestra lista en términos del resultado final por iteración que se calcula Entonces vamos a decir cuatro num en números. Si num, y vamos a sumar el módulo dos es igual a cero. Entonces queremos verificar si hay números pares es lo que estamos haciendo aquí. Bien, así que sigamos adelante y ramificemos por delante cómo estamos haciendo esto. Tenemos todos los artículos aquí en nuestra lista aquí y vamos a decir cuatro num en números, y vamos a buscar uno. Tenemos uno aquí y luego vamos a comprobar esto si es condicional. Si uno es, por supuesto, un número par, entonces lo que vamos a hacer es almacenarlo en el marcador de posición aquí de num y luego lo agregaremos a la lista Ese es el proceso aquí esta vez, la expresión aquí de la izquierda está actuando más como un orden de lugar, yo estaba antes, pero antes seguimos adelante y realizamos acciones reales y luego almacenamos el resultado final, pero es como un orden de lugar ahora para almacenar el resultado final que pasaremos a nuestra lista. Entonces en este caso aquí, no es el caso, así que no vamos a almacenar nada en NUM en absoluto porque va a fallar. Si es cierto, entonces va a almacenar el resultado que podrías decir en NUM que luego se va a pasar como lista, pero en este caso, no va a suceder. Entonces vamos a la siguiente. Entonces dos. Entonces cuatro números números, tenemos dos. Entonces vamos a comprobar si dos es un número par y lo es, así podemos almacenarlo en num y decir dos. Entonces vamos a cuatro, y vamos a decir números de cuatro números, y vamos a entonces vamos a ir a tres, disculpe. Entonces vamos a comprobar si tres es un número par. Si no lo es, va a fallar, y entonces sólo va a volver a ejecutar nuestro seguimiento otra vez, lo cual no lo es Entonces vamos a mirar cuatro, y vamos a decir si cuatro un número par. Se almacena en el resultado para num. Podemos decir cuatro. Tenemos cinco y seguimos haciendo el mismo resultado hasta conseguir cuatro, seis, ocho y diez. Vamos a hacer el mismo patrón. Sigamos adelante e imprima esto para ver si eran correctos. Puedo decir imprimir incluso números de subrayado y es correr esto Ahí vamos en nuestra lista, tenemos dos, cuatro, seis, ocho y diez. Así es como podemos seguir adelante y utilizarla. Ahora, digamos que queremos que esto sea más interesante y sólo queremos mantener las palabras como más de cinco letras. Puedo definir una lista de palabras. Voy a decir Apple y voy a decir plátano y kiwi y uva y manzana de pino. Y emparejar. Entonces tenemos bastante ahí en nuestra lista. Ahora queremos definir una nueva variable que va a ser esencialmente una lista. Solo queremos conservar palabras que tengan más de cinco letras en este caso. Entonces vamos a tener palabra como nuestra expresión por palabra en palabras. Así que vamos a recorrer todos estos artículos, almacenarlo temporalmente como palabra aquí. Y entonces lo que vamos a hacer es que vamos a comprobar si la longitud con la función aquí de la palabra es mayor que cinco, y si lo es, vamos a referirnos a word aquí como marcador de posición y luego agregarlo a nuestra lista Bien, así que sigamos adelante y comencemos con nuestras pruebas. Cuatro palabras en palabras. Tenemos Apple. Si la longitud de la palabra es mayor que cinco, entonces podemos seguir adelante y almacenarla en podemos utilizar palabra aquí como un lugar soldado para almacenarla en nuestra lista. Apple es uno, dos, tres, cuatro, y vamos a tener cinco. Entonces no es mayor que, pasamos al siguiente, el plátano. Cuatro palabras en palabras. A continuación, el plátano. Si la longitud de la palabra es mayor que cinco, puedes usar Word como soldado de lugar y nosotros podemos meterla, así uno, dos, tres, cuatro, cinco, mayor que, pero no. KV es cuatro, así que eso no va a funcionar. Uva. Eso va a ser cinco, no va a funcionar, piña. Cuatro palabras y palabras, pasamos por cada una y si fallan, no seguimos adelante y usamos Word como marcador de posición para almacenarlo en nuestra lista Sigamos adelante y miremos la piña. Sí, eso va a ser mayor a cinco. Usa word como marcador de posición y podemos ponerlo en mezcla. Entonces tenemos par, que no sólo va a tener en nuestra salida lo siguiente. Si digo imprimir palabras de subrayado largo, eso va a sacar plátano y piña y eso es lo que obtendrá el resultado al final Correcto, perfecto. Entonces ahí lo tenemos. Así es como también podemos utilizar un if condicional así como si quisiéramos si queremos realizar la comprensión de listas Entonces ahí lo tenemos. Ahí están los ejemplos la expresión, nuestro bucle cuatro, el iterable, y nuestro si condicional Bien. Entonces así es como podemos realizar las comprensiones de listas 94. Uso de comprensiones de diccionarios: [Laboratorio]: Hola a todos. Y bienvenidos al próximo ejercicio práctico de laboratorio, que se centrará en utilizar las comprensiones de diccionario Así que también vamos a seguir la misma estructura como lo hicimos con las comprensiones de listas para comenzar con nuestras expresiones y nuestro bucle for primero, y luego luego utilizando una declaración if también Bien, así que mantengámoslo simple y comencemos. Entonces primero, voy a encontrar una lista de palabras. Entonces voy a saludar. Bueno. Adiós. Y voy a decir, bienvenidos. Entonces quiero definir mi diccionario. Le voy a dar la variable nombre de la palabra Enlaces dict. Entonces, esencialmente, lo que voy a hacer es que voy a crear un diccionario con tintas de palabras. ¿Bien? Entonces tendremos nuestro diccionario abierto de la siguiente manera. Vamos a tener nuestro par de valores clave, y luego tendremos nuestro bucle for. Ahora voy a decir que mi clave será la palabra. Entonces voy a usar la función Lang para obtener la longitud total de caracteres de la palabra, y esto se va a completar después de que hayamos corrido nuestro bucle for de la siguiente manera. Así que de nuevo, voy a poner aquí una opción para que podamos rastrear todo. Así que aquí hay otros artículos o elementos a los que puedes referirles como en nuestra lista. Entonces vamos a correr, antes que nada, por palabra en palabra. Entonces tenemos noticias aquí y vamos a almacenar temporalmente hola. Entonces vamos a mover hola aquí a la clave, y esa clave va a entrar en nuestro nuevo diccionario y va a ser como hola. Después los dos puntos aquí para separar el valor. Entonces vamos a obtener la longitud o las longitudes de hola en caracteres, eso va a ser de cinco caracteres. Ejecuta nuestro bucle otra vez. Palabra. Vamos a tomar adiós, almacenarlo como palabra, y luego podemos almacenar permanentemente esto en nuestra lista. Aquí lo vamos a mandar a nuestra expresión. Nuestras expresiones aquí son esencialmente los marcadores de posición. Vamos a agarrarlo del bucle cuatro aquí, almacenarlo en palabra temporalmente y luego moverlo a nuestras expresiones, luego lo moveremos a nuestro diccionario en este caso. Aquí en nuestro marcador de posición, vamos a tener adiós antes de moverlo a nuestra lista Aquí podemos decir bueno ¿por qué? Entonces, ¿cuál es la duración del adiós? Van a ser siete personajes. Entonces por palabra y palabras, vamos a luego tomar la bienvenida y luego vamos a moverla a nuestro marcador de posición de palabra, que luego va a ser bienvenido Entonces vamos a enchufarlo aquí por el valor de los largos de bienvenida, que va a ser siete. Ahora si decimos print, subrayamos longitudes, subrayamos Aquí tenemos este diccionario, este nuevo diccionario, hola cinco. Adiós, siete. Bienvenida, siete. Entonces está en parte de valor clave. Entonces las claves son hola, adiós y bienvenida. Y el valor está siendo cinco, siete y siete. Derecha. Entonces esa es una forma sencilla de cómo podemos hacerlo. Sigamos adelante y pongamos un poco más de práctica. Digamos que queremos seguir adelante y hacer una representación de número a cadena, por ejemplo. Entonces voy a tener una lista de números. Y voy a tener uno, dos, tres, cuatro y cinco. Entonces voy a crear un diccionario donde los números son claves y los valores son cadenas. Bien. Entonces hagámoslo. Voy a decir palabras de subrayado numérico, y vamos a tener un diccionario de eso Entonces primero tendremos la llave. Eso va a ser num y luego vamos a convertir a string, el número en sí, y vamos a decir cuatro num en números. Bien, entonces echemos un vistazo aquí. Cuatro números de números. Estos son todos como podemos ver enteros en formato entero. Vamos a decir cuatro números y vamos a recoger Num, pasarlo a num aquí y lo vamos a almacenar en nuestro diccionario, tal como es. Tendremos uno como nuestra clave. Entonces el valor aquí también va a ser técnicamente uno, pero vamos a lanzarlo a una cadena, significa que va a estar entre comillas ese valor. Entonces tenemos cuatro números num. Ir al segundo resultado, que es dos, tomar dos, pasarlo al cupo para que podamos almacenarlo en nuestro nuevo diccionario. Serán dos. Entonces vamos a convertirlo aquí en una cadena para el valor y eso va a ser solo entre comillas dos. Nosotros hacemos lo mismo para tres, así que sigamos adelante y hagamos eso. Entonces para los números numéricos, a continuación, tenemos tres, agarra tres, pásalo aquí a nuestro lugaretero, y esa va a ser tres es la clave. Entonces vamos a enchufarlo aquí en el valor, así que queremos convertirlo en una cadena, y luego obtenemos tres. Creo que ya entiendes la idea, y vamos a hacer lo mismo por cuatro y cinco. Entonces cuando seguimos adelante e imprimimos palabras de subrayado numérico , obtenemos este diccionario, como se puede ver aquí en lo siguiente, uno, uno, dos, dos, tres, tres, 44, cinco, cinco, con la clave restante como un entero en su forma cruda y los valores se convierten a un auricular de cadena estando entre Así es como podemos seguir adelante y configurarlo. Bien, ahora sigamos adelante y hagamos otro ejemplo aquí, y aquí queremos mapear números a sus cubos. Bien, así que sigamos adelante y hagamos eso. Entonces números, iguales, y vamos a tener uno, dos, tres, cuatro y cinco. Bien, ahora queremos crear un diccionario donde las claves sean números y los valores sean sus cubos. Entonces voy a definir una variable como cubo dict. Bien. Y eso va a ser un diccionario. Vamos a tener num como clave y luego num y luego asteriscos dobles Entonces eso va a seguir adelante y asegurar que tengamos el resultado en cubos, y va a ser dos, tres, cuatro, num en números Bien. Entonces sigamos adelante y hagamos precisamente eso. Para num en números, necesitamos asegurarnos de que tenemos nuestro ¿cómo puedo decir formato de explicación? A números de cuatro números. Primero, tenemos uno, agarra uno. Entonces lo vamos a pasar aquí a num y esa va a ser una como la clave. Y uno a uno cubos nos va a dar esencialmente el resultado de uno Todo bien. Entonces para num en números , bien, vamos a tener dos. Entonces tenemos dos aquí, transportados allá como la clave, dos, y el valor ahí. Entonces dos cubos esencialmente nos va a dar el resultado de ocho como valor Vuelva a ir, cuatro números de número. Ahora vamos a trabajar con tres. Toma tres, muévalo al marcador de posición, que podamos prepararlo para nuestro diccionario Lo llevamos ahí y eso nos va a dar esencialmente tres y luego vamos a decir tres, claro, en cubos y eso nos va a dar 27 Eso va a seguir adelante y hacer el mismo resultado para cuatro y cinco. Podemos obtener la salida final diciendo print, cube dink ahí obtenemos lo siguiente Teníamos uno, ocho, 27, y por supuesto, tenemos 64 y 125, cinco cubos, cuatro cubos, etcétera, y así es como podemos mapear números a Derecha. Creo que ahora debemos tener confianza con la idea de que a la izquierda, tenemos nuestra expresión y a la derecha, tenemos nuestro bucle for y lo iterable y solo vamos a utilizar nuestras expresiones después de que tengamos un resultado Si tenemos que realizar algún cálculo, ese resultado final irá a nuestro diccionario, en este caso o si estamos trabajando con listas en la lista. Si no necesitamos realizar un cálculo, simplemente podemos seguir adelante y deslizarlo hacia adentro. Derecha. Perfecto. Bien, así que eso es bueno. Ahora, lo siguiente que vamos a hacer es trabajar con nuestras condiciones if. Así que comencemos. Entonces voy a seguir adelante y decir palabras, y vamos a tener manzana, pera, naranja fresa. Y grep. Hay todos los artículos en mi lista. Ahora quiero crear un diccionario donde las claves sean palabras y los valores sean su longitud, pero sólo para palabras de más de cinco letras. Definamos ese diccionario. Yo lo llamaré palabras largas, es igual aquí dentro de mi diccionario, vamos a tener palabra como clave y entonces las longitudes aquí de la palabra serían el valor, y eso va a ser por palabra en palabras si la longitud de la palabra es mayor que cinco. Bien, así que sigamos adelante y trabajemos en este proceso. Entonces primero, tenemos que mirar nuestro bucle de cuatro. Entonces cuatro palabras en palabras. Así que vamos a recorrer todos estos elementos de la lista. Entonces primero, tenemos a Apple. Apple, podemos ver es uno, dos, tres, cuatro, cinco. Podemos ver que se trata de cinco caracteres. Entonces, si la longitud de la palabra es mayor que cinco, entonces podemos seguir adelante y hacer uso de esta expresión en particular. Si no es el caso, si es falso, entonces simplemente pasamos al siguiente ítem en el bucle. Bien, tan falso, no seguimos. Si es cierto, solo agregamos true a nuestro nuevo diccionario en este caso. Nos movemos para emparejar. Podemos simplemente ver par no es cinco, así podemos saltarnos naranja, uno, dos, tres, cuatro, cinco, seis, naranja. Para palabra y palabras, tenemos naranja. Si la longitud es mayor a cinco, es de seis. Entonces vamos a establecer que vamos a sustituirlo o enviarlo a word como marcador de posición para pasar por nuestro nuevo diccionario que estamos creando y que esencialmente va a estar entre comillas Vamos a tener naranja. Colón. Y entonces necesitamos la longitud de la palabra ahí. Entonces en nuestro caso aquí , van a ser seis. Entonces podemos agregar en nuestra coma. Después vamos a la fresa. Ya podemos ver que es mayor cinco, así podemos ver uno, dos, tres, cuatro, cinco, seis, siete, ocho, nueve, diez. Entonces cuatro palabras y palabras. Ahora estamos en fresa. Es mayor que cinco, es diez. Entonces esa palabra en particular, vamos a tomar el relevo de aquí a palabra aquí, y ahora realmente podemos agregar la palabra a nuestro diccionario, fresa. Y el valor aquí, la longitud de la misma es de diez caracteres, por lo que podemos decir diez. Bien, vamos a estafar. Entonces tenemos uva, y la uva es sólo cinco, así que eso no va a funcionar. Entonces solo tendremos estos dos artículos. Entonces podemos decir imprimir. Palabras largas. Y ahí lo tenemos. Tenemos nuestro nuevo diccionario con nuestro par clave valor, nuestra clave aquí es naranja, valor seis, clave siendo fresa, valor diez. Bien, ahí lo tenemos. Bien, sigamos adelante y hagamos otra. Y eso va a filtrar números pares y duplicarlos. Entonces tendremos una lista de los números uno, dos, tres, cuatro, cinco, seis, siete, ocho, nueve y diez. Entonces queremos configurar un diccionario donde los números pares sean claves y los valores dupliquen su valor. Entonces estableceré la variable como dobles pares. Esto va a ser esencialmente un diccionario, así que tendremos Num. Entonces tendremos Num multiplicado por dos para el valor, y entonces nuestro bucle será cuatro num en números si num sumar el módulo dos dobles es igual a cero. Vamos a comprobar si es, claro, incluso también. Ese es el filtro en el sigamos adelante y hagamos los cálculos. Cuatro números en números. Vamos a repasarlos. Tenemos uno. Ahora bien, si num es par, podemos ir a la expresión, pero no es para que podamos saltarnos. Cuatro num en números, vamos a dos. Si el número es par, lo es, son dos, así podemos seguir adelante aquí. El num será dos, esa será la clave porque estamos trabajando con un diccionario, y eso va a ser dos, dos por dos, eso nos va a dar cuatro. Ocho. Pasemos al siguiente. Tres, tres ni siquiera es par. Entonces lo que puedes hacer es saber que si miras el condicional I, automáticamente puedes simplemente verificar allí rápidamente para ver si va a coincidir con un caso determinado, y si no hace falta que te preocupes por completarlo todo y asignarlo Cuatro va a estar parejo. Cuatro números nomen, hemos comprobado tres, vamos a mirar cuatro Es incluso según nuestro si condicional. Vamos a colocar cuatro como llave. Entonces vamos a decir cuatro veces dos. Ese será el resultado final que almacenamos aquí y allá tenemos cuatro. Cinco es impar, seis es par. Podemos decir cuatro num en números. Si el número es par, seis es. Entonces podemos mover seis aquí al marcador de posición de num, lo que significa que podemos ponerlo en nuestro nuevo diccionario, que va a ser seis como clave Entonces diríamos seis veces dos, y eso nos va a dar 12. Bien, entonces ese es un proceso que seguimos y seguimos y seguimos. Sólo tenemos ocho y diez entonces para evaluar. Así que vamos a seguir adelante e imprimir esto para ver el resultado. Entonces doble iguala. Y sigamos adelante y ejecutemos esto. Y aquí podemos ver que tenemos ese resultado. Entonces hicimos el primero hasta seis aquí, y luego tenemos ocho, 16, diez y 20. Entonces pudimos ver que ocho y diez van a ser enviados al lugar orden de Num pasado al nuevo diccionario, y luego 16 y 20 también. Bien, entonces 16 y 20, podemos ver que se derivó multiplicando ocho por dos y luego diez por dos también. Bien, chicos. Eso es. Así es como podemos utilizar la comprensión del diccionario Como puede ver, es un proceso bastante simple y cómo podemos utilizarlo. Eso es. 95. Hilos y procesos: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en hilos y procesos. Entonces echemos un vistazo. Correcto, entonces lo primero que necesitamos entender es qué es un hilo. Entonces, un hilo es esencialmente una unidad ligera de ejecución que se ejecuta de forma independiente mientras comparte memoria con otros hilos. Por lo tanto, puede intentar pensar en un hilo como un trabajador en una línea de ensamblaje donde cada hilo maneja una tarea y múltiples hilos pueden trabajar simultáneamente para acelerar el procesamiento. Ahora echemos un vistazo a los beneficios de los hilos. Entonces los hilos dentro de un proceso usaron la misma memoria. Consumen menos recursos y son eficientes. También son muy ideales para tareas específicas que requieren esperar en entrada o salida. Y otra cosa importante que hay que saber es que iniciar un hilo es más rápido que lanzar un proceso. Ahora echemos un vistazo a las limitaciones de los jirones. Ahora, los hilos se turnan para correr debido al bloqueo global del intérprete comúnmente conocido como GIL. Los hilos no se pueden detener por la fuerza una vez iniciados, así que eso es lo desafortunado en lo que respecta a los hilos, a diferencia de un proceso que se puede Una vez iniciado, un hilo no puede. Y una cosa importante que debe saber aquí es que los datos compartidos pueden causar problemas impredecibles. En otras palabras, elevar las condiciones que pueden ocurrir si se comparten datos. Ahora, tampoco hay mejora de velocidad para ningún trabajo intensivo de CPU que esté ocurriendo con subprocesos. Ahora, echemos un vistazo a los procesos. Entonces un proceso. Un proceso es un programa activo con memoria y recursos propios. Ahora, una forma más sencilla de ver un proceso es pensarlo como una aplicación separada en tu computadora o una en tu computadora o especie de utilidad específica en segundo plano, donde cada uno se ejecuta de forma independiente sin compartir memoria con los demás. Ahora bien, en cuanto a las aplicaciones aquí, me refiero a, por ejemplo, digamos que tienes Microsoft Word abierto, eso se contaría como una app, o si también tienes como una aplicación como Discord abierta o si tuvieras que tener Spotify abierto o Steam o Google Chrome o algo así, puedes verlo en ese tipo de aspecto Ahora hay bastantes beneficios de los procesos, así que echemos un vistazo. Para que puedan utilizar completamente múltiples CPU y núcleos. Cada proceso tiene su propia memoria, por lo que esto ayuda a mantener sus datos separados. También es muy ideal para tareas que requieren un procesamiento pesado de CPU a diferencia de los hilos. Lo importante a tener en cuenta es que los procesos pueden ejecutarse de forma independiente sin depender el uno del otro. Y se pueden detener o interrumpir en cualquier momento, lo cual es uno de los mejores beneficios que podrías tener con respecto a los procesos. Cada proceso tiene su propio gel, GIL, evitando los límites de enhebrado de Pitones que se imponen Ahora también hay, por supuesto, algunas limitaciones de procesos también. Podemos ver que los procesos utilizan más recursos del sistema en comparación con los hilos que usan menos. Además, si quieres seguir adelante y crear un proceso, va a tomar más tiempo que iniciar un hilo. Otra cosa que es lamentable es que cada proceso requiere más memoria ya que no la comparten. La comunicación entre procesos es bastante compleja y requiere un manejo extra, desafortunadamente. Y lo último que quiero mencionar sobre una limitación de procesos es que cambiar entre procesos puede ser bastante lento, y esto tendrá un impacto en el rendimiento debido a la sobrecarga. Chicos. Entonces eso es todo para el panorama teórico. Yo solo quería llevarte a través de la supervisión teórica en cuanto a qué son los hilos, qué son los procesos, y darte alguna información sobre sus beneficios y limitaciones. Y como se puede ver, es casi como si donde uno sufre, el otro prospera, se podría decir Pero en cualquier caso, eso es todo por esta lección. 96. Multiprocesamiento: Hola a todos, y bienvenidos a la siguiente lección, que va a estar enfocada en el multiprocesamiento. Entonces echemos un vistazo. Correcto, por lo que el multiprocesamiento permite que un programa ejecute múltiples procesos de forma independiente, cada uno con su propia memoria y recursos Ahora, también maximiza el uso de la CPU al distribuir cálculos pesados en múltiples núcleos para un mejor 97. Multihilo: Hola a todos, y bienvenidos a la siguiente lección, que va a ser en multi threading Entonces echemos un vistazo. Correcto, entonces multi threading es un sistema que permite que un programa ejecute múltiples hilos dentro del mismo proceso para que puedas compartir tus recuerdos y también tus recursos También permite que las tareas se ejecuten simultáneamente sin la sobrecarga de crear procesos separados Todo bien. Así que sigamos adelante y adentrémonos en lo práctico sobre multi shreading 98. Integración de multiprocesamiento - [Lab]: Hola a todos, y bienvenidos al próximo ejercicio práctico de laboratorio, que se centrará en utilizar el procesamiento múltiple. Así que comencemos. Primero, queremos importar el módulo de procesamiento múltiple. Entonces queremos importar el módulo de tiempo para que podamos utilizar la función sleep. A continuación, queremos definir la función que se va a ejecutar en un proceso separado. Voy a decir trabajador sordo, va a ser una función. Todo lo que voy a hacer es llamar al módulo de tiempo y quiero definir mi función de suspensión y quiero mantener vivo el proceso durante al menos 20 segundos para que podamos verlo en el administrador de tareas o en nuestro gestor de actividades. En este momento lo siguiente que tenemos que hacer es asegurarnos de que el código solo se ejecute cuando este archivo se ejecute directamente, y eso va a ser visto como un proceso. Y para asegurar que ese va a ser el caso, podemos utilizar esta declaración if que dice que nombre, doble subrayado es igual o equivalente a doble subrayado principal, doble subrayado Bien, déjame explicarte. Entonces probablemente te estés preguntando qué es el nombre de doble subrayado Entonces esta es una variable especial incorporada que obtenemos en Python que va a contener el nombre de nuestro script o nuestro módulo. Después tenemos subrayado principal doble subrayado. Y esto va a comprobar si el script se está ejecutando directamente y que no se importa como módulo. Derecha. Entonces es muy importante que tengamos esto sin esta comprobación que estamos realizando aquí, el script podría seguir adelante y seguir creando nuevos procesos indefinidamente y fallar al final Entonces es muy importante que lo tengamos. Esto será visto como nuestro primer proceso, nuestro script Python, y luego nuestro segundo proceso será esta función worker. Entonces ya podemos definir eso. Diré proceso uno. Y podemos decir esto como proceso. Vamos a continuar. Ahora, lo siguiente que vamos a querer hacer es crear un nuevo proceso que vaya a ejecutar nuestra función worker. Voy a decir proceso es igual, y voy a decir multiprocesamiento. Vamos a referirnos a ese módulo punto, y vamos a referirnos a la clase process y luego vamos a pasar por el parámetro target y configurarlo en worker. Echemos un vistazo aquí. Ahora proceso aquí es una clase del módulo multiprocesamiento, y va a ser utilizada para crear un nuevo proceso que actualmente está haciendo buscando un target, que va a ser worker como el proceso elegido que se va a emprender Ahora, arget como mencioné antes, es un parámetro, y eso va a especificar la función que se debe ejecutar en el nuevo proceso, que va a ser worker Probablemente se pregunten, si esto es una función, ¿por qué no la llamamos o agregamos entre paréntesis Entonces estamos pasando esta función obrera sin parenses porque queremos pasar la función en sí y no el resultado de llamarla realmente Bien. Ahora bien, este proceso aquí que hemos definido va a ser almacenado en esta variable llamada process. Bien. Ahora lo que queremos hacer es que queremos seguir adelante e iniciar el proceso. Voy a decir que procese el almidón de punto usando el método del almidón, y eso va a iniciar el proceso, y eso va a hacer que se ejecute en segundo plano. Ahora, en cuanto se inicie ese proceso, queremos simplemente agregar en una sentencia print para decirnos que el proceso ha iniciado y que necesitamos revisar el administrador de tareas porque recuerden, solo lo vamos a ver durante 20 segundos. Todo bien. Entonces lo que podemos hacer es simplemente decir print, y vamos a decir proceso iniciado. Entonces podemos decir check task manager. Y si estás utilizando macOS, se llamará Activity Manager, que podrás comprobar. Justo a continuación, tenemos que decir proceso punto join, y este es un método de unión, y eso va a esperar a el proceso termine antes de continuar. Por lo que va a bloquear cualquier otra ejecución de código al final, queremos decir proceso de impresión terminado. Ahí vamos. Bien, así que eso es todo lo que necesitamos para tener en su lugar aquí. Así que tendremos nuestro proceso predeterminado en segundo plano para el script Python, y luego el proceso que realmente creamos ahora, que va a ser una función que estamos configurando aquí en consecuencia. Bien, así que eso es lo que tenemos aquí en su lugar y listos para ir. Todo bien. Ahora, si estás en Windows, puedes simplemente abrir tu administrador de tareas. Simplemente puedes buscarlo administrador de tareas, y puedes abrirlo. Ya lo tienes abierto, y lo que puedes hacer es asegurarte de que estás haciendo click en los procesos aquí a la izquierda, y simplemente puedes escribir Pierson y presionar Andrew Ahora, a partir de ahora, no va a mostrar nada porque no hemos ejecutado nuestro script una vez que tenemos el script aquí se va a ejecutar como un proceso, y luego también va a crear un nuevo proceso aquí agregando en esta función en particular. Bien, así que asegúrate de que estás bien con todo eso, y luego podremos seguir adelante y continuar. Derecha. Ahora podemos seguir adelante y ejecutar nuestro código. Aquí dice proceso declarado cheque administrador de tareas. Se puede ver que tenemos un proceso en segundo plano y dos procesos aquí ejecutándose y cada uno de ellos, por supuesto, son parte del script Python y esta función que creamos también se ha puesto en marcha y también podemos ver alguna información aquí en términos de cuánto se está utilizando en términos de megabyte Se puede ver que se detuvo, pero sólo podemos volver a ejecutarlo de nuevo. Y volver atrás y sólo podemos seguir adelante y ver cuánto se está utilizando. Entonces vimos esa CPU por un momento ahí el uso era como 0.2%, así que es muy, muy bajo y se fue. Y podemos ver alguna información aquí en la sección de memoria aquí en términos de cuánto megabyte se está utilizando y general para los procesos de fondo y ellos por separado también Derecha. Entonces ahí lo tenemos. Así es como podemos utilizar el multiprocesamiento en pyson. Bien, así que eso es todo. 99. Integrar varios hilos: [Lab]: Hola a todos y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en multithreading Ahora, claro, lo que voy a hacer es simplemente adaptarme al código que teníamos antes para el multiprocesamiento Gran parte del programa que estamos creando aquí va a tener similitudes con cuando utilizamos el multiprocesamiento Vamos a hacer algunos ajustes y voy a contarles las nuevas cosas aquí que van a hacer que el enhebrado sea distinto Simplemente puedes seguir adelante y mantener tu código igual que está y lo que vamos a hacer es simplemente ajustarlo. Por supuesto, ahora vamos a trabajar con multi-threading. Simplemente podemos eliminar este módulo en multiprocesamiento y podemos reemplazarlo con el módulo de threading. Esto nos va a permitir crear hilos. Nuevamente, vamos a hacer uso del módulo de tiempo para que podamos utilizar la función de suspensión. Va a tener una función worker como antes, y nos vamos a asegurar que configuramos el temporizador de reposo a 20 segundos. Por supuesto, todavía vamos a hacer uso de nuestro nombre de subrayado, nuestro especial construido en variable, debería decir A va a utilizar eso. Nuevamente, vamos a utilizar doble subrayado principal doble subrayado y eso va a gustar que mencioné antes, asegúrese de que el script se esté ejecutando y en general solo vamos a asegurarnos con esta declaración if que no tenemos ningún crashers ni nada Lo siguiente que queremos hacer es crear un hilo. En lugar de decir proceso, vamos a decir hilo, y vamos a seguir adelante y reemplazar multiprocesamiento con el módulo de threading que tenemos Entonces lo que vamos a hacer es reemplazar la clase de proceso con una clase de hilo. En esta línea de código, vamos a hacer lo mismo, pero vamos a crear un nuevo hilo que ejecute la función worker como hicimos antes. Entonces en lugar de iniciar el proceso, vamos a iniciar el hilo. Vamos a decir leer almidón aquí al final, también vamos a ir en un seto y decir triturar punto unirse también Podemos simplemente cambiar aquí el texto para decir hilo iniciado. Y hilo terminado. Bien, así que esos son los ajustes que tenemos aquí, y podemos simplemente quitar lo que tenemos aquí. Todo bien. Y ya lo tenemos fuera del camino. Así que tenemos todo tal cual. Ahora bien, no hay realmente muy diferente aquí, así que con hilo punto start, solo para reiterar, va a iniciar el hilo. Va a correr en segundo plano. Y con thread dot join aquí, bien, esencialmente, solo vamos a esperar a que termine el hilo antes continuar con el resto de nuestro código. Bien. Ahora, otra cosa que también quiero seguir adelante y mencionar aquí es un poco en detalle con estos mensaje punto inicio y punto Join. Ahora, punto Inicio, es muy importante estar en su lugar ya que si no especificamos punto Inicio, el hilo comenzará a correr. Si no tenemos punto join, entonces el programa va a salir antes de que el hilo complete su tarea. Estas son las razones por las que la necesitamos en este caso de uso particular. Bien. Y lo que podemos hacer ahora es que podemos ir a una cobertura y ejecutar el código y ver la salida como va Todo bien. Entonces, sigamos adelante y ejecutemos esto y veamos qué ocurre. Ahora, quiero hacer esto un poco más largo, así que voy a establecer esto por 30 segundos. Voy a ejecutar el código. Cheque. Como puedes ver, aquí solo tenemos un proceso ejecutándose. Esa es una buena indicación que estamos usando la trituración porque recuerden en la lección teórica, dije que cuando se está trabajando con el enhebrado multi Shreadingo, como resultado, sólo va a haber un proceso solo y que los hilos comparten un proceso A pesar de que tenemos dos hilos aquí, tengo uno que hemos definido con nuestra función y nuestro script predeterminado uno con todos los scripts de Python en sí va a ser incluido como uno. Esa es la razón de eso. Sólo tienes que seguir adelante y correr por eso lo tenemos. Podemos ver, claro, tenemos algo de memoria aquí en términos de 3.9 megabyte también y podemos ver que no es muy pesado en la CPU, el disco o la red como este momento con este proceso en particular Como pueden ver, así es como esto va algo importante aquí para recordar, ya que solo tenemos un proceso al ir a compartir memoria con el proceso principal que esto pueda ser eficiente. La razón por la que solo en lugar de un proceso solo es por el hecho de que Pisón está usando el gel, el GIL que mencioné antes Ese es el bloqueo global del intérprete. Eso va a asegurar que solo un subproceso se ejecute a la vez en un solo proceso PySon A pesar de que tenemos múltiples hilos aquí, tenemos dos de ellos, no van a aparecer como un proceso separado en el administrador de tareas. Como viste dentro de ese proceso, van a compartir el mismo espacio de memoria y trabajar dentro del mismo proceso PySon Así es como podemos diferenciar también la diferencia entre nuestros hilos y nuestros procesos con procesamiento múltiple y roscado múltiple Todo bien. Lo que queremos hacer ahora es simplemente limpiar nuestros recursos para que podamos simplemente resaltar todo el código aquí y eliminarlo. Lo que también podemos hacer es simplemente eliminar cualquier otro archivo que tengamos excepto el pastel de puntos principal, para que podamos seguir adelante y simplemente borrarlos. Bien. Y el último. Ahí vamos. Hasta que tengamos doppie principal Entonces, si tienes algo más, adelante y límpialo. solo estamos realizando una especie de curso Mientras tanto, solo estamos realizando una especie de curso de limpieza de recursos Hay más por venir, pero solo queremos limpiar todo lo que tenemos aquí. Bien, entonces eso es todo. 100. Pruebas de unidad: Hola a todos. Bienvenidos a la siguiente lección, que va a estar enfocada a las pruebas unitarias. Echemos un vistazo. Pruebas unitarias. En Python, las pruebas unitarias implican probar componentes individuales de código para verificar que funcionan como se esperaba. Ahora, una unidad suele ser una función o método que realiza una tarea específica. Y la siguiente pregunta que probablemente nos estemos preguntando es, ¿por qué deberías realizar estas pruebas unitarias? Entonces tengo algunas razones de por qué deberíamos hacerlo, e incluyen detectar errores temprano para mejorar la legibilidad del código y también para que los cambios de código sean mucho más seguros, chicos Entonces eso es solo un poco de una visión general teórica en términos de pruebas unitarias, pruebas unitarias. Y ahora en el laboratorio práctico excis que va a surgir, vamos a profundizar en cómo realmente podemos aplicar esto 101. Realiza pruebas unitarias estándar: [Laboratorio]: Hola a todos y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado en las pruebas unitarias. Ahora, lo primero que vamos a hacer antes de sumergirnos demasiado en la prueba unitaria es que vamos a seguir adelante y crear una prueba unitaria muy estándar solo para ver cómo funciona el proceso, bien. Todo bien. Ahora, lo primero que quieres hacer es importar el módulo de prueba unitaria, que es un módulo incorporado que se utiliza para probar. Entonces queremos definir la función que queremos probar. Esta función va a ser una simple función add para sumar dos números. Va a tomar en dos parámetros y va a devolver A más B una vez que se le haya llamado. Ahora, esta función agregará dos números y va a devolver la suma de A y B. Queremos probar esta función. Ahora para hacerlo, lo que tendríamos que hacer es crear una clase de prueba para pruebas unitarias. Podemos decir clase, prueba. Misa. Ahora, cada caja de ajedrez debe heredar de la caja de ajedrez de prueba unitaria Para hacerlo, tendríamos que seguir adelante y pasar a través del cofre de unidad, punto, estuche de cofre, esto es esencialmente una clase pyson incorporada que utilizaríamos Eso esencialmente va a ser heredado del caso de prueba de unidad. Ya tenemos eso en su lugar. Lo siguiente que tenemos que hacer es definir un método de prueba ahora. Dentro de esta clase, necesitamos decir sordos y podemos decir cofre, subrayado ad Ahora bien, algo que debes tener en cuenta aquí con tus mensajes de prueba guión bajo tiene que ser siempre la primera parte de la declaración aquí es tu función en todo momento Lo que te pongas después, realmente depende de ti lo que quieras hacer. Vamos a pasar por uno mismo. Ahora bien, este va a ser un método de prueba que comprobará si la función add está funcionando correctamente y el nombre de la función, como mencioné, necesita comenzar con cofre y subrayado para que nuestra prueba unitaria la reconozca como cofre Esa es la razón por la que necesitamos agregarla así. Tenemos yo otra vez aquí porque eso va a representar la instancia de nuestra clase de caso de prueba y va a dar acceso a todos los métodos que son proporcionados por la clase de prueba que estamos heredando aquí Lo siguiente que queremos hacer es que ahora queremos seguir adelante y establecer nuestro método aquí diciendo self dot, y vamos a usar un método especial conocido como assert equal, y vamos a pasar por la función, que se va a llamar add que vamos a jugar por aquí dos y tres como muestra, y luego queremos tener cinco Entonces lo que vamos a poner aquí entre paréntesis va a ser lo que realmente queremos esperar, y luego afuera va a ser el resultado real Bien. Entonces el método self assert equal va a verificar resultado esperado y real para verificar si los valores son iguales En este caso aquí, con lo que se espera, tenemos dos y tres, por ejemplo, y dos más tres equivale a cinco, y el real va a ser cinco. Eso es lo que debería ser. Bien. Ahora, si a las dos y a las tres, devuelve cinco, entonces pasa el pecho. Si devuelve algo más, entonces el pecho va a fallar. Bien. Todo bien. Entonces sigamos adelante y continuemos. Así que tenemos esa configuración. Ahora lo siguiente que tenemos que hacer es justo aquí del lado izquierdo, queremos seguir adelante y correr el ajedrez. Entonces para hacerlo, necesitamos asegurarnos de que el script se ejecute solo cuando lo hayamos ejecutado directamente. Entonces para hacerlo, vamos a decir doble subrayado nombre. La puntuación es igual a, en doble subrayado principal Bien. Ahora bien, lo que estamos haciendo aquí es que estamos comprobando si había esta línea aquí, esencialmente vamos a comprobar que estamos utilizando este script de Pierson, y no es un módulo ni nada que estemos importando, nada por el estilo, y se ve como una condición especial que normalmente utilizamos en pyson Y es algo que también utilizamos con el procesamiento y el enhebrado si también estamos tratando con procesamiento múltiple y enhebrado Se va a asegurar que la prueba unitaria main se ejecute solo cuando el script se ejecute directamente como mencioné antes, y por eso tenemos que hacerlo. Ahora, lo que podemos hacer después eso es que podemos definir la prueba unitaria, y tenemos que referirnos a ella como principal aquí, y esa va a ser una función incorporada que necesitamos usar, y eso va a encontrar todos los métodos de prueba que hemos definido. Los va a correr uno por uno y va a buscar específicamente el mensaje de prueba que comience con pecho y subrayado Entonces va a informar qué pase de prueba y cuál falló. Este mensaje principal que estamos agregando a la prueba unitaria es solo un método simple del módulo de prueba unitaria que tenemos aquí que inicia el corredor de prueba. Entonces eso es esencialmente lo que está pasando aquí. Así que solo podemos alejar el zoom para que podamos ver el código completo y guardar este archivo. Sigamos adelante y ejecutarlo. Aquí podemos ver que tenemos punto, las líneas y ejecutamos una prueba, y voy a mover esto hacia arriba, y dice, Bien, así que sigamos adelante y depuremos cómo esto realmente está funcionando. Entonces lo que tenemos aquí es un punto y la anotación significa que se pasó el cofre Ejecutó una prueba aquí, significa que se ejecutó un caso de prueba. Entonces seguimos adelante para probar este sencillo mensaje aquí sobre las matemáticas. Entonces Bien aquí significa que todas las aseveraciones fueron exitosas. Aquí tenemos una aseveración, por ejemplo, y va a demostrar que fue un éxito Bien, así que esa es la forma más sencilla en la que puedes ir a una cobertura y ejecutar tus pruebas en Python Entonces vamos a hacer algunos ejemplos más. Entonces sigamos adelante y hagamos precisamente eso. Vamos a necesitar asegurarnos de que utilizamos el módulo de prueba de la unidad, así que vamos a quedar atrapados en. Todo bien. Entonces lo que vamos a hacer ahora es que vamos a probar una función para comprobar si un número es par. Sigamos adelante y hagamos eso. Voy a decir que D es subrayado par. Vamos a pasar por el parámetro number, y queremos devolver true si el número es par, de lo contrario false. Vamos a decir número de retorno, y en el módulo dos, doble es igual a cero. Los números pares no tienen resto cuando se dividen por dos. Eso es esencialmente lo que está pasando aquí para verificar un número que sea par. Hagamos nuestros casos de ajedrez. Nuevamente, necesitamos definir una clase y vamos a llamar a esta prueba números pares. Tenemos que pasar a través la prueba unitaria punto prueba K tenemos que pasar a través de esa clase desde el módulo. Eso va a crear una clase de caso de prueba. Entonces necesitamos definir nuestros casos de ajedrez. Aquí voy a decir sordo, pecho, subrayado par, subrayado número, y aquí vamos a decir auto Y entonces tenemos que sumar en nuestras aseveraciones. Voy a decir self jot afirmar verdad, y aquí vamos a pasar por nuestra función, que va a ser es subrayado par, y diremos cuatro, Entonces queremos probar un número impar para ver si falla, por lo que debería fallar. Se puede decir de, probar subrayado número impar, y luego aquí pasaremos por uno mismo Y vamos a decir auto punto una búsqueda. Cierto, y vamos a pasar a través es subrayar incluso la función y cinco Entonces vamos a decir de test subrayado cero. A través de uno mismo, podemos decir auto búsqueda de puntos. Cierto. Y entonces queremos comprobar la función si pasamos por cero. Entonces lo que hacemos en línea con el clasier que hemos definido, queremos ejecutar la prueba cuando se ejecute el script, así podemos decir que doblo el nombre de subrayado, doble guión bajo, igual a principal Así que estamos utilizando este script en particular. Entonces podemos ejecutar pruebas unitarias. Punto principal, y eso va a ejecutar todo lo que tenga el inicio de subrayado torácico apéndice al mensaje dentro de nuestra clase Como podemos ver aquí, al pasar en cuatro, vamos a conseguir un pase sat sumando cinco, lo cual es extraño, vamos a conseguir un cofre fallido y luego al pasar en cero, que será par, también obtendremos un pase. Tenemos todo eso en su lugar aquí. Sigamos adelante y ejecutemos nuestro código. Bien, entonces conseguimos una variedad. Ahora, analicemos la salida. Entonces llegamos aquí punto F punto. Por lo que F va a indicar prueba fallida. Bien. Y eso significa que el primer cofre con pase, la segunda prueba con falla, y el tercer cofre con un pase. Entonces así es como lo puedes analizar. Y podemos ver aquí cuál fue la falla y probar número impar, podemos ver aquí que falló porque pasamos por cinco aquí. Lo que puedes ver aquí va a fallar porque cuando pasamos cinco y comprobamos si es un número par, esencialmente va a no funcionar correctamente y generar un error de rastreo como podemos ver aquí, podemos ver que el error de sesión false no es cierto. Realizamos tres pruebas. Tuvimos un fracaso, y ese fue el segundo. Se puede ver que aquí es muy bonito. Da como resultado que aquí hemos fallado al poner en F, pero también muestra por posición cuál. El punto es uno, F es el segundo y el tercero se pasa. Chicos. Entonces así es como también podemos utilizar nuestros casos de prueba para que podamos ir a una cobertura y verificar si hay pases y fallas en términos de nuestras pruebas Así es como podemos implementar las pruebas unitarias básicas en Python. Puedes aplicar esto a tus funciones, por ejemplo, si quieres revisar tu código y ver si todo funciona y si funciona según lo previsto. Por ejemplo, en este caso de uso particular, si estás configurando la funcionalidad para probar en algo es par, es muy útil agregar en casos de prueba aquí como lo estamos haciendo aquí para demostrar el hecho de que está haciendo lo que debe hacer. Aquí es donde entra el valor con las pruebas unitarias. Bien, así podemos seguir adelante y cerrar la paca y ahí la tenemos pruebas unitarias 102. Entornos virtuales: Hola a todos. Bienvenidos a la siguiente lección, que va a estar enfocada en el entorno virtual. Echemos un vistazo. Cierto, un entorno virtual, probablemente te estés preguntando qué es un entorno virtual. En pocas palabras, un entorno virtual es un espacio de trabajo o entorno aislado de Python que le permite instalar y administrar sus paquetes o dependencias por separado para cada proyecto Ahora bien, esto asegura que sus diferentes proyectos no interfieran entre sí en cuanto a paquetes ni causen conflictos. Eso es todo lo que quiero mencionar en entornos virtuales. Es un proceso bastante sencillo, así que vamos a profundizar en eso en los ejercicios prácticos de laboratorio, así que mantente atento. 103. Creación de un entorno virtual - [Laboratorio]: Hola a todos, y bienvenidos al próximo ejercicio práctico de laboratorio, que va a estar enfocado a trabajar con entornos virtuales. Ahora, el entorno virtual es muy útil porque, por supuesto, aprendes buenas prácticas al bloquear todos tus paquetes dentro de un entorno virtual en lugar de instalarlos globalmente en tu sistema Eso realmente ayuda a asegurar que cada uno de tus proyectos tenga su propio entorno virtual con sus propios paquetes y dependencias. Simplemente ayuda a mantener las cosas suaves, precisas y funcionales. Te voy a mostrar cómo puedes crear tu entorno virtual, cómo puedes activarlo, y también cómo puedes desactivarlo Te voy a mostrar tanto para Windows como para MCO Linux. Te recomendaría que me veas primero antes de seguirte directamente porque voy a demostrar cómo puedes configurarlo para ambos dispositivos. Empecemos. Ahora, lo primero que quiero mencionar es que necesitas cambiar ahora para ejecutar un PysonFle puedes hacer click en la flecha desplegable, digamos Ejecutar PysonFL y simplemente puedes Y lo primero que queremos hacer es entender el concepto de paquetes globalmente en nuestro sistema. Cuando escribimos en PIP List, eso va a enumerar todos los paquetes que hemos instalado vía PIP Por ejemplo, cuando seguimos adelante e instalamos loama o PWGen o Emoji o todos los paquetes que se instalaron en la lección de paquetes relevantes Eso va a aparecer todo globalmente en nuestro sistema cuando escribimos lista PIP Verás una lista de todos los paquetes que has instalado. Aquí, por ejemplo, puedo ver Colorama, Emoji, puedo ver Num Pi, puedo ver PEP, puedo ver P en WGN, eso ha sido todo instalado globalmente en Ahora, el propio PEP, por supuesto, algo que necesita ser instalado globalmente, pero todo lo demás, se puede ver que es en el caso de que esté en todas partes Queremos que solo se instale dentro de un entorno virtual, no globalmente como vemos aquí. Entonces, para ello, podemos crear un entorno virtual para atender esto. Derecha. Así que de nuevo, como dije, solo mira lo que hago antes de que tú lo hagas. Voy a mostrar primero el camino de Windows, y para crear un entorno virtual para Windows, escribirías en tu terminal, Python, VNV Eso significa que queremos crear un entorno virtual para ENV El nombre de tu entorno virtual, puedes darle cualquier nombre ahora, pero yo también lo voy a llamar VENV y puedes presionar Enter, y eso va a crear tu entorno virtual para ti Solo necesitas ser paciente y una vez que se haya creado, se debe sangrar en una nueva línea Esperemos ese proceso. Después, te mostraré el comando para instalarlo en macOS o Linux. Solo seamos pacientes. Bien, muy bien hecho Entonces podemos ver que fue un éxito, e inventamos en una nueva línea. Entonces eso significa que nuestro entorno virtual fue creado. Ahora, lo que también puedes hacer es seguir adelante y checar tu directorio en Explorer y puedes ver ahora tenemos esta carpeta de Entorno Virtual aquí dentro de mi proyecto, así puedes ver que se encuentra aquí. Y todos nuestros paquetes a partir de ahora, una vez que nos hayamos activado, nuestro entorno virtual se almacenará dentro de aquí. Y eso también va a mostrar aunque estés en macOS. Para que MaCows cree un entorno virtual, desea escribir PySon tres M, VNV VENV exactamente como lo hicimos antes Lo único que quieres es agregar PySon tres. Esa es la distinción para configurarlo en un dispositivo Guacamayos Puedes seguir adelante y hacerlo si estás en MaComs. Derecha. Vamos a aclarar esto. Ahora queremos activar nuestro entorno virtual. En Windows, te referirías al nombre de tu entorno virtual en la segunda opción. Tenía VE NV, entonces podemos decir barra diagonal, scripts, barra diagonal reversa activar y esto activa Ya puedes ver en el lado izquierdo el nombre que le diste a tu entorno virtual en parens aquí y podemos ver que es bonito y verde en nuestro caso Por lo que siempre debes ejecutar tus programas ahora. Cuando hayas activado tu entorno virtual, entonces puedes ejecutar Pip install, o puedes seguir adelante y ejecutar tu PysonFle Entonces digamos Python main dot pie, en este caso, siempre debes hacerlo dentro de tu entorno virtual. Bien, ahora, si quieres activarlo en un dispositivo macOS, lo que vas a hacer es que vas a decir Source VE NV, pin de barra hacia delante, adelante Activar Este es el comando, necesitas activarlo en tu dispositivo macOS. Fuente VNV adelante pin, barra hacia adelante Activar. Eso es macOS. Derecha. Ya tenemos eso en su lugar y ya está claro esto. Si quieres desactivar tu entorno virtual para apagarlo, va a ser lo mismo en Windows y macOS, así que solo tienes que decir desactivar que lo hará por ambos y verás que vas a estar fuera de él y ya se ha ido Derecha. Entonces otra distinción que quiero mencionar es si activamos nuestro entorno virtual, entonces está activado. Y digamos que digo lista PIP ahora, verás en el entorno de tu entorno virtual que solo tenemos PIP, que es, por supuesto, el paquete general que estará dentro de tu entorno virtual, pero no tenemos esos otros paquetes que ves globalmente, como mostré antes, y eso es porque no está dentro de la entorno virtual. Y es por eso y como lo mencioné, todo necesita ser separado en un entorno virtual para su proyecto y no globalmente en su máquina. Entonces puedes ver aquí la diferencia. Bien. Podemos decir claro ahora. Bien, así que ahí vamos. Así es como siempre debes instalar tus paquetes y bibliotecas. Por ejemplo, si quiero utilizar el paquete Colama, puedo copiar match Entonces Pep instala Clarama Todo bien. Se puede ver que se está instalando, y ahí lo tenemos. Así que sigamos adelante y verifiquemos dónde está instalado. Entonces si digo Pip LLS, ahora podemos ver que lo hemos instalado dentro de nuestro entorno virtual Entonces aquí está Clarama. Perfecto. Entonces ahora podemos aclarar esto. Y ahora lo que queremos hacer es que queremos seguir adelante y agarrar los módulos de Colama Voy a decir de color ma. Quiere importar las cuatro clases. Entonces voy a decir print, y solo voy a decir que quiero sech los cuatro colores, siendo cuatro puntos y el rojo el atributo Quiero que esto se ponga en rojo. Voy a decir que esto son cheques rojos. Seré mi salida y mi color terminal también seguirá. Entonces aquí dentro del entorno virtual, solo puedo decir Pison punto principal pi Se puede ver que funciona perfectamente bien. Todo bien. Ahí lo tenemos. Y podemos decir claro. Podemos simplemente volver a ejecutar esto y decir blanco. Eso nos va a dar un default. Y ahí vamos. Bien, así es como deberíamos, para las mejores prácticas, seguir adelante y utilizar PySon utilizando un entorno virtual cuando instalamos todos nuestros paquetes Entonces tenga en cuenta, nuevamente, voy a mencionarlo que cuando esté utilizando MacAWS hay una ligera diferencia con la forma que activa y crea su entorno virtual, pero todo lo demás va a funcionar tal como debería, sobre todo con la desactivación del entorno virtual y Muy bien, chicos. Entonces así es como podemos trabajar con nuestros entornos virtuales. Y cuando termines, solo puedes desactivarlo. Pero recuerde, siempre las mejores prácticas para activarlo, y luego utilizarlo de ahí en adelante. Bien, chicos. Entonces, eso es todo. Eso es todo para entornos virtuales. 104. Crea tu propio proyecto: Hola a todos. Bienvenido a la próxima messon que va a estar enfocada en crear nuestros propios proyectos. Echemos un vistazo. Mucho. Ha llegado el momento y ahora que has adquirido todas estas nuevas habilidades, es hora de que pongas todo eso uso y crees tu propio proyecto. Lo siguiente que debes hacer es dirigirte a la sección de proyectos y recursos de este curso para obtener más información allí. Voy a detallar y delinear algunas ideas que puedes seguir adelante y crear para tu proyecto y también darte algunas sugerencias sobre cómo puedes realizar el proceso de creación del proyecto. Oh, eso es todo lo que voy a decir por ahora y buena suerte. Y espero con ansias ver sus proyectos. 105. ¡Gracias!: Hola a todos. Y bienvenidos a la lección final de este curso donde solo quiero agradecerles por decidirse a completar este curso. Ha sido un placer enseñarte y espero que consigas algún conocimiento valioso de ello. Así que muchas gracias. Si tiene algún tiempo, le agradecería mucho que considerara dejar una reseña. Ya que mejorar mis cursos y hacer lo mejor que pueda siempre es algo positivo que tengas algo de tiempo, te lo agradecería muchísimo. Si no, eso está perfectamente bien siempre hayas tenido una gran experiencia de aprendizaje, y eso es todo para mí y buena suerte en tu viaje de desarrollo, y te deseo todo lo mejor. Adiós, y gracias de nuevo.