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))12
12Ahora 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)12
None 12
24show_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.
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")Hello, Mina!
Hi, Jun!
no new line herereturn 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)8000Las 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.
| def | Inicia una definición de función |
| parámetro | Un nombre en la definición: w en def area(w, h) |
| argumento | Un valor que se pasa en una llamada: 4 en area(4, 3) |
| return | Devuelve un valor y termina la función |
| None | Lo que devuelve una función que no tiene return |
| variable local | Una variable que existe solo dentro de una función |
- ¿Qué imprime esto?
def double(x): return x * 2 print(double(7)) - ¿Qué imprime esto?
def hello(): print("hi") result = hello() print(result)hi
hihi
NoneNonehi
- ¿Qué imprime esto?
def add(a, b): return a + b print(add(2, 3) * add(1, 1)) - ¿Qué imprime esto?
def f(x): return x + 1 print("never") print(f(1)) - ¿Qué imprime esto?
def greet(name, greeting="Hello"): return greeting + " " + name print(greet("Bo")) - ¿Qué imprime esto?
def sign(n): if n > 0: return "plus" if n < 0: return "minus" return "zero" print(sign(-4), sign(0)) - ¿Qué imprime esto?
print("a", end="-") print("b") - ¿Qué imprime esto?
def total_of(nums): t = 0 for n in nums: t += n return t print(total_of([4, 5, 6])) - En def area(w, h):, ¿cómo se llaman w y h?
- Argumentos
- Parámetros
- Valores de retorno
- Palabras clave
- Pon las líneas en orden para que el programa imprima 25.Salida
25
- «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'.
- 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