Estructura tu código en funciones reutilizables, domina los valores por defecto y comprende el ámbito de las variables.
Abrir esta lección en KodokonYa sabes escribir bucles y condiciones; ahora es momento de estructurar tu código. Una función aísla una tarea concreta detrás de un nombre claro: la escribes una vez, la pruebas una vez, la llamas en todas partes. def declara la función, los parámetros reciben los valores de entrada y return devuelve el resultado a quien la llamó. Recuerda algo que a menudo se pasa por alto: una función sin return devuelve None.
def net_price(price, tax_rate):
total = price * (1 + tax_rate)
return round(total, 2)
result = net_price(100, 0.2)
print(result) # 120.0Los valores por defecto hacen que una función sea flexible sin multiplicar variantes: decláralos después de los parámetros obligatorios. Al llamarla, los argumentos con nombre (currency="USD") documentan tu intención. En código profesional, se usan en cuanto una función tiene más de dos parámetros: la llamada se lee con claridad sin necesidad de abrir la definición.
def format_price(amount, currency="EUR", digits=2):
return f"{amount:.{digits}f} {currency}"
print(format_price(19.9)) # 19.90 EUR
print(format_price(19.9, currency="USD")) # 19.90 USD
print(format_price(19.9, digits=0)) # 20 EURdef add_item(item, items=None):
if items is None:
items = []
items.append(item)
return items
print(add_item("pen")) # ['pen']
print(add_item("book")) # ['book']El ámbito determina dónde existe una variable. Una variable creada dentro de una función es local: desaparece cuando termina la llamada. Una función puede leer una variable global, pero cualquier asignación crea una nueva variable local - la global queda intacta. Buen hábito: en lugar de modificar variables globales, pasa parámetros y devuelve resultados; tu código se vuelve predecible y testeable.
rate = 0.2
def apply_tax(price):
return round(price * (1 + rate), 2)
def set_rate(new_rate):
rate = new_rate # local variable, no effect
print(apply_tax(100)) # 120.0
set_rate(0.1)
print(apply_tax(100)) # 120.0, the global is untouched