CursosEmpresasBlogLiveConfPrecios

Decoradores

Clase 10 de 21 • Curso Profesional de Python

Clase anteriorSiguiente clase

Contenido del curso

Introducción
  • 1
    ¿Qué necesitas saber para tomar el curso?

    ¿Qué necesitas saber para tomar el curso?

    03:15
  • 2
    ¿Cómo funciona Python?

    ¿Cómo funciona Python?

    07:49
  • 3
    Cómo organizar las carpetas de tus proyectos

    Cómo organizar las carpetas de tus proyectos

    07:15
Static Typing
  • 4
    ¿Qué son los tipados?

    ¿Qué son los tipados?

    10:26
  • 5
    Tipado estático en Python

    Tipado estático en Python

    14:26
  • 6
    Practicando el tipado estático

    Practicando el tipado estático

    13:33
Conceptos avanzados de funciones
  • 7
    Scope: alcance de las variables

    Scope: alcance de las variables

    06:32
  • 8
    Closures

    Closures

    08:21
  • 9
    Programando closures

    Programando closures

    07:00
  • 10
    Decoradores

    Decoradores

    06:19
  • 11
    Programando decoradores

    Programando decoradores

    13:05
Estructuras de datos avanzadas
  • 12
    Iteradores

    Iteradores

    13:52
  • 13
    La sucesión de Fibonacci

    La sucesión de Fibonacci

    14:01
  • 14
    Generadores

    Generadores

    07:22
  • 15
    Mejorando nuestra sucesión de Fibonacci

    Mejorando nuestra sucesión de Fibonacci

    06:53
  • 16
    Sets

    Sets

    10:58
  • 17
    Operaciones con sets

    Operaciones con sets

    06:09
  • 18
    Eliminando los repetidos de una lista

    Eliminando los repetidos de una lista

    05:20
Bonus
  • 19
    Manejo de fechas

    Manejo de fechas

    08:44
  • 20
    Time zones

    Time zones

    08:46
