6. Definir funciones

Definir funciones

matemáticas: f(x)=x^2

python:

>>> def f(x):   
...     return x ** 2
>>> f(3)
9
>>> result = f(3)
>>> result
9

‘def’ Palabra clave que indica la definición de una función
‘return’ Palabra clave que indica el resultado de una función
parámetro: variable que aparece entre paréntesis de la defición de la función. Toman sus valores de expresiones en la llamada a la función

Forma general de un return statement.
  – return expresion
Reglas para la ejecución del sentencia de retrono (return statement)
1. Evalúa la expresión, lo que produce un valor guardado en una dirección de memoria
2. Pasar la dirección de memoria a la función que realiza la llamada

Definición de la función:
def nombre_de_la_funcion(parámetro1,parámetro2,etc):
cuerpo (nótese que el cuerpo tiene espacios al inicio)

Reglas para la ejecución de una sentencia de asignación (assingment statement)
1. Evaluar la expresión a la derecha de = producirá un valor
2. Almacenar en memoria el valor de la variable a la izquierda de =

 Área del triángulo = base x altura / 2

 >>> def area(base, altura):
       return base * altura / 2

>>> area(3, 4)
6.0

 

Python utiliza espacios al inicio de las líneas para determinar cuando los bloques de código comienzan y finalizan. Los errores que se pueden obtener son:

· Unexpected indent:
Esta línea de código tiene más espacios al inicio que la anterior, pero la anterior no es el inicio de un subbloque (ej: if/while…). Todas las líneas de código en un bloque deben empezar con el mismo espacio en blanco al inicio, por ejemplo:

>>> def a():
...   print "foo"
...     print "bar"
IndentationError: unexpected indent

Esto es especialmente común cuando se está utilizando python de forma interactiva, asegúrate de que no pones ningún espacio extra antes de tus comandos. Muy molesto al copiar-pegar comandos de ejemplo.

>>>   print "hello"
IndentationError: unexpected indent

· Unindent does not match any outer indentation level.
Esta línea tiene menos espacios al inicio que la anterior, pero igualmente no coincide con ningún otro bloque del que pudiera ser parte. Python no puede decidir dónde va. En el siguiente ejemplo, ¿el último print se supone que es parte del if o no?

>>> if user == "Joey":
...     print "Super secret powers enabled!"
...   print "Revealing super secrets"
IndendationError: unindent does not match any outer indentation level

· Expected an indented block:
Esta línea tiene el mismo número de espacios al inicio que la anterior, pero la última línea se suponía que iniciaba un bloque.

>>> def foo():
... print "Bar"
IndentationError: expected an indented block

· Name error:
Si se iguala una variable a un nombre sin definir, se obtiene este error.

>>> apple = banana
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'banana' is not defined

· Si deseas una función que no haga nada, utiliza el commando de pase “no-op”

>>> def foo():
...     pass

La mezcla de tabulaciones y espacios está permitida, pero Python asume que una tabulación son 8 espacios, lo que puede no coincidir con el editor de texto. Simplemente no utilices tabulaciones.

La mejor forma de evitar estos problemas es utilizar siempre un número de espacios consistente cuando creas un subbloque, e idealmente utilizar un buen IDE que solvente el problema por ti. Además, el código será más legible.