Está en la página 1de 1

PYTHON 3 FOR ABSOULTE BEGINNERS

(HALL, TIM; STACEY, J-P, 2009)

Funciones

Presentado por: Arturo Guzmán Vázquez

DEFINICIÓN DE FUNCIONES def suma(x, y): Definición de la función


return x+y
*Qué entrada va a recibir
*Que salida va a regresar
print(suma(5,7)) Llamada de la función
A los datos pasados a la función se les llama parámetros, y a lo
que retorna: resultados, o salida.
R: 12
Las funciones se definen utilizando la sentencia def, seguida del
El bloque de código en la función que no se ha corrido es la
nombre de la función y una lista opcional de parámetros, al final
definición de función. Y para poder correr el código, se llama a
es necesario poner dos puntos y la siguiente línea debe estar
la función.
identada.

Parámetros formales de Argumentos de la


la función función
PARÁMETROS Y ARGUMENTOS
Los parámetros que se utilizan en la definición de la función son
def suma(x, y): print(suma(5,7)) parámetros formales, es mejor no utilizar los mismos nombres en
return x+y el programa principal.
Definción Llamada Los valores en los paréntesis al llamar la función son conocidos
como argumentos, y corresponden a los parámetros formales.
Debe ser el mismo número de argumentos que de parámetros y
deben tener el mismo orden, por eso se les conoce como
argumentos posicionales. Parámetros por defecto Argumentos con palabra
Es necesario conocer que la función va a referenciar el valor por clave
el nombre del parámetros que recibe, la variable original no
cambia. def suma(x=1, y=2):
print(suma(y=7, x=5))
Además se pueden dar valores por defecto a los parámetros y al return x+y
llamar la función también se le pueden dar valores teniendo
Definción Llamada
argumentos con palabra clave.

def collect_args(b, e, a = 432, c = 512, *args, **kwargs): Algunas veces se requiere aceptar una cantidad desconocida de
print(a, b, c, e)
argumentos, para hacerlo se llama al parámetro con un asterisco *,
print(args)
print(kwargs)
este recoge todos los argumentos posicionales restantes en una
tupla que se asigna al nombre del parámetro seguido del asterisco
args = (486, 648, 432, 512, 576, 682, 768) (*args).
kwargs = {'first': 729, 'second':546, 'third':819} Si se requiere obtener también los nombres de las palabra clave se
collect_args(*args, **kwargs) debe utilizar un doble asterisco (**kwargs)
432 486 512 648
(576, 682, 768) El orden importa por lo que es necesario poner primero los
{'second': 546, 'third': 819, 'first': 729} parámetros posicionales y después las palabras clave

DOCSTRING PARA DOCUMENTAR LA FUNCIÓN


Se espera que el Docstring tenga la siguiente estructura: def roll(sides, dice = 1):
*La primera línea debe ser una descripción corta de lo que hace la """Dice rolling simulator
función (que sea sólo una línea)
*La siguiente línea está en blanco sides: Number of sides the die has
*Después, el cuerpo del docstring debe contener una descripción de los dice: number of dice to be rolled (defaults to 1)
parámetros de la función, más extenso que la descripción de la función Returns a random number between dice and dice *
**Notas sobre el algoritmo utilizado, detalles de argumentos opcionales sides weighted towards the average. """
y palabras claves de los argumentos y sus valores de retorno; incluso se result = 0
for rolls in range(1,dice):
pueden poner excepciones y restricciones.
result += random.randint(1,sides)
return result

SCOPE (ALCANCE)
Cuando se corre un programa, el intérprete da seguimiento a
todos los nombres creados y usados por el programa; se A pesar de que se puede acceder a las variables globales desde
mantiene una tabla de símbolos que se puede ver como un adentro de las funciones, siempre se recomienda declarar cómo
diccionario en la función vars(). se usarán esas variables, utilizando la palabra reservada global.
Las que se crean en el programa principal se les conoce como Si se necesita cambiar una variable global dentro de una función,
variables globales y se pueden ver en la función globals() usar la palabra global es imperativo.
Las variables que se crean en una función se almacenan en una
tabla específica de esa función, y se le conocen como locales, se
pueden ver con la función locals()

MANIPULAR LISTAS Y DICCIONARIOS


Los parámetros se pasan por valor, por lo que no se modifica el
global_list = []
valor original. Pero en el caso de los objetos (como listas o
def modify_list(local_list): diccionarios), si se modifican dentro de una función, los cambios
local_list.extend( ['dave', 'pete', 'fred'] ) se ven reflejados fuera de ella.
Para evitar efectos extraños, se recomienda enviar y retornar
result = modify_list(global_list) tipos inmutables en las funciones, y mantener cualquier
print(global_list) #R: ['dave', 'pete', 'fred'] modificación para los tipos mutables por separado.
Como ejemplo, si se envía una lista o un diccionario a una
print(result) #R: None
función, lo que se hace es enviar un puntero a la instancia global
del objeto.

REFACTORIZAR, PROBAR Y REDUCIR REPETICIÓN


Refactorizar es el proceso de reescribir la aplicación para hacerlo El proceso de poner el código en funciones se le conoce como
más fácil de mantener o más eficiente, pero manteniendo el abstracción, y llevar ese código que trata cosas específicas al
mismo comportamiento. propósito general se le conoce como generalización, y se puede
aplicar a los procedimientos de pruebas.
Como ejemplo, las secciones de código donde tiene muchos
bloques identados anidados son siempre cantidades a ser Es necesario recordar probar el código y verificar que funcione
refactorizadas. Ayuda mucho a reducir los niveles de identación antes de refactorizarlo, sino sería perder tiempo en algo que no
en el código y suelen ser más fáciles de leer. sabemos si funciona.

Recuerda: si funciona, no le muevas :D

También podría gustarte