Conclusión
  • 21
    Completaste la trilogía. ¿Cómo seguir?

    Completaste la trilogía. ¿Cómo seguir?

    01:30
    Nicolás Moreno

    Nicolás Moreno

    student•
    hace 4 años

    En 6 minutos Facundo explica lo que otros se gastan un curso entero y no logran hacer entender. De lejos el mejor docente de Platzi.

      DAVID STEVEN BOCAREJO IBAÑEZ

      DAVID STEVEN BOCAREJO IBAÑEZ

      student•
      hace 4 años

      Totalmente de acuerdo contigo.

      Link Digital

      Link Digital

      student•
      hace 4 años

      mucha razón!

    Faustino Correa Muñoz

    Faustino Correa Muñoz

    student•
    hace 4 años

    Esta clase es brutalmente buena, muchas veces intente entenderlo, pero hoy todo queda más claro, la clave fue explicar el scope, closure y decoradores!

      Reinaldo Mendoza

      Reinaldo Mendoza

      student•
      hace 4 años

      Veo que ese era el camino para entender los decoradores

      Uriel Alfonso Velandia Donado

      Uriel Alfonso Velandia Donado

      student•
      hace 4 años

      Yo: Me voy a morir si no entiendo los decoradores.

      Facundo: En 4 Clases te lo enseño.

      Yo: ¡imposible!

      Facundo: No mames, ya lo hice y en 3 :v

    Kevin Mejia

    Kevin Mejia

    student•
    hace 4 años

    Para entender un poco este tema me remití al curso de Python del canal Píldoras informáticas en YouTube. Clic aquí para ver el vídeo. . La sintaxis sería la siguiente:

    def <funcion_decorador> (<funcion>): def <funcion_interna> (): <código de la funcion_interna> return <funcion_interna>

    No obstante, dejó el código de ejemplo que usó para explicar este tema por si a alguien le interesa:

    def funcion_decoradora(funcion_parametro): def funcion_interior(): #Acciones adicionales que decoran print("Vamos a realizar un cálculo: ") funcion_parametro() #Acciones adicionales que decoran print("Hemos terminado el cálculo") return funcion_interior # Para llamar la función decoradora se usa el carácter "@" y a continuación el nombre de esta. # Python entiende que la función adyacente hacia abajo es la función a decorar y la toma como parametro. @funcion_decoradora def suma(): print(15+20) suma()

    El resultado en consola sería el siguiente:

    >>> Vamos a realizar un cálculo: >>> 35 >>> Hemos terminado el cálculo
      Alexander Ivan Campos

      Alexander Ivan Campos

      student•
      hace 4 años

      La explicación en Píldoras Informáticas me ayudó a entender un poco más el tema. Excelente aporte, Gracias!!!

      María Jimena Rodríguez Contreras

      María Jimena Rodríguez Contreras

      student•
      hace 4 años

      :)

    Eduard Giraldo Martínez

    Eduard Giraldo Martínez

    student•
    hace 4 años

    "Si estas leyendo esto, significa que estas a la mitad del camino. ¡No te rindas! Ya solo falta la mitad 😃"

    Lei esto en otro curso. Espero que te ayude tanto como lo hizo conmigo 🚀 👾

      Silvana Ramos

      Silvana Ramos

      student•
      hace 4 años

      Gracias

    Carlos José Tun Pinzón

    Carlos José Tun Pinzón

    student•
    hace 4 años

    Decoradores

    Un decorador es una función que recibe como parámetro otra función, le añade cosas y retorna una función diferente. Tienen la misma estructura que los Closures pero en vez de variables lo que se envía es una función. Ejemplo:

    def decorador(func): def envoltura(): print("Esto se añade a mi función original.") func() return envoltura def saludo(): print("¡Hola!") saludo() # Salida: # ¡Hola! saludo = decorador(saludo) # Se guarda la función decorada en la variable saludo saludo() # La función saludo está ahora decorada # Salida: # Esto se añade a mi función original. # ¡Hola!

    Se puede hacer de manera mas sencilla, con azúcar sintáctica (sugar syntax): Cuando tenemos un código que está embellecido para que nosotros lo veamos de una manera más estática, ayudando a entender de manera mas sencilla el código. De esta manera, tenemos el código anterior:

    def decorador(func): def envoltura(): print("Esto se añade a mi función original.") func() return envoltura def saludo(): print("¡Hola!") saludo = decorador(saludo) # Se guarda la función decorada en la variable saludo (se decora) saludo() # La función saludo está ahora decorada
    def decorador(func): def envoltura(): print("Esto se añade a mi función original.") func() return envoltura # De esta manera se decora la función saludo (equivale a saludo = decorador(saludo) de la última línea, quedando ahora en la línea inmediata superior ): @decorador def saludo(): print("¡Hola!") saludo() # La función saludo está ahora decorada

    Esto permite ahorrar código al implementar características (decoradores) comunes a diferentes funciones:

    def decorator_upper(func): # Función decoradora def wrapper(text): # Función anidada return func(text).upper() # Operación que realiza el decorado a la función (func), inserta el texto a la función original. Convierte todo a mayúsculas. return wrapper # Devuelve wapper como indica la regla de los Clousures @decorator_upper # Decora la función message def message(name): return f'{name}, recibiste un mensaje' # Esto es lo que realiza la función message, previo a ser decorada. @decorator_upper # Decora la función warning def warning(name): return f'Usa solo mayúsculas {name}' # Esto es lo que realiza la función warning, previo a ser decorada. print(message("Cesar")) # Output: CESAR, RECIBISTE UN MENSAJE print(warning("Cesar")) # Output: USA SOLO MAYÚSCULAS CESAR
      José Alberto Núñez Magadán

      José Alberto Núñez Magadán

      student•
      hace 4 años

      Gracias por el aporte!

      GEMILLE ADASSI VAZQUEZ ESTRADA

      GEMILLE ADASSI VAZQUEZ ESTRADA

      student•
      hace 4 años

      Magnifico aporte!!

    Jose Luis Ruiz Ibañez

    Jose Luis Ruiz Ibañez

    student•
    hace 4 años

    Así lo pude entender mejor, espero les sirva.

    carbon (9).png

      junior bustillo

      junior bustillo

      student•
      hace 4 años

      Buen aporte

    Carlos José González Juan

    Carlos José González Juan

    student•
    hace 4 años

    Ahora si entiendo el uso de los clouser. La funcion tiene que llamarse en la nested para que la funcion decorador pueda incluirla. Sin la nested tendriamos que llamar a la funcion decorador e incluirle la funcion hola. Con este sistema solo creamos el decorador con nested y lo colocamos como decorador en la funcion que queremos decorar. Ahora si lo entendi. Thanks

    Jorge Leonardo Céspedes Tapia

    Jorge Leonardo Céspedes Tapia

    student•
    hace 4 años

    Eso de azucar sintáctica me recodó a Celia Cruz.

      junior bustillo

      junior bustillo

      student•
      hace 4 años

      jajajajajaj

    Antonio Arana

    Antonio Arana

    student•
    hace 4 años

    AZUCAR SINTACTICA: sintaxis anadida con el unico proposito de embellecer un codigo para hacerlo mas PYTHONICO

    sigueme para mas reviews de frases epicas de estos cursos

    Max Castillo

    Max Castillo

    student•
    hace 4 años

    Facundo lo explico super sencillo . Pero te cuento que este concepto es mucho más grande, decorador es un patron de diseño . El patrón Decorator responde a la necesidad de añadir dinámicamente funcionalidad a un Objeto. esto tiene que ver mucho con programación orientada a objetos . Al utilizar este patrón, se pueden añadir y eliminar funcionalidades en tiempo de ejecución . Si deseas leer más ve aquí

    Gabriel Missael Barco

    Gabriel Missael Barco

    student•
    hace 4 años

    Decoradores

    • Es el concepto más avanzado de funciones 😵. Un decorador es un closure especial, con una función adicional.

    • Un decorador es una función que recibe como parámetro otra función, le añade cosas, y retorna una función diferente. Le da superpoderes a una función 🦸‍♀️.

      def decorador(func): def envoltura(): print('Esto se añade a mi función original') return envoltura def saludo(): print('Hola!') saludo() # Hola! saludo = decorador(saludo) saludo() # Esto se añade a mi función original. Hola!
    • Esto, a ser un patrón muy común, hay una manera mas pythonica de hacerlo, con azúcar sintáctica. Esto es cuando tenemos un código que está embellecido para que sea más fácil de entender. (Sugar sintax). Sería algo así:

      def decorador(func): def envoltura(): print('Esto se añade a mi función original') return envoltura @decorador def saludo(): print('Hola!') saludo() # Esto se añade a mi función original. Hola!
    • Otro ejemplo:

      def mayusculas(func): def envoltura(texto): return func(texto).upper() return envoltura @mayusculas def mensaje(nombre): return f'{nombre} recibiste un mensaje' print(mensaje('Cesar'))
    Duvan Jose Botello Ramirez

    Duvan Jose Botello Ramirez

    student•
    hace 4 años
    ''' Decorador: Es una funcion que recibe como parametro otra funcion, le añade cosas y retorna una funcion diferente. -> Una funcion que le añade super poderes a otra funcion. ''' def decorador(func): def envoltura(): print('Esto se añade a mi funcion original') func() return envoltura def mayusculas(func): def envoltura(texto): return func(texto).upper() return envoltura @decorador def saludo(): print('Hola') @mayusculas def mensaje(nombre): return f'{nombre}, recibistes un mensaje' saludo() print(mensaje('duvan'))
    Jonathan Edwin Gutiérrez Olvera

    Jonathan Edwin Gutiérrez Olvera

    student•
    hace 4 años

    ¿Cuál es el uso que tienen los decoradores? ¿Por qué no simplemente añadimos los "pasos extra" a la función original? 🤔

      francisco ecatl melo valle

      francisco ecatl melo valle

      student•
      hace 4 años

      Depende de tu función original y de los pasos extras que quieras agregar.

      En los ejemplos es código corto y sin muchas funcionalidades, pero imagina que ya tienes varias funciones echas e igual al ejemplo de los videos quieres saber cuanto tardan en ejecutarse cada funcion.

      Sin decoradores tendrías que modificar cada funcion y cuando ya no quieras saber el tiempo volverlos a domificar lo. . con decoradores, solo escribes el decorador una vez y añades @mi_decorador al inicio y cuando ya no lo necesites solo borras esa instruccion en lugar de modificar la funcion original

      Jonathan Edwin Gutiérrez Olvera

      Jonathan Edwin Gutiérrez Olvera

      student•
      hace 4 años

      Cierto, muchas gracias por aclararlo :D

    Esneider Vélez Peña

    Esneider Vélez Peña

    student•
    hace 4 años

    ¿El wrapper lleva necesariamente los argumentos y la cantidad de estos de func()? o la función wrapper ¿puede tener distintos argumentos?

      Pedro Alvarado Garcia

      Pedro Alvarado Garcia

      student•
      hace 4 años

      Si la función a la que le aplicas el decorador tiene parámetros entonces si, debes de ponerlo.

      Sebastián Andrade

      Sebastián Andrade

      student•
      hace 4 años

      Hola, la funcion wrapper debe tener los mismos argumentos de la funcion que vayas a decorar (ten en cuenta que wrapper va a llamar la funcion) como cuando usamos un decorador por lo general lo queremos usar para decorar vairas funciones, hacemos que el wrapper reciba como parametro " *args y **kwargs" que quiere decir que recibe multiples argumentos o multiples argumentos clave y asi podemos decorar multiples funciones, si necesitas un parametro adicional para alguna cosa que quieras implementar entonces puedes pasar dicho argumento al decorador como tal añadiendo una tercera funcion

      def with_message(text): def deco(func): def wrapper(*args, **kwargs): print(text) return func(*args, **kwargs) return wrapper return deco

      Y de esta manera gracias a los closures que nos permiten recordar cosas de scopes superiores esto te deberia funcionar. Espero haberte ayudado

    Alexander Moreno Córdoba

    Alexander Moreno Córdoba

    student•
    hace 4 años

    En general, un decorador es un patrón de software que se utiliza para alterar el funcionamiento de una determinada pieza de código; ya sea una función, o una clase, sin la necesidad de emplear otros mecanismos como la herencia.

    En concreto, al hablar de los decoradores en Python, nos referimos a funciones u objetos con un comportamiento similar que nos permiten alterar cómo funcionan otras entidades sin tener que modificar su código explícitamente.

    Para entender un poco mejor la idea, es necesario aclarar unas cuantas cosas acerca de las funciones. Las funciones son, para fines prácticos, objetos, y como tales pueden ser pasadas como parámetros, reasignadas, devueltas por otras funciones e incluso definidas dentro de funciones, es decir, pueden ser anidadas.

    Toma el siguiente código como ejemplo:

    def pares(numeros): def es_par(numero): return (numero % 2) == 0 return list(filter(es_par, numeros))

    Aquí se utiliza la función anidada es_par() para filtrar los números pares en una lista de valores arbitraria.

    En el caso de los decoradores, las funciones anidadas nos sirven para desempeñar tareas alrededor de la ejecución de la rutina que deseamos decorar. Para ilustrar la situación te mostraré un decorador que toma un texto que consiste de varios renglones y a cada uno de estos le agrega como prefijo el número de línea que le corresponde. Empecemos con una función ordinaria que realiza esta tarea:

    def agrega_numero_de_linea(texto): lineas = [] for numero, linea in enumerate(texto.split('\n'), 1): lineas.append(f'{numero:6} {linea}') return '\n'.join(lineas)

    De este modo, si quisiéramos tener líneas numeradas en un texto, basta con llamar esta función:

    def diccionario_a_texto(diccionario): texto = '' for llave, valor in diccionario.items(): texto += f'{llave:12}: {valor}\n' return texto juan = { 'nombre': 'Juan Pérez', 'edad': 25 } print(diccionario_a_texto(juan)) nombre : Juan Pérez edad : 25 print(agrega_numero_de_linea(diccionario_a_texto(juan))) 1 nombre : Juan Pérez 2 edad : 25 3

    Sin embargo, esto no se ve muy elegante, además de que reutilizar la función agrega_numero_de_linea() no resulta tan sencillo. Un decorador nos ayudará a ocultar el código que numera la línea y a aprovecharla en otras funciones de una manera fácil y elegante:

    def con_linea_numerada(funcion): def agrega_numero_de_linea(*args, **kwargs): resultado = funcion(*args, **kwargs) lineas = [] for numero, linea in enumerate(str(resultado).split('\n'), 1): lineas.append(f'{numero:6} {linea}') return '\n'.join(lineas) return agrega_numero_de_linea

    La función de arriba es un decorador, la cual recibe como argumento otra definida en el exterior, y devuelve una tercera rutina definida internamente, una función anidada. La parte interesante es que la función anidada invoca a la externa y posteriormente procesa dicho resultado, agregando la funcionalidad del decorador al resultado final. Una vez definido el decorador, podemos utilizarlo de la siguiente manera:

    def diccionario_a_texto(diccionario): texto = '' for llave, valor in diccionario.items(): texto += f'{llave:12}: {valor}\n' return texto diccionario_a_texto = con_linea_numerada(diccionario_a_texto) juan = { 'nombre': 'Juan Pérez', 'edad': 25 } print(diccionario_a_texto(juan)) 1 nombre : Juan Pérez 2 edad : 25 3

    Nota, como inmediatamente después de definir la función diccionario_a_texto, esta es redefinida utilizando el decorador. Esta instrucción es tan común al utilizar decoradores, que Python ha definido un poco de azúcar sintáctica para representarla: simplemente hay que colocar el nombre del decorador, con un arroba como prefijo, antes de la definición de la función que quieres decorar, en nuestro caso, la definición se verá así:

    @con_linea_numerada def diccionario_a_texto(diccionario): texto = '' for llave, valor in diccionario.items(): texto += f'{llave:12}: {valor}\n' return texto juan = { 'nombre': 'Juan Pérez', 'edad': 25 } print(diccionario_a_texto(juan)) 1 nombre : Juan Pérez 2 edad : 25 3

    Esto hace que reutilizar el decorador sea todavía más sencillo:

    @con_linea_numerada def muestra_archivo(nombre_de_archivo): with open(nombre_de_archivo) as archivo: return archivo.read()

    Como puedes darte cuenta, los decoradores son muy útiles para reutilizar código que desempeña tareas comunes, las posibilidades son muy variadas, desde dar formato a texto, como en el ejemplo que te he mostrado, sincronizar tareas en paralelo, o manejar errores. El límite es nuestra creatividad.

    Eber Laurente Lliuyacc

    Eber Laurente Lliuyacc

    student•
    hace 4 años

    Un concepto que no había terminado de entender, pero ahora todo me queda claro 😁

    Rene Rosas

    Rene Rosas

    student•
    hace 4 años

    duda la sintaxis que se utiliza en el codigo final del "nombre, recibiste un mensaje" se vio en algun curso pasado de pyhton ya sea el basico o el intermedio? o no se vio? me gustaria saber como funciona esa sintaxis porque no la tengo familiarizada.

    return f'{nombre}, recibiste un mensaje'
      Juan Antonio Aramburo Pasapera

      Juan Antonio Aramburo Pasapera

      student•
      hace 3 años

      Es una forma que tienen los pythons más recientes para formatear un string. La verdad no recuedo en qué curso pasado se vio, si no mal recuerdo era en uno David Aroesti.

      Pero se usa marcando un string con la f al principio para denotar que la vasa formatear, y a lo largo del string pones entre corchetes nobres de variables que quieras sustituir su representación de string en el string que estás formateando.

      Por eso

      nombre = "jaarpa" print(f"{nombre} es lo que tiene la variable nombre")

      imprime

      "jaarpa es lo que tiene la variable nombre"

      Axel Alberto Jimenez

      Axel Alberto Jimenez

      student•
      hace 3 años

      Eso me confundió un poco también

    Jesús Enrique García

    Jesús Enrique García

    student•
    hace 3 años

    Antes de las clases de Facundo

    Despues de las clases de Facundo

    Wilson Delgado

    Wilson Delgado

    student•
    hace 4 años

    Dejo un artículo para ampliar información: https://codigofacilito.com/articulos/decoradores-python

    Edgar Alejandro Muñiz Robles

    Edgar Alejandro Muñiz Robles

    student•
    hace 4 años

    Aqui un video que explica muy bien como se aplican y para que sirven los decoradores en Programacion Orientada a Objetos en Python: https://www.youtube.com/watch?v=jCzT9XFZ5bw&list=LL&index=100&t=95s&ab_channel=CoreySchafer

      Ivan Ezequiel Mazzalay

      Ivan Ezequiel Mazzalay

      student•
      hace 4 años

      Está muy bueno realmente el ejemplo! Gracias por la info!

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads