CursosEmpresasBlogLiveConfPrecios

Programando decoradores

Clase 11 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 min
  • 2
    ¿Cómo funciona Python?

    ¿Cómo funciona Python?

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

    Cómo organizar las carpetas de tus proyectos

    07:15 min

Static Typing

  • 4
    ¿Qué son los tipados?

    ¿Qué son los tipados?

    10:26 min
  • 5
    Tipado estático en Python

    Tipado estático en Python

    14:26 min
  • 6
    Practicando el tipado estático

    Practicando el tipado estático

    13:33 min

Conceptos avanzados de funciones

  • 7
    Scope: alcance de las variables

    Scope: alcance de las variables

    06:32 min
  • 8
    Closures

    Closures

    08:21 min
  • 9
    Programando closures

    Programando closures

    07:00 min
  • 10
    Decoradores

    Decoradores

    06:19 min
  • 11
    Programando decoradores

    Programando decoradores

    Viendo ahora

Estructuras de datos avanzadas

  • 12
    Iteradores

    Iteradores

    13:52 min
  • 13
    La sucesión de Fibonacci

    La sucesión de Fibonacci

    14:01 min
  • 14
    Generadores

    Generadores

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

    Mejorando nuestra sucesión de Fibonacci

    06:53 min
  • 16
    Sets

    Sets

    10:58 min
  • 17
    Operaciones con sets

    Operaciones con sets

    06:09 min
  • 18
    Eliminando los repetidos de una lista

    Eliminando los repetidos de una lista

    05:20 min

Bonus

  • 19
    Manejo de fechas

    Manejo de fechas

    08:44 min
  • 20
    Time zones

    Time zones

    08:46 min

