¡Hoy cubriremos las funciones y el alcance de las variables!
Una función es un bloque de código que solo se ejecuta cuando se llama. Puede pasar datos, conocidos como parámetros, a una función. Una función puede devolver datos como resultado.
Aquí hay un ejemplo de una función para que puedas tener una idea del formato general:
# esta es una función que toma 2 parámetros e imprime los valores
def mi_función(parámetro_a, parámetro_b): # esto se conoce como la firma de la función
print("¡Dentro de mi_función!")
print("El valor de parámetro_a es", parámetro_a)
print("El valor de parámetro_b es", parámetro_b)
Arriba hay una función definición llamada mi_función
. mi_función
toma 2 valores e imprime algunas cosas, pero solo imprime cuando se llama a la función.
A continuación se muestra un ejemplo de llamada a una función:
mi_función(6, 700000000) # llamando mi_función
Inside my_function! The value of parameter_a is 6 The value of parameter_b is 700000000
Importante: Decimos que los valores 6 y 700000000 se pasan a la función mi_función
.
def mi_función(parámetro_a, parámetro_b):
print("Dentro de mi_funcion!")
print("El valor de parámetro_a es", parámetro_a)
print("El valor de parámetro_b es", parámetro_b)
# print(f"imprimiendo parámetro_a: {parámetro_a}")
# print(f"imprimiendo parámetro_b: {parámetro_b}")
mi_función(6, 700000000)
Inside my_function! The value of parameter_a is 6 The value of parameter_b is 700000000
El error que vemos al ejecutar el código anterior es NameError: name 'parameter_a' is not defined
(Error de nombre: el nombre 'parámetro_a' no está definido). ¿Qué significa eso en este contexto? Solo un par de líneas arriba de esta celda de código imprimimos las variables parameter_a
y parameter_b
sin problemas.
¿Qué cambió?
La diferencia es que parameter_a
y parameter_b
fueron definidos dentro de mi_función
cuando lo llamamos porque les asignamos los valores 6 y 700000000, pero fuera de mi_función
, parameter_a
y parameter_b
no se les ha asignado un valor, por lo que no están definidos.
El problema que nos encontramos es que estamos tratando de usar las variables,
parameter_a
y parameter_b
, fuera de su scope (alcance). El alcance es el área del programa en la que se reconoce una variable, constante o función que tiene un nombre identificador. Dentro de mi_función
, se reconocen parameter_a
y parameter_b
, pero fuera de la función esas variables no se reconocen.
La forma en que se define el alcance de una función es mediante el uso de sangrías de la misma manera que se definen los bloques de declaraciones if
.
mi_función
.# ¡llama a mi_función con nuevos valores en esta celda!
mi_función()
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-5-28777a0eaee1> in <module>() 1 # call my_function with new values in this cell! 2 ----> 3 my_function() TypeError: my_function() missing 2 required positional arguments: 'parameter_a' and 'parameter_b'
Llama a mi_función con valores diferentes a 6 y 700000000.
Nota: No tienes que usar solo números, ¡también puedes usar palabras!
Definamos una función más interesante que realmente haga algo con los parámetros y nos devuelva (return
) ese valor.
# definición de función
def agregar_números(num_1, num_2):
return num_1 + num_2
valor_devuelto = agregar_números(2, 2) # Puede almacenar valores devueltos en variables
print("2 + 2 es igual a: ", valor_devuelto) # puede usarlos como variables normales
2 + 2 equals: 4
El código anterior nos muestra cómo podemos usar funciones para devolvernos valores después de que los llamemos. La forma en que lo hacemos es usando la palabra clave return.
# definición de función
def agregar_números(num_1, num_2, num_3): # Agregó un parámetro adicional
return num_1 + num_2
valor_devuelto = agregar_números(2, 2) # ¡¡¡Arréglenme!!!
print("El valor de retorno de agregar_números es igual a:", valor_devuelto) # puede usarlos como variables normales
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-10-da5a54723568> in <module>() 4 5 ----> 6 returned_value = add_numbers(2, 2) # Fix me!!! 7 8 print("The return value from add_numbers equals:", returned_value) # can use them just like normal variables TypeError: add_numbers() missing 1 required positional argument: 'num_3'
Usa el parámetro agregado num_3 en la función agregar_números
como quieras. Puedes usarlo en una declaración de impresión o agregarlo a la ecuación que se devuelve.
Solucionar el error.
Pista: Lee el comentario en la celda
def información_personal(edad, mes_cumpleaños, ciudad_natal, nombre):
print("¡Hola! Mi nombre es: ", nombre)
print("El mes de mi cumpleaños es:", mes_cumpleaños)
print("Mi ciudad natal es:", ciudad_natal)
print("Soy: ", edad)
# ¡Llama a la función información_personal aquí!
Hi! my name is: kass My birthday month is: blach My hometown is: oregon I am: 23
Llama a la función información_personal
con los valores correctos para que sepamos un poco más sobre ti.
Pista: El orden importa con los parámetros. Si tus valores se imprimen mal, verifica cómo pasa tus valores a la función.
# define la función mi_primera_función abajo
Arriba define la función mi_primera_función
.
Esta función tomará 0 parámetros, por lo que se verá así: def example():
(ejemplo)
Haz que esta función 'imprima' (print) la frase '¡La informática es lo mejor!' y no tenga una declaración de retorno.
Pista: ¡ten en cuenta la sangría!
¡Ejecuta la celda de código a continuación para ver si tu función funciona!
#¡Ejecútame!
mi_primera_función()
Computer Science is the best!
# ¡Tu código aquí!
# def nombre_verificar(nombre):
En la celda de arriba, escribe una función que tome una variable de nombre y verifica si el nombre es el mismo que tu nombre. if
(si) es lo mismo, return (devuelve) True, else
return (devuelve) False.
Pista: puedes comparar palabras como esta "Kassidy" == "Kassidy"
Ejecuta el código a continuación para ver si tu función nombre_verificar
funciona.
nombre = "Kassidy"
if nombre_verificar(nombre):
print("¡Los nombres son iguales!")
else:
print("No es lo mismo")
Not the same
nombre
de "Kassidy" a tu nombre para asegurarte de que la función funcione correctamente.También puedes llamar funciones desde dentro de otras funciones. A continuación se muestra un ejemplo de esto.
def llamada_función():
print("¡Otra función me está llamando!")
def función_externa(): # Lo único que hace esta función es llamar a función_llamada
función_llamada()
# Estamos llamando a la función exterior aquí
función_externa()
Some other function is calling me!
El ejemplo anterior nos muestra que las funciones pueden usar otras funciones. Exploraremos por qué esto es útil a continuación.
# Esta función verifica si alguien es un adolescente
def adolescente_verificar(edad):
if edad >= 13 and edad <= 19:
return True
else:
return False
def poder_manejar(edad):
es_adolescente = adolescente_verificar(edad)
if es_adolescente and años >= 16:
print("¡Tengo la edad suficiente para conducir y soy un adolescente!")
else:
print("¡Aún no puedes conducir o no eres un adolescente!")
def poder_votar(edad):
es_adolescente = adolescente_verificar(edad)
if es_adolescente == True and edad >= 18:
print("¡Soy un adolescente, pero tengo la edad suficiente para votar!")
más:
print("¡Supongo que no tengo la edad suficiente para votar o no soy un adolescente!")
edad = 0 #¡cambia a tu edad!
poder_manejar(edad)
Can't drive quite yet or you're not a teen!
poder_manejar
y adolescente_verificar
.edad = 0 # ¡Cámbiame a tu edad!
poder_votar(edad)
Guess I'm not old enough to vote or I'm not a teen!
poder_votar
cuando tienes una edad diferente.Usando la función adolescente_verificar
podemos hacer 2 cosas realmente importantes:
adolescente_verificar
Llamamos a la función adolescente_verificar
en poder_manejar
y en poder_votar
. Pudimos escribir el código una vez y usarlo dos veces, ¡lo cual es genial! ¡Cuanto más perezosos seamos, mejor!
import matplotlib.pyplot as plt
# ¡La siguiente función traza las calificaciones asociadas con una lista de tu elección!
# No necesitas preocuparte por este código, no se le realizarán cambios directos.
def show_ratings(names, values, label):
plt.figure(figsize=(10, 5))
plt.subplot()
plt.bar(names, values, color="springgreen")
plt.suptitle(label)
plt.show()
Arriba, tenemos una función que trazará las calificaciones de las cosas que elijamos. En el ejemplo simple a continuación, estamos usando esta función para trazar las calificaciones de los alimentos.
Importante: Ten en cuenta que estamos pasando listas a la función mostrar_calificaciones
y no números o palabras.
# ¡Ejecútame para ver las clasificaciones de programas en acción!
alimentos = ['Pizza', 'Hamburguesas', 'Brócoli']
calificaciones = [100, 10, 2]
etiqueta = "Valoraciones de alimentos"
show_ratings(alimentos, calificaciones, etiqueta)
# ¡Escribe código!
# Crea una lista de palabras que representen las cosas que deseas que se califiquen.
nombres = []
# Crea una lista de calificaciones
calificaciones = []
# Crea una etiqueta para tu gráfico de barras
etiqueta = ""
# Llama a la función show_ratings con las variables que acabas de crear
En la celda de arriba, sigue el ejemplo que está justo arriba para crear tu propio gráfico.
Importante: Recuerda llamar a la función con tus parámetros
En este punto, el poder de las funciones probablemente sea claro para ti ahora. La capacidad de escribir el código una vez y usarlo tantas veces como sea necesario es increíblemente poderosa. ¡Imagina cuántas cosas puedes calificar ahora! ¡Alimentos, películas, libros! Las posibilidades son infinitas.
# ¡Escribe el código aquí!
show_ratings
nuevamente para calificar algunas cosas de tu elección (no dudes en reutilizar el código que ya escribiste anteriormente), pero esta vez cambia las listas para que tengas 5 elementos en lugar de 3.# ¡Escribe el código aquí!
def suma_lista(números):
File "<ipython-input-106-53aa0d8dcf7a>", line 4 ^ SyntaxError: unexpected EOF while parsing
En la celda de código anterior, escribe una función que tome una lista como parámetro y agrega todos los valores en la lista. Devolver la suma.
Importante: Usa un bucle de algún tipo y escribe tu función para que la lista pueda tener cualquier longitud.
Ejecuta la siguiente celda para ver si tu función funciona.
números_de_prueba = [4, 6, 7, 8, 9]
suma_números_de_prueba = suma_lista(números_de_prueba)
print("la suma de números_de_prueba debe ser 34 y es:", suma_números_de_prueba)
the sum of test_numebrs should be 34 and is: 34
def calcular(números):
resta_total = 0
suma_total = 0
# Tu código aquí:
return (resta_total, suma_total)
suma_total
.En la misma función, escribe un código que reste todos los valores y almacena el total en resta_total
.
Pista: ¿Hay alguna función que escribiste que podría ayudarte con esta función?
Importante: ¡En Python, las funciones pueden devolver más de un valor!
números = [3.14, 6, 9, 10.0, 111, 42, 6]
resta_total, suma_total = calcular(números)
print("El total de la resta: ", resta_total)
print("El total de la suma: ", suma_total)
The total for subtraction: -187.14 The total for addition: 187.14
calcular
def lista_pares(valor_inicial, valor_final):
pares = []
# Tu código va aquí
while valor_inicial <= valor_final:
pares += [valor_inicial]
valor_inicial += 2
return pares
Arriba, define una función que devuelva una lista de todos los números pares desde el valor inicial hasta el valor final. ¡Usa un bucle!
Ejemplo:
valor_inicial = 2
valor_final = 10
pares = [2, 4, 6, 8, 10]
pares = lista_pares(2, 30)
print("Salida correcta: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30]")
print(Tu salida:", pares)
Correct Output: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30] Your Output: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30]
lista_pares
!Escribe el código para encontrar el valor máximo o mínimo de una lista de números dependiendo de un segundo parámetro que es una palabra con el valor "max" o "min". Si el segundo parámetro es "max", devuelve el valor máximo de la lista. Si el segundo parámetro es "min" devuelve el valor mínimo de la lista.
Consejos:
Importante: Si deseas llamar a una función desde encontrar_min_o_max
, debe definirse encima de ella.
# Comience aquí: define más funciones si lo deseas
def encontrar_min_o_max(números, min_o_max):
# ¡Ejecuta el código de prueba a continuación para verificar tu trabajo!
números = [5, 6, 10, 100, 99, 23, 1, 0, 55, -22]
min = encontrar_min_o_max(números, "min")
max = encontrar_min_o_max(números, "max")
print("El mínimo es:", min)
print("El máximo es:", max)
The minimum is: -22 The maximum is: 100
Escribe una función que tome una sola palabra como parámetro como "Code" (Código) y devuelva un nuevo valor como "CCoCodCode" (CCóCódCódigo).
Ejemplos:
explosión_palabras('Code') → 'CCoCodCode'
explosión_palabras('abc') → 'aababc'
explosión_palabras('ab') → 'aab'
Importante: Para resolver este problema necesitas aprender a usar len(palabra). Es bastante fácil: la forma en que funciona la función len() es que le pasas una palabra y te dice cuánto tiempo es. Ejecuta los siguientes ejemplos para ver cómo funciona en acción.
print(len("Kassidy"))
7
frase = "soy una tetera pequeña"
print(len(frase))
19
Nota: La función len() también cuenta espacios.
# ¡Completa el código aquí!
def explosión_palabras(palabra):
File "<ipython-input-163-0c4075dea0c8>", line 4 ^ SyntaxError: unexpected EOF while parsing
Computers (Computadoras)
# Ejecutar para probar explosión_palabras
print("Debe ser: CCoCodCode")
print("Es:", explosión_palabras ("Code"))
print("Debería ser: CCoComCompCompuComputComputeComputerComputersComputers!")
print("Es:", explosión_palabras("Computers!"))
Should be: CCoCodCode Is: CCoCodCode Should be: CCoComCompCompuComputComputeComputerComputersComputers! Is: CCoComCompCompuComputComputeComputerComputersComputers!