Equivalencia desde Kotlin
Comportamiento como valor
CercanaPython vincula el nombre declarado con un objeto función; ese objeto puede pasarse como argumento. Las anotaciones de tipo son opcionales en tiempo de ejecución.
Referencia Kotlin: Declarar una operación reutilizable y recibir otra operación como valor.
- Mecanismo
defpara declarar funciones yCallablepara documentar la firma esperada.- Idea conservada
- La transformación se recibe como valor y se invoca dos veces sobre el mismo argumento; quien la declara no necesita conocer
apply_twice. - Riesgo de diseño
- Usar un valor mutable como argumento por omisión y esperar que se cree de nuevo en cada llamada.
- Recomendación
- Usa anotaciones para comunicar la firma pública y
Nonecomo centinela para valores mutables por omisión. - Convención del curso
- Anota la firma pública y evita valores mutables como argumento por omisión.
- Mecanismo del lenguaje
defy expresiones lambda.- Biblioteca estándar
collections.abc.Callablepara anotar la firma esperada.
Diferencias relevantes
- La indentación delimita el cuerpo de la función.
Callabledocumenta la intención para herramientas de tipos, pero Python no la impone automáticamente al ejecutar.
La función recibida se anota como Callable.
fun applyTwice(
value: Int,
transform: (Int) -> Int,
): Int = transform(transform(value))
val result = applyTwice(3) { it + 1 } // 5from collections.abc import Callable
def apply_twice(value: int, transform: Callable[[int], int]) -> int:
return transform(transform(value))
result = apply_twice(3, lambda number: number + 1) # 5Otra forma de recibir comportamiento: un predicado para filtrar una lista.
def keep(xs: list[int], p: Callable[[int], bool]) -> list[int]:
return [x for x in xs if p(x)]