Conclusión

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

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

    01:30 min
  • Tomar el examen del curso
    • Luis Lira

      Luis Lira

      student•
      hace 4 años

      Seguramente también han visto decoradores que reciben parámetros, para esto solo tiene que anidar una función más para que esta reciban los parámetros del decorador y la siguiente es la que recibe la función a la que decora.

      decorator.png
        Sebastián Andrade

        Sebastián Andrade

        student•
        hace 4 años

        Justo me preguntaba como funcionaban este tipo de decoradores, muchas gracias

        Reinaldo Mendoza

        Reinaldo Mendoza

        student•
        hace 4 años

        wow

      Román Ripari

      Román Ripari

      student•
      hace 4 años

      Este es el código, solo funciona con texto, no hice lo de *args.

      Y este sería el resultado XD

        Eliaz Bobadilla

        Eliaz Bobadilla

        student•
        hace 4 años

        Inspirado en tu código cree boxie: https://github.com/UltiRequiem/boxie Me gustaria que lo revises!

        Esneider Vélez Peña

        Esneider Vélez Peña

        student•
        hace 4 años

        Este me encantó <3.<3

      Gary Torres Martínez

      Gary Torres Martínez

      student•
      hace 4 años

      Acá el mío jejeje

      decorator_gary.png
      decorator_gary2.png
        Fabricio González Guasque

        Fabricio González Guasque

        student•
        hace 4 años

        Simple pero efectivo ja saludos

        Reinaldo Mendoza

        Reinaldo Mendoza

        student•
        hace 4 años

        Ya que lo entiendo mejor se parece a los callbacks en js

      Mitchell Mirano

      Mitchell Mirano

      student•
      hace 4 años

      Hola compañeros esta es mi aplicación de decoradores, pues sucede que soy Data Scientist y estoy entrenando un modelo de IA que es capaz de generar texto, y actualmente funciona como un chatbot, pero aun no esta perfecto y comete ciertos erres y a veces dice palabras que no quiero xdxd ... entonces debo hacer una limpieza y formatear el texto una vez terminada la predicción:

      entonces la lógica para hacer la limpieza la cree dentro de un decorador:

      Selección_092.png
      y luego lo importo el decorador para utilizarlo al momento de generar texto:
      Selección_090.png
      y ahora le cuento a Kate que estoy aprendiendo decoradores con Facundo(Kate se llama mi modelo) :)
      Selección_091.png

        Sebastián Andrade

        Sebastián Andrade

        student•
        hace 4 años

        Wow, se ve super interesante, precisamente estoy aprendiendo programacion porque mi objetivo a largo plazo es trabajar en AI y ML (apenas ando dando mis primeros pasos xd) me inspira bastante lo que hiciste :).

        Reinaldo Mendoza

        Reinaldo Mendoza

        student•
        hace 4 años

        Excelente practica amigo

      Fabricio González Guasque

      Fabricio González Guasque

      student•
      hace 4 años

      Yo realice el juego de piedra, papel o Tijera, donde la maquina selecciona su jugada de manera random y nosotros utilizamos la función mi_turno para pasarle la jugada desde una variable global. Y la función wrapper se encarga de analizar quien gana.

      juego.jpg

      Al ejecutar:

      resultado.jpg
        fidel angel ochoa

        fidel angel ochoa

        student•
        hace 4 años

        que divertido! buen aporte!

        Nestor Jesus Rodriguez Rodriguez

        Nestor Jesus Rodriguez Rodriguez

        student•
        hace 4 años

        Wow, nunca había visto un código tan resumido de ese juego 🤩

      Andrés Gutiérrez Arcia

      Andrés Gutiérrez Arcia

      student•
      hace 4 años

      Hice un decorador para poner en memoria cache consultas de SQL para evitar conexiones hacia la base de datos

      decorator.png

        Eliaz Bobadilla

        Eliaz Bobadilla

        student•
        hace 4 años

        Estas usando Neovim?

        Cesar Hernández Ramírez

        Cesar Hernández Ramírez

        student•
        hace 4 años

        Buena implementación

      Erick  Ricardo Mantilla Bolano

      Erick Ricardo Mantilla Bolano

      student•
      hace 4 años

      Agregué un decorador a mi juego del ahorcado donde ahora muestra lo que demoro en ganar el juego, lo mas sorprendente es que me funcionó jaja 😀

      Sin título.jpg
        Aura Casas

        Aura Casas

        student•
        hace 4 años

        Qué tema de vscode usas? está cool jaja pd. Buen ejemplo!

        Brichedl Rojas Gonzalez

        Brichedl Rojas Gonzalez

        student•
        hace 3 años

        Qué bueno, también estaba pensando realizarlo en el juego.

      Pedro Alvarado Garcia

      Pedro Alvarado Garcia

      student•
      hace 4 años

      Hola, aquí mi reto que decidí hacer. Básicamente lo que hace es obtener la distancia euclidiana entre dos puntos, que es la que todos conocen. Pero aparte la decore con una función para obtener la distancia de manhattan.

      Captura de Pantalla 2021-07-28 a la(s) 15.58.30.png
      Captura de Pantalla 2021-07-28 a la(s) 15.58.54.png
        Miguel Angel Reyes Moreno

        Miguel Angel Reyes Moreno

        student•
        hace 4 años

        Gracias por compartir tu código, me sirvió para manejar los parámetros que veían de otra función :D

        Pedro Alvarado Garcia

        Pedro Alvarado Garcia

        student•
        hace 4 años

        @miguelangelre28 Excelente, que bueno que te sirvió.

      Iván Mauricio Jaimes Niño

      Iván Mauricio Jaimes Niño

      student•
      hace 4 años

      Reto Libre

      El siguiente programa consiste en encriptar un texto por medio del cifrado César, que consiste en correr la posición de los caracteres que componen el texto a través del alfabeto o un listado alfanumérico.

      Caesar_cipher_left_shift_of_3.svg.png

      La función encrypt cifra el texto mediante el número de posiciones a correr, estos son datos ingresados por el usuario (text, shift_number).

      El decorador entrega una función que permite descifrar el texto.

      def decrypt(func): def wrapper(text: str, shift_number: int) -> str: shift_number = shift_number * (-1) return func(text, shift_number) return wrapper def encrypt(string: str, shift_number: int) -> str: alphabet_lower = "abcdefghijklmnñopqrstuvwxyz" alphabet_upper = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ" numbers = "0123456789" encrypted = "" # Encrypted string for charact in string: if charact.islower() and (charact in alphabet_lower): index = alphabet_lower.find(charact) index = (index + shift_number) % 27 encrypted += alphabet_lower[index] elif charact.isupper() and (charact in alphabet_upper): index = alphabet_upper.find(charact) index = (index + shift_number) % 27 encrypted += alphabet_upper[index] elif charact in numbers: index = numbers.find(charact) index = (index + shift_number) % 10 encrypted += numbers[index] else: encrypted += charact # for special characters return encrypted if __name__ == "__main__": text = input("Enter the text to encrypt: ") shifts_number = int(input("Enter the number of shifts: ")) encrypted_text = encrypt(text, shifts_number) print("\n Encrypted text: " + encrypted_text) # Decrypt process decrypt_function = decrypt(encrypt) decrypt_text = decrypt_function(encrypted_text, shifts_number) print("\n Decrypted text: " + decrypt_text)
      Selection_814.png
        Cesar Hernández Ramírez

        Cesar Hernández Ramírez

        student•
        hace 4 años

        I love it

        Heberto Nicolás Hernández Andrade

        Heberto Nicolás Hernández Andrade

        student•
        hace 4 años

        Super!

      Miguel Rodríguez

      Miguel Rodríguez

      student•
      hace 4 años

      Hice que el mío tomara una función que lee un archivo csv, y me devuelva una pequeña descripción de los datos leídos.

      def describe_df(func): def wrapper(): func() print(f'El tamano del data set es: {func().shape}') print(f'Los tipos de datos del dataset son:\n{func().dtypes}') return wrapper @describe_df def data_csv(): df = pd.read_csv('Direccion archivo csv') return df
      decorators.png
        Harold Giovanny Uribe Romero

        Harold Giovanny Uribe Romero

        student•
        hace 4 años

        Ufff para DS está excelente

      Isabel Yepes

      Isabel Yepes

      student•
      hace 4 años

      😆 Yo hice un decorador que contara las palabras más comunes de una canción. 🎶🎶🎶 👉 Repositorio Completo

      import urllib.request from collections import Counter def word_counter(func): def counter(*args, **kwargs): data = func(*args, **kwargs) total_words = data.split() stopwords = ['y','Y','la','de','una','los','me','No','con','que','el','un','es','en','Que','muy','al','a','él','le','quiere','A','da','faltan','Mas','bien'] words = [word for word in total_words if word not in stopwords] wordcount = Counter(words) print('\n>>> TOP FIVE WORDS IN THIS SONG <<<\n') for w in wordcount.most_common(5): print(f"{w[0]}: {w[1]}") return counter @word_counter def text_reader(url): data = urllib.request.urlopen(url).read().decode('utf_8') return data chilanga_banda = 'https://raw.githubusercontent.com/isabelyb/word_counter/main/chilanga_banda_lyrics.txt' p_to = 'https://raw.githubusercontent.com/isabelyb/word_counter/main/pto.txt' ciclon = 'https://raw.githubusercontent.com/isabelyb/word_counter/main/ciclon.txt' # Output text_reader(chilanga_banda) # >>> TOP FIVE WORDS IN THIS SONG <<< # bailan: 8 # tibiritábara: 8 # Pachucos: 4 # cholos: 4 # chundos: 4 text_reader(p_to) # >>> TOP FIVE WORDS IN THIS SONG <<< # Puto,: 26 # machino: 8 # Marica: 4 # nena: 4 # putino: 4 text_reader(ciclon) # >>> TOP FIVE WORDS IN THIS SONG <<< # rueda: 8 # vueltas: 7 # flecha: 6 # Gira: 6 # Dios: 3
        fidel angel ochoa

        fidel angel ochoa

        student•
        hace 4 años

        que genial!!! GRACIAS POR EL APORTE

        Gustavo Esquivel Sosa

        Gustavo Esquivel Sosa

        student•
        hace 4 años

        Me encanto tu codigo, literal me pase dias revisando canciones y algunos temas de una alta cultura: Discursos politicos, Debates de YouTube y comentarios de Twitter... :) . Solo tengo una pregunta ¿De donde sacaste la idea del codigo?

      Alfredo José Sensente Cortez

      Alfredo José Sensente Cortez

      student•
      hace 4 años

      Muy interesante y divertido!

      carbon.png

        Edward Fernandez

        Edward Fernandez

        student•
        hace 4 años

        Me encantó! :D

      Ricardo Andres Diaz Guevara

      Ricardo Andres Diaz Guevara

      student•
      hace 4 años

      Reto Bart say

      def bart_say(func): def wrapper(text): func(text) print(' |/') print("|\/\/\/|") print("| |") print("| |") print("| (o)(o)") print("C _)") print("| ,___|") print("| /") print("/____|") print("/ |") return wrapper @bart_say def print_text(input_text): text_len = len(input_text) print("⌈" + text_len * "¯" + "⌉") print("⁞" + input_text + "⁞") print("⌊" + text_len * "_" + "⌋") def run(): input_text = str(input("Input a text: ")) print_text(input_text) if __name__ == '__main__': run()
      py_prof_chal3.png
      Carlos Felipe Saldarriaga Bejarano

      Carlos Felipe Saldarriaga Bejarano

      student•
      hace 4 años

      Realicé un pequeño programa al que podemos ingresarle el hábito que queremos desarrollar y la cantidad de minutos al día que le vamos a dedicar, aplicando lo que aprendimos de decoradores y closures. cuentenmé qué tal les parece y qué puedo mejorarle. 😁

      def year_of_daily_effort(func): def wrapper(*args, **kwargs): func(*args, **kwargs) habit_and_time = args total_yearly = int(habit_and_time[1])*365 print('At the end of the year you will practice ' + str(habit_and_time[0])+' a total of '+str(total_yearly)+' minutes!') return wrapper @year_of_daily_effort def daily_habit(habit: str, minutes: int) -> str: print(f"your habit is {habit} for {minutes} minutes daily") daily_habit("yoga",25) #OUTPUT #your habit is yoga for 25 minutes daily #At the end of the year you will practice yoga a total of 9125 minutes!

      Como pueden notar, descubrí que podemos hacer operaciones conlor args dentro del wrapper accediendo a ellos como componentes de una lista según fueron ingresados.

      Jesús Zelaya Contreras

      Jesús Zelaya Contreras

      student•
      hace 4 años

      Buenas comparto mi código, hice un decorador que te devuelve el nombre de la función que ingresas en formato ASCII artístico para ello debes instalar pyfiglet con pip install pyfiglet. Codigo:

      import pyfiglet def print_name(func): def wrapper(): name = func.__name__ ascii_banner = pyfiglet.figlet_format(name) print(ascii_banner) func() return wrapper @print_name def Platzi(): print("Running function...") Platzi()

      Resultado:

      Captura de pantalla (28).png

      Carlos José Tun Pinzón

      Carlos José Tun Pinzón

      student•
      hace 4 años

      Cowsay con Decoradores - Reto de la Clase:

      Hice la vaquita que vimos en el curso de terminal, permite poner el texto que deseemos, siempre que sea de una línea para que lo diga la vaquita cow, espero les guste (y sirva de guía para lo que podemos hacer con decoradores):

      # Decorador para usar Cowsay con cualquier texto (a 1 línea) from datetime import date, datetime def cowsay(func): def wrapper(text): lenght = len(text) print(" _" + lenght*"_" + "_ ") print("< " + text + " > ") print(" -" + lenght*"-" + "- ") print(" \ ^__^ ") print(" \ (oo)\_______ ") print(" (__)\ )\/\ ") print(" ||----w | ") print(" || || ") return wrapper @cowsay def mytext(text): print(text) mytext("No pares de aprender!")
        fidel angel ochoa

        fidel angel ochoa

        student•
        hace 4 años

        que gracioso y divertido!

      Josue Antonio Juan

      Josue Antonio Juan

      student•
      hace 4 años

      este es el mío, sencillo pero funciona

      import os def decorator(func): def wrapper(): os.system('cls') print('❤❤❤ ⭐⭐⭐') func() return wrapper @decorator def gereetings(): greeting = input('intruduce tu nombre: ') print('hola un gusto conocerte', greeting.capitalize(), 'nos alegra mucho conocerte') def run(): gereetings() if __name__=='__main__': run()
        fidel angel ochoa

        fidel angel ochoa

        student•
        hace 4 años

        'cls' para que sirve? corri el codigo pero ese parametro parace no hacer nada, lo demas trabaja muy bien, gracias por el aporte

        Cristian Alejandro Portela Rivera

        Cristian Alejandro Portela Rivera

        student•
        hace 4 años

        Fidel, 'cls' es el comando en la consola de Windows para limpiar la pantalla. Saludos!

      Miguel Angel Reyes Moreno

      Miguel Angel Reyes Moreno

      student•
      hace 4 años

      Creo que se entiende además de ser divertido :D

      retoDecorador.jpg

        Lucas Ramos

        Lucas Ramos

        student•
        hace 3 años

        Te tomaste muy literal lo de que los decoradores POTENCIAN la función jaja buen ejemplo!

      Wilson Delgado

      Wilson Delgado

      student•
      hace 4 años

      Haciendo un web scraper a https://news.ycombinator.com/ , tome el título y el link de cada artículo y al final usando un decorador coloque un emoji que se escoge aleatoriamente.

      import requests import lxml.html as html import datetime import emoji import random HOME_URL = 'https://news.ycombinator.com/' XPATH_LINK_TO_ARTICLE = '//td[@class="title"]/a/@href' XPATH_TITLE = '//td[@class="title"]/a/text()' def random_emoji(): list_emojis = ["💚","🐍","🚀","🐱‍👤","🏛","🗺","🤣","👌","🐱‍🐉", "🐲", "🐘", "🦘", "🐳", "🧠", "🦾", "💅", "🎈", "📗", "🟨"] rand = random.choice(list_emojis) return rand def put_emoji(parse_home): def wrapper(*args, **kwargs): parse_home() today = datetime.date.today().strftime('%d-%m-%Y') with open(f'{today}.txt', 'a', encoding='utf-8') as f: f.write(f'\n\t\tThe emoji of today is: {args[0]}\n') return wrapper @put_emoji def parse_home(): try: response = requests.get(HOME_URL) if response.status_code ==200: home = response.content.decode("utf-8") parsed = html.fromstring(home) links_to_articles = parsed.xpath(XPATH_LINK_TO_ARTICLE) title_of_articles = parsed.xpath(XPATH_TITLE) today = datetime.date.today().strftime('%d-%m-%Y') with open(f'{today}.txt', 'w', encoding='utf-8') as f: for i in range(0,len(title_of_articles)-1): f.write(f'Title description: {title_of_articles[i]}') f.write(f'\n\t Link: {links_to_articles[i]}') f.write('\n\n') else: raise ValueError(f"Error: {response.status_code}") except ValueError as ve: print(ve) def run(): rand=random_emoji() parse_home(rand) if __name__ == '__main__': run()
        Wilson Delgado

        Wilson Delgado

        student•
        hace 4 años

        Este es el Curso de Fundamentos de Web Scraping con Python y Xpath

      Rubén Cuello

      Rubén Cuello

      student•
      hace 4 años

      Hice una función que duplica un número y quise decorarla para ver si me salía. Me devuelve None. Si le quito el decorador funciona. No veo el error. Alguno lo ve?

      Captura de pantalla de 2021-08-07 16-57-01.png
        Sebastián Andrade

        Sebastián Andrade

        student•
        hace 4 años

        Hola, lo que pasa con tu codigo es que tu decorador llama la funcion decorada pero en ningun momento le hace un print al valor que dicha funcion retorna o retorna dicho valor

        def deco(func): def wrapper(*args, **kwargs): f_result = func(*args, **kwargs) print('dupliquè el valor inicial') return f_result return wrapper @deco def duplicador(num): num*=2 #es lo mismo que hace tu funcion pero con otra logica nada mas return num print(duplicador(7))

        SI te fijas aqui yo asingne el valor retornado a una variable 'f_result' hice el print, y despues retornè dicha variable (en el wrapper del decorador). Espero haber ayudado :)

    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