Lenguaje multi-propósito

    Una forma de clasificar los lenguajes de programación se basa en sus características y propósitos. Un conjunto específico de características define un paradigma de programación. Python, como muchos otros lenguajes de programación, incorpora características de varios paradigmas, lo que lo hace muy flexible y útil. De hecho, también puede considerarse un lenguaje de programación multipropósito.

    Con Python tu puedes programar con los siguientes paradigmas:

    • Imperativo: Con Python, tienes la flexibilidad de programar utilizando varios paradigmas. El primero de ellos es el paradigma imperativo. En este paradigma, das instrucciones a la computadora sobre lo que quieres que haga y cómo hacerlo. El programa es un conjunto de instrucciones, similar a una receta de cocina. Proporcionas los ingredientes, y luego le das a la computadora una serie de pasos a seguir, como "primero, haz esto, luego haz aquello", etc. Otros lenguajes de programación que siguen el paradigma imperativo son C, C++, Java, Rust, Kotlin y varios más C, C++, Java, Rust, Kotlin y varios más.
    • Declarativo: En el paradigma declarativo tu le dices a la computadora los resultados que quieres obtener o el objetivo que deseas alcanzar, y es la computadora es la que determinará la mejor manera de obtener dichos resultados. Los ejemplos más comunes de lenguajes declarativos son los utilizados en las bases de datos, también conocidos como lenguajes de consulta. SQL es el más famoso de todos ellos. Otro lenguaje declarativo son las expresiones regulares. Python no es un lenguaje puramente declarativo como lo es SQL, pero ofrece algunas funciones bastante útiles como son los generadores y la comprensiones de listas y diccionarios.
    • Estructurado: Básicamente se refiere a las estructuras de control del flujo de programa como if, then, else, elif, while, for break, continue, match y return, entre otros que veremos más tarde.
    • Procedimental: La programación procedimental es una forma estructurada de escribir código que hace hincapié en el uso de procedimientos o funciones para dividir un programa en piezas más pequeñas y manejables. Esto hace que el código sea más fácil de leer, comprender y mantener. En la programación procedimental, la atención se centra en la secuencia de pasos que hay que ejecutar para lograr un objetivo concreto. Este enfoque es especialmente útil cuando se trabaja en proyectos pequeños o medianos, en los que se hace hincapié en la velocidad y la eficacia. La programación procedimental puede utilizarse para resolver una amplia gama de problemas, desde simples cálculos matemáticos hasta complejas aplicaciones empresariales (Como las de un banco o una empresa de seguros). Una de las principales ventajas de la programación procedimental es que permite un alto grado de reutilización del código. Esto significa que una vez que has escrito un procedimiento o función para realizar una tarea específica, puedes reutilizar ese código en otras partes de tu programa sin tener que reescribirlo. Esto puede ahorrarte una cantidad significativa de tiempo y esfuerzo, especialmente cuando trabajas en proyectos de mayor envergadura.
    • Funcional: Una funcion pura es aquella cuyo valor de salida esta determinada unicamente por los parametros de entrada y que al ejecutarla no existe ningun efecto secundario observable. En este paradigma el programa se escribe exclusivamente con llamadas a funciones evitando cualquier variable de estado global; para hacer operaciones complicadas se puede combinar o anidar funciones con la condicion de no guardar ninguna variable de estado global. Aunque Python no es un lenguaje puramente funcional como Haskell, Lisp, Erlang o Elixir proporciona varias características que pueden ayudarte a escribir código con un estilo funcional. Por ejemplo, Python admite funciones de orden superior, cierres y expresiones lambda, que se utilizan habitualmente en la programación funcional. Al utilizar la programación funcional en Python, puedes escribir código más modular, reutilizable y fácil de mantener. También puedes aprovechar las ventajas de la inmutabilidad, como la mejora de la concurrencia y el paralelismo, y evitar errores de programación comunes como las condiciones de carrera y los efectos secundarios.
    • Programación orientada a objetos. La idea central de la POO es modelar el código como objetos que pueden contener datos en forma de campos(llamados atributos y/o propiedades) y código en forma de funciones (o métodos). Algunos de los conceptos principales de la POO son:
      • Herencia
      • Polimorfismo
      • Encapsulamiento
      • Paso de mensajes
      • Abstracción de datos
      • Composición, herencia y delegación. La POO es un concepto clave en Python, por que uno de sus principales directivas es que todo es un objeto.
    • Scripting / Guiones. Los lenguajes de programación dinámicos como Python no necesitan compilación, ya que el codigo fuente es directamente ejecutado, casi linea por linea, usando un intérprete. Ya que no se necesita compilación, la memoria se administra automáticamente y el tipo de datos de una variable es dinámico hace de Python un lenguaje idea para escribir codigo de "pegamento" entre sistemas más complejos y especializados sin tener que preocuparse demasiado por los detalles mencionados anteriormente.
    • Tipo de datos dinámico. Aunque en las últimas versiones de Python se ha agregado soporte para anotar el tipo de datos de las variables y objetos, esta sintaxis extra es ignorada por el intérprete y en general, tu puedes hacer una variable que primero sea un entero, luego un string y luego un objeto. El truco es que en Python todo es un objeto, hasta los numeros. Ya lo verás más adelante.
    • Administración automática de memoria. En Python tu no tienes que preocuparte por reservar o liberar memoria.El intérprete lleva internamente la cuenta de referencias de cada objeto que crea. Cuando el recuento de referencias de un objeto llega a cero, el intérprete puede liberar con seguridad la memoria que ocupa. Este proceso ocurre tras bambalinas, por lo que la mayor parte del tiempo no tendrás que preocuparte por él.