4 Modulo
4 Modulo
1 Sección 1 – Funciones
4.1.1 ¿Por qué necesitamos funciones?
Hasta ahorita has implementado varias veces el uso de funciones, pero solo se
han visto algunas de sus ventajas. Solo se han invocado funciones para utilizarlas
como herramientas, con el fin de hacer la vida más fácil, y para simplificar tareas
tediosas y repetitivas.
Muy a menudo ocurre que un cierto fragmento de código se repite muchas veces
en un programa. Se repite de manera literal o, con algunas modificaciones
menores, empleando algunas otras variables dentro del programa. También ocurre
que un programador ha comenzado a copiar y pegar ciertas partes del código en
más de una ocasión en el mismo programa.
Puede ser muy frustrante percatarse de repente que existe un error en el código
copiado. El programador tendrá que escarbar bastante para encontrar todos los
lugares en el código donde hay que corregir el error. Además, existe un gran
riesgo de que las correcciones produzcan errores adicionales.
Definamos la primera condición por la cual es una buena idea comenzar a escribir
funciones propias: si un fragmento de código comienza a aparecer en más de
una ocasión, considera la posibilidad de aislarlo en la forma de una
función invocando la función desde el lugar en el que originalmente se
encontraba.
Puede suceder que el algoritmo que se desea implementar sea tan complejo que
el código comience a crecer de manera incontrolada y, de repente, ya no se puede
navegar por él tan fácilmente.
4.1.2 Descomposición
Es muy común que un programa sea tan largo y complejo que no puede ser
asignado a un solo desarrollador, y en su lugar un equipo de
desarrolladores trabajarán en el. El problema, debe ser dividido entre varios
desarrolladores de una manera en que se pueda asegurar su eficiencia y
cooperación.
Cada uno debe escribir un conjunto bien definido y claro de funciones, las cuales
al ser combinadas dentro de un módulo (esto se clarificara un poco más
adelante) nos dará como resultado el producto final.
a = int(input())
b = int(input())
c = int(input())
Para que esto funcione, dicho código debe ser invocado cada vez que se requiera.
def function_name():
cuerpo de la función
def message():
print("Ingresar valor: ")
Inicia aqui.
Termina aqui.
def message():
print("Ingresar valor: ")
print("Inicia aqui.")
message()
print("Termina aqui.")
Inicia aqui.
Ingresar valor:
Termina aqui.
print("Inicia aqui.")
message()
print("Termina aqui.")
def message():
print("Ingresar valor: ")
def message():
print("Ingresar valor: ")
message = 1
El asignar un valor al nombre message causa que Python olvide su rol anterior. La
función con el nombre de message ya no estará disponible.
print("Comienza aqui.")
def message():
print("Ingresar valor: ")
message()
print("Termina aqui.")
def message():
print("Ingresar valor: ")
message()
a = int(input())
message()
b = int(input())
message()
c = int(input())
def your_function(optional parameters):
# el cuerpo de la función
Se puede definir una función sin que haga uso de argumentos, por ejemplo:
También es posible definir funciones con argumentos, como la siguiente que contiene un
solo parámetro:
Pregunta 2: ¿Qué es lo que ocurre cuando se invoca una función antes de ser definida?
Ejemplo:
hi()
def hi():
print("hi!")
def function(parameter):
###
Recuerda que:
Esta definición especifica que nuestra función opera con un solo parámetro con el
nombre de number. Se puede utilizar como una variable normal, pero solo dentro
de la función - no es visible en otro lugar.
def message(number):
print("Ingresa un número:", number)
Si, lo es.
def message(number):
print("Ingresa un número:", number)
number = 1234
message(1)
print(number)
Ingresa un número: 1
1234
Una función puede tener tantos parámetros como se desee, pero entre más
parámetros, es más difícil memorizar su rol y propósito.
def message(what, number):
print("Ingresa", what, "número", number)
def message(what, number):
print("Ingresa", what, "número", number)
message("teléfono", 11)
message("precio", 5)
message("número", "number")
Ahora imaginemos que la función esta siendo utilizada en Hungría. En este caso, el
código sería de la siguiente manera:
def introduction(first_name, last_name):
print("Hola, mi nombre es", first_name, last_name)
introduction("Luke", "Skywalker")
introduction("Jesse", "Quick")
introduction("Clark", "Kent")
Ahora imaginemos que la función esta siendo utilizada en Hungría. En este caso, el
código sería de la siguiente manera:
def introduction(first_name, last_name):
print("Hola, mi nombre es", first_name, last_name)
introduction("Skywalker", "Luke")
introduction("Quick", "Jesse")
introduction("Kent", "Clark")
El concepto es claro - los valores pasados a los parámetros son precedidos por el
nombre del parámetro al que se le va a pasar el valor, seguido por el signo de =.
def introduction(first_name, last_name):
print("Hola, mi nombre es", first_name, last_name)
introduction(surname="Skywalker", first_name="Luke")
def adding(a, b, c):
print(a, "+", b, "+", c, "=", a + b + c)
adding(1, 2, 3)
También, se puede reemplazar la invocación actual por una con palabras clave,
como la siguiente:
adding(c = 1, a = 2, b = 3)
2 + 3 + 1 = 6
adding(3, c = 1, b = 2)
Vamos a analizarla:
el argumento (3) para el parámetro a es pasado utilizando la forma
posicional;
los argumentos para c y b son especificados con palabras clave.
3 + 2 + 1 = 6
adding(3, a = 1, b = 2)
Todo es correcto, pero el dejar solo un argumento con palabra clave es algo extraño -
¿Qué es lo que opinas?
Solo se tiene que colocar el nombre del parámetro seguido del signo de = y el
valor por predeterminada.
introduction("Jorge", "Pérez")
¿Y? No parece haber cambiado algo, pero cuando se invoca la función de una manera
inusual, como esta:
introduction("Enrique")
o así:
introduction(first_name="Guillermo")
Puedes hacerlo con más parámetros, si te resulta útil. Ambos parámetros tendrán sus
valores por predeterminada, observa el siguiente código:
def introduction(first_name="Juan", last_name="González"):
print("Hola, mi nombre es", first_name, last_name)
La salida es:
Hola, mi nombre es Juan Rodríguez
def hi(name):
print("Hola,", name)
hi("Greg")
def hi_all(name_1, name_2):
print("Hola,", name_2)
print("Hola,", name_1)
hi_all("Sebastián", "Konrad")
Ejemplo 1
def subtra(a, b):
print(a - b)
subtra(5, 2) # salida: 3
subtra(2, 5) # salida: -3
Ejemplo 2
def subtra(a, b):
print(a - b)
subtra(a=5, b=2) # salida: 3
subtra(b=2, a=5) # salida: 3
Ex. 3
def subtra(a, b):
print(a - b)
subtra(5, b=2) # salida: 3
subtra(5, 2) # salida: 3
def subtra(a, b):
print(a - b)
subtra(5, b=2) # salida: 3
subtra(a=5, 2) # Syntax Error
def name(first_name, last_name="Pérez"):
print(first_name, last_name)
name("Andy") # salida: Andy Pérez
name("Bety", "Rodríguez") # salida: Bety Rodríguez (el argumento
de palabra clave es reemplazado por "Rodríguez")
def intro(a, b="Bond"):
print("Mi nombre es", b + ".", a + ".")
intro("Susan")