Tiza Las materias del CBC
Practicar →

Pensamiento Computacional (090) · Unidad 2 — Datos, expresiones y funciones

Funciones

Una función es un bloque con nombre que recibe datos y devuelve un resultado. return entrega el valor; print sólo lo muestra. No son lo mismo.

Practicar este tema →7 ejercicios que te corrigen paso a paso · gratis, sin cuenta

La explicación

Definir y llamar

def doble(n):          # definición
    return n * 2

resultado = doble(5)   # llamada → resultado vale 10

return contra print — la distinción que más se pregunta

print muestra. El valor aparece en pantalla y se pierde.
return entrega. El valor vuelve a quien llamó y se puede usar.

Una función con print y sin return devuelve None. Por eso esto falla:
def doble(n):
    print(n * 2)   # muestra pero no devuelve

x = doble(5)         # imprime 10
print(x + 1)         # error: None + 1
Regla práctica: si el enunciado dice "devolver" o "calcular", va return; si dice "mostrar" o "imprimir", va print. Y en la duda, return: el que llama siempre puede imprimir después, pero no puede recuperar lo que sólo se mostró.

return corta la función

En cuanto se ejecuta un return, la función termina. Lo que venga después no corre:

def signo(n):
    if n > 0:
        return "positivo"
    return "no positivo"   # sólo llega acá si n no era > 0

Varios parámetros, y devolver varias cosas

def dividir(a, b):
    return a // b, a % b

c, r = dividir(7, 2)   # c vale 3, r vale 1

El orden de los argumentos importa: dividir(7, 2) no es lo mismo que dividir(2, 7).

Por qué conviene usarlas

Una función se escribe una vez y se usa muchas. Si hay un error, se arregla en un solo lugar. Y sobre todo: le pone nombre a una idea. es_capicua(palabra) se entiende sin leer el cuerpo; las cinco líneas sueltas que hacen lo mismo, no.

Ejemplo resuelto

Una función tiene que recibir un número y devolver su valor absoluto. ¿Cuál de estas dos versiones sirve, y por qué?

Versión A:

def absoluto(n):
    if n < 0:
        print(-n)
    else:
        print(n)

Versión B:

def absoluto(n):
    if n < 0:
        return -n
    return n

Las dos "funcionan" si sólo las mirás correr, porque absoluto(-5) hace aparecer un 5 en pantalla en los dos casos. La diferencia aparece al querer usar el resultado:

total = absoluto(-5) + absoluto(3)

Con la versión A eso es None + None → error. Con la B da 8.

Fijate además que la versión B no necesita el else: si n era negativo, el return ya cortó la función y nunca se llega a la última línea. Es un patrón muy común y hace el código más plano.

El control: probá print(absoluto(-5) + 1). Si tira TypeError: unsupported operand type(s) for +: 'NoneType' and 'int', te faltó un return. Ese mensaje con NoneType casi siempre significa eso.

Dónde se cae la mayoría

Hasta acá la explicación. La práctica es la otra mitad: 7 ejercicios de este tema, en cuatro niveles, que no te dicen sólo si está bien al final sino que te corrigen en cada paso y te explican por qué. Además trae una animación que muestra la idea en movimiento.

Practicar Funciones →

Ver todos los temas de Pensamiento Computacional