edubun
Español

Escribir tus propias funciones

Una función que termina sin return devuelve None, y por eso print(print("hi")) muestra hi y luego None.

Dos funciones que se ven iguales en pantalla

La mayoría de los principiantes cree que mostrar un valor y devolverlo son lo mismo. Aquí hay dos funciones que parecen «dar» el área de un rectángulo. def inicia la definición de una función: un nombre, las entradas entre paréntesis, dos puntos y un cuerpo con sangría. Ejecuta el programa y las dos líneas de salida se ven iguales.

def show_area(w, h):
    print(w * h)

def area(w, h):
    return w * h

show_area(4, 3)
print(area(4, 3))
Salida
12
12

Ahora intenta usar los resultados en un cálculo. La diferencia aparece enseguida.

def show_area(w, h):
    print(w * h)

def area(w, h):
    return w * h

a = show_area(4, 3)
b = area(4, 3)
print(a, b)
print(b * 2)
Salida
12
None 12
24

show_area imprime 12 en la pantalla y termina. No devuelve nada, y una función que no devuelve nada retorna el valor especial None. Así que a es None. area no imprime nada; devuelve 12 a la línea que la llamó, y ese 12 se puede guardar, imprimir o duplicar. Imprimir es para las personas que miran la pantalla. Devolver es para el resto del programa. Si quieres usar un resultado más tarde, devuélvelo.

Una función recibe argumentos, ejecuta su cuerpo con ellos y devuelve un valor con return. area(4, 3) se convierte en 12 dondequiera que esté escrita.

Los parámetros son los nombres, los argumentos son los valores

En def area(w, h):, w y h son parámetros: nombres que existen solo dentro de la función. En area(4, 3), 4 y 3 son argumentos: los valores que llenan esos nombres en esa llamada. Se emparejan por posición, así que el primer argumento va al primer parámetro. Si llamas a la función con un número equivocado de argumentos, Python se detiene con un TypeError que nombra el parámetro que falta.

Un parámetro puede tener un valor predeterminado, que se escribe con = en la definición. Quien llama puede omitir ese argumento, y se usa el valor predeterminado. El tutorial de Python muestra los valores predeterminados en su sección sobre cómo definir funciones, y están en todas partes en las funciones integradas. print mismo tiene uno: su parámetro end es por defecto un salto de línea.

def greet(name, greeting="Hello"):
    return f"{greeting}, {name}!"

print(greet("Mina"))
print(greet("Jun", "Hi"))
print("no new line", end=" ")
print("here")
Salida
Hello, Mina!
Hi, Jun!
no new line here

return termina la función de inmediato

Una función se detiene en el primer return que alcanza, aunque haya más líneas debajo. Eso hace de los retornos tempranos una forma ordenada de tratar casos especiales. La función de abajo usa la regla de la entrada de la unidad sobre if, ahora empaquetada para que cualquier parte de un programa pueda pedir un precio.

def ticket_price(age):
    if age < 7:
        return 0
    if age <= 18:
        return 3000
    return 5000

family = [40, 15, 5]
total = 0
for age in family:
    total += ticket_price(age)
print(total)
Salida
8000

Las variables creadas dentro de una función son locales: existen mientras la función se ejecuta y desaparecen cuando termina. Una variable llamada total dentro de una función no tiene nada que ver con un total de fuera. Eso permite reutilizar una función sin preocuparte de qué nombres usa el resto del programa.

defInicia una definición de función
parámetroUn nombre en la definición: w en def area(w, h)
argumentoUn valor que se pasa en una llamada: 4 en area(4, 3)
returnDevuelve un valor y termina la función
NoneLo que devuelve una función que no tiene return
variable localUna variable que existe solo dentro de una función
  1. ¿Qué imprime esto?
    def double(x):
        return x * 2
    
    print(double(7))
  2. ¿Qué imprime esto?
    def hello():
        print("hi")
    
    result = hello()
    print(result)
    • hi
      hi
    • hi
      None
    • None
    • hi
  3. ¿Qué imprime esto?
    def add(a, b):
        return a + b
    
    print(add(2, 3) * add(1, 1))
  4. ¿Qué imprime esto?
    def f(x):
        return x + 1
        print("never")
    
    print(f(1))
  5. ¿Qué imprime esto?
    def greet(name, greeting="Hello"):
        return greeting + " " + name
    
    print(greet("Bo"))
  6. ¿Qué imprime esto?
    def sign(n):
        if n > 0:
            return "plus"
        if n < 0:
            return "minus"
        return "zero"
    
    print(sign(-4), sign(0))
  7. ¿Qué imprime esto?
    print("a", end="-")
    print("b")
  8. ¿Qué imprime esto?
    def total_of(nums):
        t = 0
        for n in nums:
            t += n
        return t
    
    print(total_of([4, 5, 6]))
  9. En def area(w, h):, ¿cómo se llaman w y h?
    • Argumentos
    • Parámetros
    • Valores de retorno
    • Palabras clave
  10. Pon las líneas en orden para que el programa imprima 25.
    Salida
    25
