El título de esta lección debería ser "De Python a JS", porque así es como evolucionó la historia. Python nació primero y es mucho más maduro. Con Python, eres capaz de hacer muchas más cosas porque es un lenguaje de back-end y tiene librerías y herramientas para cualquier cosa que puedas imaginar.
Python y JavaScript son amigos. Juntos forman el mejor equipo posible para realizar cualquier desarrollo importante que puedas imaginar.
Por otro lado, Python es el lenguaje de back-end de más rápido crecimiento en el mundo. Es el lenguaje más versátil y fácil de codificar con una de las comunidades más sólidas.
Cuando lo comparas con otros lenguajes de back-end, Python lidera en casi todas las funciones que ofrece: Data Science, AI, desarrollos de API, desarrollos web, etc.
Estas son algunas de las razones por las cuales Python ha llegado hasta este punto:
Simplicidad | Rendimiento |
---|---|
Python estaba destinado a ser simple y fácil. Aquí está el manifiesto de Python: https://es.wikipedia.org/wiki/Zen_de_Python Nota: Ya no hay más punto y coma, corchetes, declarar variables, o la confusa funcionalidad del this . | Python es más rápido que Java, PHP, Ruby y el 90% de los otros lenguajes back-end. Solo los lenguajes de bajo nivel como C++ (difícil de usar) o muy especializados como Node.js pueden superarlo. La escalabilidad de Python se ha demostrado una y otra vez con aplicaciones como el motor de búsqueda de Google, YouTube, Google Apps, etc. |
Comunidad | Herramientas |
---|---|
Python es el lenguaje oficial de Google. También es uno de los lenguajes más antiguos con comunidades enormes alrededor de cada una de sus librerías/herramientas. MIT lo usa para enseñar código. La NASA para construir cohetes. Quora, Facebook, Yahoo, Amazon, etc. ¡Casi todas las grandes empresas del mundo tienen que usarlo! | La mayoría de las librerías de Python son las mejores en lo que hacen: MatLab (para procesamiento de datos) , Pandas (big data), Web.py (servidor web), Django (web framework), PyBrain (AI), TensorFlow (Machine Learning), etc. ¡Podríamos estar aquí todo el día! Lo más sorprendente es que estas librerías solo están a una $ pip install (como cuando usamos NPM con JS). |
Python y JavaScript se complementan entre sí, pero en cuanto a funcionalidad, no tienen NADA en común, no tienen el mismo propósito, no hacen las mismas cosas, provienen de diferentes orígenes, etc.
Lo único que recordarás de JavaScript es lo básico de cualquier lenguaje de programación: bucles, uso de condicionales, variables, clases, funciones y objetos.
Solo hay unas pocas diferencias; aquí está la explicación:
En JavaScript | En Python |
---|---|
Number | Python tiene el mismo tipo de datos "Number" pero puede aceptar más opciones que JS, como fracciones (float) o números complejos. myNumber = 23.23 # Float myNumber = 54 # Entero myNumber = 12.00 # Float (incluso con 00 como decimales) |
Undefined/Null ahora es: None | El tipo de dato undefined no está disponible en Python. Aquí undefined y null son el mismo tipo de datos: None myNumber # es 'None' porque no está definido |
Array | En Python, los array se denominan "List" y son similares a los array de JS, pero son mucho más flexibles y fáciles de utilizar. myArray = ['Juan','John','Steven'] # Lista con índices numéricos |
Object | En JavaScript, los objetos y los diccionarios son casi lo mismo. Puedes hacer lo que quieras con un objeto porque no tienes que declarar primero su Clase y atenerse a su definición. let myCar = {} myCar.color = 'blue'; Python, por otro lado, separa el tipo de datos Diccionario del tipo de datos Objeto. Los objetos no pueden ser declarados informalmente. Primero debes definir su clase antes de poder crear una instancia de ellos. class Car(object): def __init__(self, color): self.color = color myCar = Car('blue') |
Sets y Tuples | JavaScript no tiene nada similar, pueden ser muy útiles: las tuplas se ordenan; los conjuntos (Sets) son secuencias inmutables de valores. |
String | Es lo mismo en Python. |
En Javascript, puedes importar variables de otros archivos con el comando import
o require
, pero tienes que export
los archivos de las variables primero.
En Python, puedes hacer de cualquier carpeta un paquete creando un archivo \__init\__.py
dentro de ella. Luego, puedes importar lo que quieras en esa carpeta sin tener que exportar explícitamente nada.
1from package1 import module1 2 3from package1.module2 import function1 4
Lo que es NPM para JavaScript equivale a PIP para Python. Ambas bestias son increíbles pero muy diferentes por dentro. La mayor diferencia es que los paquetes NPM se descargan localmente a una carpeta node_modules
mientras que los paquetes PIP se instalan en toda la máquina, fuera de la carpeta del proyecto. Otra pequeña diferencia es que NPM usa package.json
y PIP usa un archivo requirements.txt
.
JavaScript es tan flexible que no tienes que prestar mucha atención a los tipos de datos. A Python no le gusta eso... en Python, te acostumbrarás a declarar variables y convertirlas entre tipos de datos.
1let result = '5' - '2'; 2// Ahora "result" es igual a 3
1# En Python sustraer strings producirá un error, en lugar de eso debes hacer esto: 2 3result = int('5') - int('2') # Ahora "result" es igual a 3
Python tiene print()
para escribir en la consola. Recuerda que, dado que Python (como cualquier otro lenguaje de back-end) se ejecuta antes del evento de preload, no tiene acceso a la consola de JavaScript.
1let simpleValue = 'Hello'; 2console.log(simpleValue); // Esto imprimirá el contenido de la variable 3 4let arrayValue = ['Hello', 23, 76, 'World', 43]; 5console.log(arrayValue); // Esto imprimirá el contenido del array y sus elementos
1simple_value = 'Hello' 2print(simple_value) # Esto imprimirá el contenido de la variable 3 4list_value = ['Hello', 23, 76, 'World', 43] 5print(list_value) # Esto funcionará, imprimiendo el contenido de la lista en un formato como este: ['Hello', 23, 76, 'World', 43]
Finalmente, en ES2015, JavaScript incluye las "funciones flecha". Esa es una manera muy fácil y liviana de declarar y usar funciones. Python, por otro lado, tiene algo similar llamado funciones lambda
que básicamente te permiten usar pequeñas funciones anónimas en línea como accesos directos.
1// Usando una función flecha para mapear una lista 2 3let peopleArray = [{ name: "Mario Peres" }, { name: "Emilio Peres" }, { name: "Yusaiba Peres" }]; 4let returningMapObject = peopleArray.map(person => person.name); 5console.log(returningMapObject);
1# Usando lambda para mapear una lista 2 3people_list = [{"name": "Mario Peres"}, {"name": "Emilio Peres"}, {"name": "Yusaiba Peres"}] 4returning_map_object = map(lambda obj: obj['name'], people_list) 5names_list = list(returning_map_object) 6print(names_list) 7 8# Ahora names_list es una lista de nombres como ["Mario Peres", "Emilio Peres", "Yusaiba Peres"]
📺 Aquí hay un video extraño, pero sorprendente que explica las funciones lambda: https://www.youtube.com/watch?v=25ovCm9jKfA
1// Haciendo un bucle forEach en JS 2myArray.forEach(function(item,index,array) { 3 console.log(item); 4}); 5 6// Haciendo un bucle for en JS 7for(let i = 0; i < myArray.length; i++){ 8 console.log(myArray[i]); 9}
1colors = ["red", "green", "blue", "purple"] 2for color in colors: 3 print(color)
1let myArray = ['Academy', 'Coding']; 2myArray.push('4Geeks'); // Añadiendo un item 3 4// Para eliminar el elemento en la posición 1 5myArray.splice(1, 1);
1my_list = ['The', 'earth', 'revolves', 'around', 'sun'] 2 3my_list.insert(0, "Yes") 4print(my_list) # ['Yes', 'The', 'earth', 'revolves', 'around', 'sun'] 5 6my_list.remove("Yes") 7print(my_list) # ['The', 'earth', 'revolves', 'around', 'sun']
1# Orden ascendente 2number_list = [5, 2, 3, 1, 4] 3number_list.sort() 4print(number_list) # [1, 2, 3, 4, 5] 5 6# Ordenar la lista de objetos usando un parámetro "key" 7my_list = [{"name": "Mario Peres"}, {"name": "Emilio Peres"}, {"name": "Yusaiba Peres"}] 8my_list.sort(key=lambda person: person['name'])
📺 Llamemos a Socratica de nuevo para entender el sorting en Python: https://www.youtube.com/watch?v=QtwhlHP_tqc
Ahora no hay una manera de hacer "switch"... pero ¿a quién le importa? 🙂
Python trae un nuevo tipo de datos llamado "Tupla". Piensa en ello como una lista de alto rendimiento liviana y rápida. Pero, como siempre, para aumentar el rendimiento necesitamos disminuir la funcionalidad.
📺 Este es un video obligatorio que explica la diferencia entre ellos: https://www.youtube.com/watch?v=NI26dqhs2Rk
1// Hay dos maneras de declarar un objeto 2 3// Como un objeto literal 4let obj = { "name": "Mario", "lastname": "Perez" }; 5 6// Como una Clase 7class Person{ 8 constructor() { 9 this.name = ""; 10 this.lastname = ""; 11 } 12} 13 14let obj = new Person(); 15obj.name = "Mario"; 16obj.lastname = "Perez";
1# En Python tenemos Clases y Diccionarios 2 3# Así es como se declara y usa un diccionario 4my_dict = {} 5my_dict['name'] = "Mario" 6my_dict['lastname'] = "Perez" 7 8# Así es como se declara y usa una clase 9class Person: 10 def __init__(self): 11 self.name = '' 12 self.lastname = '' 13 14my_person = Person() 15my_person.name = "Mario" 16my_person.lastname = "Perez"
📺 Socratica, nuestro gran espécimen y amigo evolucionado, explica Objetos de una manera excelente: https://www.youtube.com/watch?v=apACNr7DC_s
Las PEPs son "propuestas de mejora de Python" desarrolladas, aprobadas y publicadas por la comunidad de Python y no son opcionales.
Hay algunas que debemos conocer desde el inicio de nuestro aprendizaje.
Una en particular es la PEP8. La PEP8 es la "Guía de estilo de código para Python". Si bien es una guía, en la comunidad Python es muy, pero muy utilizada y si no la utilizas adecuadamente, quien lea tu código lo sabrá inmediatamente.
A continuación vamos a listar algunos ejemplos (no todos):
Utilizar nombres descriptivos (siempre) y en minúsculas. Para nombres compuestos, separar las palabras con guiones bajos.
1mi_variable = 12
Utilizar nombres descriptivos y en mayúsculas para variables constantes separando palabras con guiones bajos.
1MI_CONSTANTE = 12
Siempre colocar un espacio en blanco, antes y después de un operador
1monto_bruto = 175 2tasa_interes = 12 3monto_interes = monto_bruto * tasa_interes / 100 4tasa_bonificacion = 5 5importe_bonificacion = monto_bruto * tasa_bonificacion / 100 6monto_neto = (monto_bruto - importe_bonificacion) + monto_interes
Los comentarios en la misma línea del código deben separarse con dos espacios en blanco y luego del símbolo # debe ir un solo espacio en blanco.
1edad = 15 # Edad de María
Una indentación de 4 (cuatro) espacios en blanco indica que las instrucciones indentadas forman parte de una misma estructura de control o bloque.
1numero = 50 2if numero < 100: 3 print('Hola') 4 print('Menor que 100') 5elif numero < 200: 6 print('Chao') 7 print('Mayor a 200') 8else: 9 print('Adiós') 10 print('mayor o igual a 100 y menor o igual que 200')