Chapter 3
Funciones
3.1 Llamadas a funciones
Ya hemos visto un ejemplo de una llamada a una funci�n:
>>> type("32")
<type 'string'>
El nombre de la funci�n es \texttt{type, y muestra
el tipo de un valor o de una variable. El valor o variable, llamado
el \textbf{argumento} de la funci�n, ha de estar encerrado entre par�ntesis.
Es habitual decir que una funci�n ``toma'' un argumento y ``devuelve''
un resultado. El resultado se llama \textbf{valor de retorno}.
\index{argumento} \index{valor de retorno}
En lugar de imprimir el valor de retorno, podemos asign�rselo a una
variable.
\begin{verbatim}
>>> nereida = type("32")
>>> print nereida
\end{verbatim} Otro ejemplo m�s: la funci�n \texttt{id} toma como
argumento un valor o una variable y devuelve un entero que
act�a como identificador �nico de ese valor.
\begin{verbatim}
>>> id(3)
134882108
>>> yanira = 3
>>> id(yanira)
134882108
\end{verbatim} Cada valor tiene un \texttt{id}, que es un valor �nico
relacionado con d�nde se almacena en la memoria del computador. El
\texttt{id} de una variable es el \texttt{id} del valor al que hace referencia.
\section{Conversi�n de tipos}
\index{conversi�n de tipos} \index{tipos!conversi�n}
Python proporciona una colecci�n de funciones internas que convierten
valores de un tipo a otro. La funci�n \texttt{int} toma un valor y
lo convierte a un entero, si es posible, o da un error si no es posible.
\begin{verbatim}
>>> int("32")
32
>>> int("Hola")
ValueError: invalid literal for int(): Hola
\end{verbatim} \texttt{int} tambi�n convierte valores de coma flotante
a enteros, pero recuerde que siempre redondea hacia abajo:
\begin{verbatim}
>>> int(3.99999)
3
\end{verbatim} La funci�n \texttt{float} que convierte
enteros y cadenas en n�meros en coma flotante:
\begin{verbatim}
>>> float(32)
32.0
>>> float("3.14159")
3.14159
\end{verbatim} Finalmente, est� la funci�n \texttt{str}, que convierte
a tipo \texttt{string}:
\begin{verbatim}
>>> str(32)
'32'
>>> str(3.14149)
'3.14149'
\end{verbatim} Pudiera parecer extra�o que Python distinga entre el
valor entero \texttt{1} y el valor de coma flotante \texttt{1.0}.
Tal vez representen el mismo n�mero, pero pertenecen a tipos distintos.
El motivo es que se representan de forma distinta dentro del computador.
\section{Coerci�n de tipos}
\index{coerci�n de tipos} \index{tipos!coerci�n}
\index{divisi�n de enteros}
\index{enteros!divisi�n}
Ahora que ya sabemos convertir entre tipos, tenemos otra forma de enfrentarnos
a la divisi�n de enteros. Volviendo al ejemplo del cap�tulo anterior, suponga
que queremos calcular qu� fracci�n de una hora hab�a transcurrido. La expresi�n
m�s obvia, \texttt{minuto / 60}, realiza una divisi�n de enteros, por lo que el
resultado es siempre 0, incluso 59 minutos despu�s de la hora.
Una alternativa es convetir \texttt{minuto} a tipo float (coma flotante)
y luego efectuar una divisi�n de coma flotante:
\begin{verbatim}
>>> minuto = 59
>>> float(minuto) / 60.0
0.983333333333
\end{verbatim} O bien podemos sacar provecho de las reglas de la
conversi�n autom�tica de tipos, llamada \textbf{coerci�n}
de tipos. Para los operadores matem�ticos, si uno de los
operandos matem�ticos es tipo \texttt{float}, el otro se convierte
autom�ticamente en \texttt{float}.
\index{coercion}
\begin{verbatim}
>>> minuto = 59
>>> minuto / 60.0
0.983333333333
\end{verbatim} Al usar un denomidador que es \texttt{float}, obligamos
a Python a hacer divisi�n de coma flotante.
\section{Funciones matem�ticas}
\index{funciones matem�ticas} \index{matem�ticas!funciones}
Es posible que ya haya visto usted en matem�ticas funciones como \texttt{sin}
(seno) y \texttt{log}, y que haya aprendido a evaluar expresiones
como \texttt{sin(pi/2)} y \texttt{log(1/x)}. Primero eval�a la expresi�n
entre par�ntesis, (el argumento). Por ejemplo, \texttt{pi/2} es aproximadamente
1.571, y \texttt{1/x} es 0.1 (si \texttt{x} es igual a \texttt{10.0}).
Luego eval�a la funci�n en s� misma, bien mir�ndola en una tabla,
bien llevando a cabo diversos c�lculos. El \texttt{sin} (seno) de
1.571 es 1, y el \texttt{log} de 0.1 es -1 (suponiendo que \texttt{log}
indique el logaritmo de base 10).
Este proceso puede aplicarse repetidamente para evaluar expresiones
m�s complicadas como \texttt{log(1/sin(pi/2))}. Primero evaluamos
el argumento de la funci�n m�s interna, luego se eval�a la funci�n,
y as� sucesivamente.
Python dispone de un m�dulo matem�tico que proporciona la mayor�a
de las funciones matem�ticas habituales. Un \textbf{m�dulo}
es un archivo que contiene una colecci�n de funciones agrupadas juntas.
\index{m�dulo}
Antes de poder usar las funciones de un m�dulo, tenemos que importarlo:
\begin{verbatim}
>>>import math
\end{verbatim} Para llamar a una de las funciones, tenemos que especificar
el nombre del m�dulo y el nombre de la funci�n, separados por un punto. A
esto se le llama notaci�n de punto:
\begin{verbatim}
decibelio = math.log10 (17.0)
angulo = 1.5
altura = math.sin(angulo)
\end{verbatim} La primera sentencia da a \texttt{decibelio} el valor
del logaritmo de 17, en base \texttt{10}. Hay tambi�n una funci�n
llamada \texttt{log} que toma logaritmos en base \texttt{e}.
La tercera sentencia halla el seno del valor de la variable \texttt{angulo}.
\texttt{sin} y las otras funciones trigonom�tricas (\texttt{cos},
\texttt{tan}, etc.) toman sus argumentos en \emph{radianes}. Para
convertir de grados a radianes, puede dividir por 360 y multiplicar
por \texttt{2{*}pi}. Por ejemplo, para hallar el seno de 45 grados,
calcule primero el �ngulo en radianes y luego halle el seno:
\begin{verbatim}
grados = 45
angulo = grados * 2 * math.pi / 360.0
math.sin(angulo)
\end{verbatim} La constante \texttt{pi} tambi�n es parte del m�dulo
\texttt{math}. Si se sabe la geometr�a, puede verificar el resultado
compar�ndolo con el de la ra�z cuadrada de 2, dividida entre 2.
\begin{verbatim}
>>> math.sqrt(2) / 2.0
0.707106781187
\end{verbatim}
\section{Composici�n}
\index{composici�n} \index{funciones!composici�n}
Igual que con las funciones matem�ticas, las funciones de Python se
pueden componer; eso quiere decir que se usa una expresi�n como parte
de otra. Por ejemplo, puede usar cualquier expresi�n como argumento
de una funci�n:
\begin{verbatim}
x = math.cos(angulo + pi/2)
\end{verbatim} Esta sentencia toma el valor de \texttt{pi}, lo divide
entre dos y le a�ade el resultado al valor de \texttt{angulo}. La
suma se pasa luego como argumento a la funci�n \texttt{cos}.
Tambi�n puede tomar el resultado de una funci�n y pas�rselo como argumento
a otra:
\begin{verbatim}
x = math.exp(math.log(10.0))
\end{verbatim} Esta sentencia encuentra el logaritmo en base \texttt{e}
de 10 y luego eleva \texttt{e} a ese exponente. El resultado queda
asignado a \texttt{x}.
\section{A�adir funciones nuevas}
Hasta ahora s�lo hemos usado las funciones que vienen incluidas con
Python, pero tambi�n es posible a�adir nuevas funciones. La creaci�n
de nuevas funciones para resolver sus problemas partigulares es una
de las cosas m�s �tiles de los lenguajes de programaci�n de prop�sito
general.
En contextos de programaci�n, \textbf{funci�n} es una secuencia de
instrucciones con nombre, que lleva a cabo la operaci�n deseada. Esta
operaci�n se especifica en una \textbf{definici�n de funci�n}. Las
funciones que hemos usado hsta ahora las han definido por nosotros,
y esas definiciones est�n ocultas. Eso es bueno, ya que nos permite
usar funciones sin preocuparnos sobre los detalles de sus definiciones.
\index{funci�n} \index{definici�n de funci�n} \index{funci�n!definici�n}
La sintaxis de la definici�n de una funci�n es:
\begin{verbatim}
def NOMBRE( LISTA DE PARAMETROS ):
SENTENCIAS
\end{verbatim} Puede inventarse el nombre que desee para su funci�n,
con la excepci�n de que no puede usar las palabras reservadas de Python.
La lista de par�metros especifica qu� informaci�n, en caso de haberla,
ha de proporcionar para usar la funci�n nueva.
Puede haber cualquier n�mero de sentencias dentro de la funci�n, pero
tienen que estar indentadas desde el margen izquierdo. En los ejemplos
de este libro se usar� una indentaci�n de dos espacios.
El primer par de funciones que escribiremos no tienen par�metros,
de manera que su sintaxis es:
\begin{verbatim}
def nueva_linea():
print
\end{verbatim} Esta funci�n se llama \texttt{nueva\_linea}. Los par�ntesis
vac�os indican que no tiene par�metros. Contiene una �nica sentencia,
que muestra como salida un car�cter de nueva l�nea (es lo que sucede
cuando utiliza una orden \texttt{print} sin argumentos).
Llamamos entonces a la funci�n nueva usando la misma sintaxis que
usamos para las funciones internas:
\begin{verbatim}
print "Primera linea."
nueva_linea()
print "Segunda linea."
\end{verbatim} The output of this program is
\begin{verbatim}
Primera linea.
Segunda linea.
\end{verbatim} Observe el espacio a�adido que hay entre las dos l�neas.
Si quisi�ramos m�s espacios, entre las l�neas, �qu� har�amos? Podemos
llamar varias veces a la misma funci�n:
\begin{verbatim}
print "Primera linea."
nueva_linea()
nueva_linea()
nueva_linea()
print "Segunda linea."
\end{verbatim} O bien podemos escribir una nueva funci�n que llamaremos
\texttt{tresLineas}, y que imprima tres nuevas l�neas:
\begin{verbatim}
def tresLineas():
nueva_linea()
nueva_linea()
nueva_linea()
print "Primera Linea."
tresLineas()
print "Segunda Linea."
\end{verbatim} Esta funci�n contiene tres sentencias, las cuales est�n
todas indentadas con dos espacios. Puesto que la siguiente sentencia
no est� indentada, Python sabe que no es parte de la funci�n.
Observe los siguientes puntos con respecto a este programa:
\begin{enumerate}
\item Se puede llamar al mismo procedimiento repetidamente. De hecho es
bastante �til hacerlo, adem�s de habitual.
\item Se puede llamar a una funci�n desde dentro de otra funci�n: en este
caso \texttt{tresLineas} llama a \texttt{nueva\_linea}.
\end{enumerate}
Hasta ahora puede no haber quedar claro por qu� vale la pena crear
todas estas funciones nuevas. En realidad hay much�simas razones,
pero este ejemplo demuestra dos:
\begin{itemize}
\item Crear una nueva funci�n le da la oportunidad de dar un nombre a un
grupo de sentencias. Las funciones simplifican su programa al ocultar
c�lculos complejos detr�s de �rdenes sencillas, y usar palabras de su propia
lengua en vez de c�digo arcano.
\item Crear una nueva funci�n hace que el programa sea m�s peque�o, al eliminar
c�digo repetitivo. Por ejemplo, una manera de imprimir nueve l�neas
consecutivas es llamar a \texttt{tresLineas} tres veces.
\end{itemize}
\begin{quote}
\emph{Como actividad, escriba una funci�n llamada} \texttt{\emph{nueveLineas}}
\emph{que use} \texttt{\emph{tresLineas}} \emph{para imprimir nueve
l�neas en blanco. �C�mo imprimir�a 27 l�neas nuevas?}
\end{quote}
\section{Las definiciones y el uso}
Juntando los fragmentos de c�digo de la secci�n anterior, el programa
completo queda de la siguiente manera:
\begin{verbatim}
def nueva_linea():
print
def tresLineas():
nueva_linea()
nueva_linea()
nueva_linea()
print "Primera Linea."
tresLineas()
print "Segunda Linea."
\end{verbatim}
El presente programa contiene dos definiciones de funciones:
\texttt{nueva\_linea} y \texttt{tresLineas}. Las definiciones de funciones
se ejecutan como el resto de sentencias, pero el efecto es crear una
nueva funci�n. Las sentencias del interior de la funci�n no se ejecutan
hasta que se llama a la funci�n, y la definici�n de la funci�n no
genera salida.
Como era de esperar, tiene que crear una funci�n antes de poder ejecutarla.
En otras palabras, la definici�n de la funci�n tiene que ejecutarse
antes de la primera vez que se la invoque.
\begin{quote}
\emph{Como actividad, pruebe a ejecutar este programa moviendo las
tres �ltimas sentencias al principio del programa. Registre qu� mensaje
de error obtiene usted.}
\emph{Como segunda actividad, pruebe a tomar la versi�n del programa que funcionaba
y a mover la definci�n de} \texttt{\emph{nueva\_linea}} \emph{m�s
abajo que la definici�n de} \texttt{\emph{tresLineas}}\emph{. �Qu�
ocurre cuando ejecuta el programa?}
\end{quote}
\section{Flujo de ejecuci�n}
\index{flujo de ejecuci�n}
Para asegurarse de que una funci�n se define antes de su primer uso,
tiene que conocer el orden en el que se ejecutan las sentencias; a
esto se le llama \textbf{flujo de ejecuci�n}.
La ejecuci�n comienza siempre por la primera sentencia del programa.
Las sentencias se ejecutan a raz�n de una cada vez, en orden, hasta
que se alcanza una llamada a una funci�n.
Las definiciones de funciones no alteran el flujo de ejecuci�n del
programa, pero recuerde que las sentencias que hay dentro de la funci�n
no se ejecutan hasta que se hace la llamada a la funci�n. Aunque no
es habitual, puede definir una funci�n dentro de otra. En este caso,
la definici�n de funci�n interior no se ejecuta hasta que no se llama
a la funci�n exterior.
Las llamadas a funciones son como un desv�o en el flujo de ejecuci�n.
En lugar de ir a la siguiente sentencia, el flujo salta hasta la primera
l�nea de la funci�n a la que se llama, ejecuta todas las sentencias
que encuentre all�, y vuelve a retomar la ejecuci�n en el punto donde
lo dej�.
Esto suena bastante sencillo... hasta que se acuerda de que una funci�n
puede llamar a otra. Mientras estamos en medio de una funci�n, podr�amos
vernos obligados a abandonarla e ir a ejecutar sentencias en otra
funci�n m�s. Pero mientras estamos en esta nueva funci�n, �podr�amos
salirnos y ejecutar otra funci�n m�s!
Afortunadamente, a Python se le da bien tomar nota de d�nde est�,
de manera que cada vez que se completa una funci�n, el programa retoma
el punto en donde lo dej� en la funci�n que hizo la llamada. Cuando
llega al final del programa, termina.
�Cu�l es la moraleja de toda esta historia? Cuando est� leyendo un
programa, no lo lea desde la parte superior a la inferior. En lugar
de eso, siga el flujo de ejecuci�n.
\section{Par�metros y argumentos}
\label{parameters} \index{par'ametros} \index{funciones!par'ametros}
\index{argumentos} \index{funciones!argumentos}
Algunas de las funciones internas que hemos usado precisan de argumentos,
los valores que controlan c�mo la funci�n lleva a cabo su tarea. Por
ejemplo, si desea encontrar el seno de un n�mero, tiene que indicar
de qu� n�mero se trata. As� pues, \texttt{sin} toma como argumento
un valor num�rico.
Algunas funciones toman m�s de un argumento, como \texttt{pow}, que
toma dos argumentos: la base y el exponente. Dentro de la funci�n,
los valores que se le han pasado se asignan a variables llamadas \textbf{par�metros}.
He aqu� un ejemplo de una funci�n definida por el usuario, que toma
un par�metro:
\begin{verbatim}
def imprimeDoble(paso):
print paso, paso
\end{verbatim} Esta funci�n toma un �nico argumento y se lo asigna
a un par�metro llamado \texttt{paso}. El valor del par�metro (en este
punto todav�a no tenemos ni idea de cu�l ser�) se imprime dos veces,
seguido por un car�cter de nueva l�nea. El nombre \texttt{paso} se
eligi� para sugerir que el nombre que le d� a un par�metro depende de
usted, pero en general es mejor que elija un nombre m�s ilustrativo
que \texttt{paso}.
La funci�n \texttt{imprimeDoble} sirve con cualquier tipo (de dato)
que se pueda imprimir:
\begin{verbatim}
>>> imprimeDoble('Jam�n')
Jam�n Jam�n
>>> imprimeDoble(5)
5 5
>>> imprimeDoble(3.14159)
3.14159 3.14159
\end{verbatim} En la primera llamada a la funci�n, el argumento es
una cadena; en la segunda es un entero, y en la tercera es un n�mero
de coma flotante.
Las mismas reglas de composici�n que se aplican a las funciones internas
se aplican tambi�n a las funciones definidas por el usuario, as� que
puede usar cualquier tipo de expresi�n como argumento de \texttt{imprimeDoble}.
\begin{verbatim}
>>> imprimeDoble('Jam�n'*4)
Jam�nJam�nJam�nJam�n Jam�nJam�nJam�nJam�n
>>> imprimeDoble(math.cos(math.pi))
-1.0 -1.0
\end{verbatim}
Como de costumbre, se eval�a la expresi�n antes de
ejecutar la funci�n, de modo que \texttt{imprimeDoble} devuelve
\texttt{Jam�nJam�nJam�nJam�n Jam�nJam�nJam�nJam�n}
en lugar de \texttt{'Jam�n'*4' Jam�n'*4}.
Asimismo podemos usar una variable como argumento:
\begin{verbatim}
>>> latoya = 'Dafne, es mitad laurel mitad ninfa'
>>> imprimeDoble(latoya)
Dafne, es mitad laurel mitad ninfa. Dafne, es mitad laurel mitad ninfa.
\end{verbatim}
Observe un aspecto realmente importante en este caso:
el nombre de la variable que pasamos como argumento (\texttt{latoya})
no tiene nada que ver con el nombre del par�metro (\texttt{paso}).
No importa c�mo se llamaba el valor en su lugar original (el lugar
desde donde se invoc�); aqu� en \texttt{imprimeDoble} llamamos a todo
el mundo \texttt{paso}.
\section{Las variables y los par�metros son locales}
\index{variables locales} \index{locales!variables}
Cuando crea una variable dentro de una funci�n, s�lo existe dentro
de dicha funci�n, y no puede usarla fuera de ella. Por ejemplo, la
funci�n
\begin{verbatim}
>>> def catDoble(parte1, parte2):
... cat = parte1 + parte2
... imprimeDoble(cat)
...
>>>
\end{verbatim} toma dos argumentos, los concatena y luego imprime el
resultado dos veces. Podemos llamar a la funci�n con dos cadenas:
\begin{verbatim}
>>> cantus1 = "Die Jesu domine, "
>>> cantus2 = "Dona eis requiem."
>>> catDoble(cantus1, cantus2)
Die Jesu domine, Dona eis requiem. Die Jesu domine, Dona eis requiem.
\end{verbatim} Cuando \texttt{catDoble} termina, la variable \texttt{cat}
se destruye. Si trat�semos de imprimirla, obtendr�amos un error:
\begin{verbatim}
>>> print cat
NameError: cat
\end{verbatim} Los par�metros tambi�n son locales. Por ejemplo, una vez fuera de
la funci�n \texttt{imprimeDoble}, no existe nada llamado \texttt{paso}.
Si trata de usarla, Python se quejar�.
\section{Diagramas de pila}
\label{stackdiagram}
\index{diagramas de pila}
Para mantener el rastro de qu� variables pueden usarse y d�nde, a
veces es �til dibujar un \textbf{diagrama de pila}. Como los diagramas
de estado, los diagramas de pila muestran el valor de cada variable,
pero tambi�n muestran la funci�n a la que cada variable pertenece.
Cada funci�n se representa por una caja con el nombre de la funci�n
junto a �l. Los par�metros y variables que pertenecen a una funci�n
van dentro. Por ejemplo, el diagrama de stack para el programa anterior
tiene este aspecto:
\vspace{0.1in} \centerline{\includegraphics{../illustrations/stack.eps} } \vspace{0.1in}
El orden de la pila muestra el flujo de ejecuci�n. \texttt{imprimeDoble}
fue llamado por \texttt{catDoble} y a \texttt{catDoble} lo invoc�
\texttt{\_\_main\_\_}, que es un nombre especial de la funci�n
m�s alta. Cuando crea una variable fuera de cualquier funci�n, pertenece
a \texttt{\_\_main\_\_}.
En cada caso, el par�metro se refiere al mismo valor que el argumento
correspondiente. As� que \texttt{parte1} en \texttt{catDoble} tiene
el mismo valor que \texttt{cantus1} en \texttt{\_\_main\_\_}.
Si sucede un error durante la llamada a una funci�n, Python imprime el
nombre de la funci�n y el nombre de la funci�n que la llam�,
y el nombre de la funci�n que llam� a {\em �sa}, y as� hasta
{\tt \_\_main\_\_}.
Por ejemplo, si intentamos acceder a {\tt cat} desde {\tt
imprimeDoble}, provocaremos un {\tt NameError}:
\beforeverb
\begin{verbatim}
Traceback (innermost last):
File "test.py", line 13, in __main__
catDoble(cantus1, cantus2)
File "test.py", line 5, in catDoble
imprimeDoble(cat)
File "test.py", line 9, in imprimeDoble
print cat
NameError: cat
\end{verbatim}
\afterverb
%
Esta lista de funciones de llama {\bf traceback} (traza inversa). Le dice
a usted en qu� archivo de programa sucedi� el error, y en qu� l�nea, y qu�
funciones se ejecutaban en ese momento. Tambi�n muestra la l�nea de c�digo
que caus� el error.
\index{traceback}
F�jese en la similaridad entre la traza inversa y el
diagrama de pila. No es una coincidencia.
\section{Funciones con resultado}
Seguramente ha notado ya que algunas de las funciones que estamos
usando, igual que las funciones matem�ticas, devuelven un resultado.
Otras funciones, como \texttt{nueva\_linea}, llevan a cabo una acci�n
pero no devuelven un valor. Ello suscita varias preguntas:
\begin{enumerate}
\item �Qu� sucede si llama usted a uana funci�n y no hace nada con el resultado
(es decir, no lo asigna a una variable ni lo usa como parte de una
expresi�n m�s amplia)?
\item �Qu� sucede si usa una funci�n sin resultado como parte de una expresi�n,
por ejemplo \texttt{nueva\_linea() + 7}?
\item �Se pueden escribir funciones que devuelvan resultados, o debemos limitarnos
a funcinoes simples como \texttt{nueva\_linea} e \texttt{imprimeDoble}?
\end{enumerate}
La respuesta a la tercera pregunta es {}``s�, puede escribir funciones
que devuelvan valores'', y lo haremos en el cap�tulo 5.
\begin{quote}
\emph{Como actividad final, consteste a las otras dos preguntas intentando
hacerlas en la pr�ctica. Cada vez que tenga una duda sobre lo que
es legal o ilegal en Python, perguntar al int�rprete ser� una buena
manera de averiguarlo.}
\end{quote}
\section{Glosario}
\begin{description}
\item [llamada~a~funci�n:] Una sentencia que ejecuta una funci�n. Est�
compuesta por el nombre de la funci�n m�s una lista de argumentos
encerrados entre par�ntesis.
\item [argumento:] Valor que se le pasa a una funci�n cuando se la llama.
El valor se asigna al par�metro correspondiente de la funci�n.
\item [valor~de~retorno:] Es el resultado de una funci�n. Si se usa una
llamada a funci�n a modo de expresi�n, el valor de retorno es el valor de
la expresi�n.
\item [conversi�n de tipo:] Una sentencia expl�cita que toma un valor de
un tipo y calcula el valor correspondiente de otro tipo.
\item [coerci�n:] Conversi�n tipos que ocurre autom�ticamente de acuerdo
con las reglas de coerci�n de Python.
\item [m�dulo:] Fichero que contiene una colecci�n de funciones y clases
relacionadas.
\item [notaci�n de punto:] La sintaxis para llamar a una funci�n de otro
m�dulo, especificando el nombre del m�dulo, seguido por un punto y el nombre
de la funci�n.
\item [funci�n:] Secuencia de sentencias etiquetadas que llevan a cabo determinada
operaci�n de utilidad. Las funciones pueden tomar par�metros o no,
y pueden producir un resultado o no.
\item [definici�n~de~funci�n:] Sentencia que crea una nueva funci�n, especificando
su nombre, par�metros y las sentencias que ejecuta.
\item [flujo~de~ejecuci�n:] Orden en el que se ejecutan las sentencias
durante la ejecuci�n de un programa.
\item [par�metro:]Nombre que se usa dentro de una funci�n para referirse
a el valor que se le pasa como argumento.
\item [variable~local:]variable definida dentro de una funci�n. Las variables
locales s�lo pueden usarse dentro de su funci�n.
\item [diagrama~de~pila:]Representaci�n gr�fica de una pila de funciones,
sus variables y los valores a los que se refieren.
\item [traza inversa:] (traceback en ingl�s) Una lista de las funciones en curso de
ejecuci�n, presentadas cuando sucede un error en tiempo de ejecuci�n.
\index{llamada a funci�n} \index{valor de retorno} \index{argumento}
\index{coerci�n} \index{conversi�n de tipo} \index{m�dulo} \index{funci�n}
\index {notaci�n de punto} \index{definici�n de funci�n}
\index{flujo de ejecuci�n} \index{par�metro} \index{variable local}
\index{diagrama de pila} \index {traza inversa} \end{description}
%\end{document}
" + str + "Close window