Apuntes de Python 3 (3ª parte)


Tras año y medio desde la segunda entrega de los Apuntes de Python, llega la tercera entrega, con únicamente un par de secciones bastante genéricas (comunes a muchos lenguajes de programación) y unos cuantos snippets a modo de resumen. Pero antes de nada, te recuerdo los enlaces que preceden a este post:

Guía de estilo para Python

  • Usa (4) espacios en lugar de tabular
  • Nombra a tus variables y a tus funciones en minúsculas usando «_» como separador. i.e. return_code
  • Nombra a tus constantes en mayúsculas y de nuevo, usando «_» como separador. i.e. MAX_SIZE
  • Puedes usar comillas simples o dobles para strings [Más info]
  • Para strings con triple comilla, usa siempre comillas dobles. i.e. «»» Aquí el docstring «»»
  • Usa 2 líneas en blanco antes de funciones y definiciones de clases
  • Usa 1 línea en blanco antes de métodos dentro de una clase
  • Dentro de las funciones, usa una línea en blanco para separar secciones lógicas
  • Respecto a los comentarios, deben ser frases completas. Dejando un espacio entre la almohadilla y el comentario, empezándo en mayúscula y acabando la frase con un punto.

[Más info] [Y más]

Continuar leyendo «Apuntes de Python 3 (3ª parte)»

Apuntes de Python 3 (2ª Parte)

python3Ya tenemos aquí el segundo post de apuntes de Python 3, que sigue al primero que publiqué hace ya unos meses. Pincha en el siguiente link si te lo perdiste:

Apuntes de Python3 (1ª Parte)

1. Funciones (continuación)

Argumentos de la función (continuación)

Podemos setear un valor por defecto de uno o más argumentos de la función, de tal manera que si al llamar a la función no le pasamos dichos argumentos, éstos tomarán el valor por defecto. Podemos pasarle como valor por defecto, una variable, pero mucho cuidado pues el valor por defecto se seteará en el momento de la definición, con lo que si modificas la variable después de la definición de la función, no variará el valor por defecto del argumento.

>>> def myfunc(a,b=33,c='hello'):
>>>   print(a,b,c)
>>>
>>> myfunc(1,2)
1 2 hello

Respecto a los argumentos al llamar a una función, deberíamos usar «keyword arguments» (aka «kwargs») en lugar de argumentos posicionales. Es más largo pero es mucho más claro.

def myfunc(a,b,c):
   pass

myfunc(1,2,3)            #argumentos posicionales
myfunc(a=1,b=2,c=3)      #kwargs

Podemos usar un único argumento al definir la función para capturar cualquier número de argumentos posicionales (un asterísco) o kwargs (dos asteríscos) que se le pasen a la función.

def myfunc(*myargs):     #myargs será una tupla con todos los argumentos posicionales
def myfunc(**mykwargs):  #mykwargs será un diccionario con todos los kwargs

Continuar leyendo «Apuntes de Python 3 (2ª Parte)»

Apuntes de Python 3 (1ª Parte)

python3
Bueno, este artículo contiene una serie de apuntes que me han parecido interesantes, referentes a un curso sobre Python 3. Así pues, no es ni mucho menos, un curso de Python 3, pero con suerte le será de utilidad a alguien (además de a mí mismo). De momento, aquí el primer post que he creado mientras he ido avanzando en el curso.

1. Introducción

1.1. ¿Por qué Python?

  • Escritura eficiente: requiere escribir menos código que otros lenguajes
  • Lenguaje de alto nivel y propósito general
  • Funciona bajo cualquier sistema operativo
  • Popular y gratuito
  • Cercano al pseudo-código, enfatiza la legibilidad

1.2. ¿Qué es Python?

  • Soporta múltiple paradigmas de programación (orientación a objetos, funcional, etc.)
  • Type checking done at runtime
  • Gestión automática de la memoria / garbage collector
  • Modular (core pequeño, extensible con módulos)
  • El código python puede ser paquetizado en un único ejecutable listo para distribuir (ej. dropbox)
  • Open-Source
  • Uno de los objetivos más importantes de los «pythoneros» es que sea un lenguaje divertido de usar
  • Creado por Guido van Rossum (aka BDFL)

Continuar leyendo «Apuntes de Python 3 (1ª Parte)»

Python 2.7 en CentOS 6 con mod_wsgi

python2En este post, veremos cómo instalar una nueva versión de Python (la 2.7.5) manteniendo la versión del sistema (2.6.6 en CentOS 6), forzando al mod_wsgi de Apache a usar la nueva versión en lugar de la de sistema. La idea es no tocar la versión de sistema, puesto que si cambiamos dicha versión, seguramente nos encontraremos más adelante con problema de dependencias en prácticamente cualquier actualización o instalación que queramos hacer con yum.

De esta manera, lo que haríamos sería hacer una segunda instalación de la nueva versión de Python, que no comprometiera la instalación original. En el ejemplo, estamos usando un servidor CentOS 6.4 que por defecto, viene con Python 2.6.6, con un servidor Apache con mod_wsgi 3.2. Lo que queremos, es instalar Python 2.7.5 sin comprometer el Python del sistema, instalar los módulos de Python necesarios para nuestra aplicación, pero únicamente para la nueva versión 2.7.5, y finalmente, reconfigurar mod_wsgi para usar la nueva versión.

Para ello, podríamos seguir los pasos descritos a continuación:

Entorno

Comprobamos los detalles del sistema operativo:

[root@MyServer]#cat /etc/redhat-release
CentOS release 6.4 (Final)

Verificamos la versión de python del sistema:

[root@MyServer]# python --version
Python 2.6.6

Continuar leyendo «Python 2.7 en CentOS 6 con mod_wsgi»

Mod_wsgi en Apache

PythonNo sé bien bien porqué (en realidad sí lo sé, pero no viene a cuento), me he visto peleando con instalando mod_wsgi en un servidor Apache (LAMP, para más señas).

Apache, para quién no lo conozca, es uno de los servidores web más populares que existen; es de código abierto y consta de un núcleo, y de varios módulos que le añaden funcionalidades (conexiones ssl, soporte para perl, php, asp, etc.). Así pues, cuando instalamos un servidor Apache, podemos instalar, además, únicamente los módulos que necesitemos, teniendo así, un servidor más seguro (al tener únicamente lo que necesitamos) y con mejor rendimiento.

Mod_wsgi es uno de estos módulos para Apache, que en este caso «permite servir aplicaciones hechas en Python, que tengan soporte para la interfaz WSGI». (Fuente).

Continuar leyendo «Mod_wsgi en Apache»