Errores frecuentes
  • «Una función que imprime la respuesta la ha devuelto». Imprimir solo muestra el valor. La función sigue devolviendo None, así que x = show_area(4, 3) deja x como None y x * 2 se detiene con TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'.
  • «Puedo llamar a una función en una línea anterior a donde la defino». Python se ejecuta desde arriba, así que en ese punto el nombre aún no existe: NameError: name 'area' is not defined. Pon el def antes de la primera llamada.
  • «Omitir un argumento simplemente lo deja en cero». Sin un valor predeterminado, Python se detiene: area(4) da TypeError: area() missing 1 required positional argument: 'h'.
Nota para docentesLa confusión entre print y return es el malentendido más común en esta etapa, y se esconde porque la pantalla se ve idéntica. Haz que los estudiantes guarden el resultado en una variable y lo usen en un segundo cálculo; el None aparece de inmediato. El lenguaje ayuda: di que una función «devuelve» un valor, y reserva «muestra» para print. El currículo coreano de informática de secundaria une el uso de funciones con encontrar y corregir errores, así que los errores de argumento que falta y de llamada antes del def son buen material para un breve ejercicio de depuración.
Ideas clave
  • def nombre(parámetros): inicia una función; el cuerpo lleva sangría.
  • return devuelve un valor y termina la función.
  • print muestra un valor; no lo devuelve. Sin return, el resultado es None.
  • Los argumentos llenan los parámetros por posición; los valores predeterminados llenan los que faltan.
  • Las variables creadas dentro de una función son locales a ella.
Fuentes de este curso (6)
  • Python Software Foundation, The Python Tutorial for Python 3.12 (docs.python.org/3.12/tutorial: 2 Using the Python Interpreter, 3 An Informal Introduction to Python (numbers, text, lists), 4 More Control Flow Tools (if, for, range, break and continue, defining functions, default argument values, 4.10 coding style: 4-space indentation), 5 Data Structures (list methods, 5.5 dictionaries, insertion order), 8 Errors and Exceptions (syntax errors, exceptions, reading the traceback, handling exceptions), 15 Floating-Point Arithmetic (0.1 + 0.2))
  • Built-in Functions (docs.python.org/3.12/library/functions.html: print, input, len, int, float, str, type, round (round half to even: round(0.5) and round(-0.5) are 0, round(1.5) is 2), range, sum, min, max, sorted)
  • Built-in Types (str methods upper, lower, replace, strip; dict.get; list.append, pop, remove, sort returning None)
  • General Python FAQ (docs.python.org/3.12/faq/general.html: Guido van Rossum began Python in the 1989 Christmas holidays, posted it to USENET in February 1991, named it after Monty Python's Flying Circus)
  • Curriculum for the Korean pages: 교육부 고시 제2022-33호 [별책 10] 정보과 교육과정 (PDF read 2026-10-19: 중학교 정보 [9정03-05] 리스트 등 데이터를 순차적으로 저장하는 구조, [9정03-06] 논리 연산과 중첩 제어 구조, [9정03-07] 함수 활용과 디버거로 오류 수정, [9정03-08] 실생활 문제를 프로그래밍으로 해결, 적용 시 고려 사항 「학생의 수준을 고려하여 적합한 프로그래밍 언어를 선정」; 고등학교 정보 [12정03-04] 자료형, [12정03-05] 표준입출력, [12정03-07] 제어 구조)
  • Bug story only: Smithsonian National Museum of American History, Log Book With Computer Bug, 1947, Harvard Mark II, "first actual case of bug being found", probably not Hopper's log book (americanhistory.si.edu/collections/object/nmah_334663, read 2026-10-19)

Fecha de consulta: 2026-10-19