1.2. Declaración de funciones

Python, como la mayoría de los lenguajes, tiene funciones, pero no utiliza ficheros de cabecera independientes como C++ o secciones interface/implementation como Pascal. Cuando necesite una función, simplemente declárela e incluya el código.

Ejemplo 1.3. Declaración de la función buildConnectionString


def buildConnectionString(params):

Aquí hay que indicar varias cosas. En primer lugar, la palabra clave def inicia la declaración de la función, seguida por el nombre de la función, seguido por los argumentos entre paréntesis. Si hay más de un argumento (aquí no ocurre) se separan con comas.

En segundo lugar, la función no define el tipo del valor de retorno. Las funciones de Python no especifican el tipo de su valor de retorno; ni siquiera especifican si devuelven o no un valor. De hecho, todas las funciones de Python devuelven un valor; si la función incluye una sentencia return, devolverá ese valor; en otro caso devolverá None, el valor nulo de Python.

Nota
En Visual Basic, las funciones (que devuelven un valor) empiezan con function, y las subrutinas (que no devuelven un valor) empiezan con sub. En Python no hay subrutinas. Todo son funciones, todas las funciones devuelven un valor (incluso si este es None), y todas las funciones empiezan con def.

En tercer lugar, el argumento, params, no especifica el tipo de dato. En Python, las variables o tienen nunca un tipo explícito. Python supone de qué tipo es una variable y lo guarda internamente.

Nota
En Java, C++ y otros lenguajes de tipos estáticos, se debe especificar el tipo de valor de retorno de una función y de cada argumento. En Python, nunca se especifica explícitamente el tipo de nada. Según el valor que se le asigne, Python almacena el tipo de dato internamente.

Añadido: Un erudito lector me envió esta exposición comparando Python con otros lenguajes de programación:

Lenguaje de tipos estáticos
Un lenguaje en el que los tipos deben declararse. Java y C son lenguajes de tipos estáticos, porque cada declaración de variable debe incluir un tipo de dato.
Lenguaje de tipos dinámicos
Un lenguaje en el que los tipos se descubren en el momento de ejecución; lo contrario de tipos estáticos. VBScript y Python son lenguajes de tipos dinámicos, porque suponen de qué tipo es una variable cuando se le asigna un valor por primera vez.
Lenguaje fuertemente tipado
Un lenguaje en el que los tipos se mantienen siempre. Java y Python son fuertemente tipados. Si se tiene un entero, no se le puede tratar como una cadena sin convertirlo explícitamente (veremos más sobre como hacerlo en este capítulo).
Lenguaje débilmente tipado
Un lenguaje en el que los tipos pueden ignorarse; lo contrario de fuertemente tipado. VBScript es débilmente tipado. En VBScript, se puede concatenar la cadena '12' con el entero 3 para obtener la cadena '123', y después tratarla como el entero 123, todo ello sin conversión explícita.

De modo que Python es un lenguaje de tipos dinámicos (ya que no utiliza declaraciones explícitas de tipos) y fuertemente tipado (ya que cuando se ha dado un tipo a una variable, permanece).