EIB · Tema 4: Funciones avanzadas en Python

Tema 4: Funciones avanzadas en Python es uno de los temas públicos de Estructuras de Control en Python dentro de TesIA Exam. Aquí puedes localizar preguntas indexables, tests, cuestionarios y exámenes que lo incluyen.

15 preguntas 1 exámenes Material de estudio público

Cómo estudiar este tema

Primero lee el resumen completo para fijar el marco del tema. Después usa la guía de estudio para ordenar el repaso y termina con las preguntas, revisando siempre la respuesta correcta y la explicación breve.

Esta página pública está pensada para consulta y repaso. Para practicar con progreso, favoritos y modo examen puedes continuar dentro de TesIA Exam con los mismos exámenes relacionados.

Material de estudio disponible

Aquí se muestran el resumen completo, la guía completa y los recursos públicos enlazados del tema para que la página sea útil también fuera de la app.

Resumen del tema

Informe Técnico: Funciones y Modularidad en Python

Resumen Ejecutivo

Este documento sintetiza los conceptos fundamentales y avanzados sobre el uso de funciones en Python, centrándose en la modularidad como principio de diseño esencial. La transición hacia un código modular permite dividir programas complejos en partes autónomas, facilitando la reutilización, el mantenimiento y el trabajo colaborativo. El análisis abarca desde la definición básica de funciones y la gestión técnica de parámetros y argumentos (incluyendo el empaquetado *args y **kwargs), hasta técnicas sofisticadas como los decoradores, las funciones lambda y el manejo del ámbito de las variables (regla LEGB). El objetivo primordial es implementar el principio DRY (Don't Repeat Yourself) para lograr un software escalable, legible y con menor riesgo de errores.


--------------------------------------------------------------------------------


1. Modularidad: El Principio de Diseño

La modularidad consiste en dividir un programa en partes más pequeñas llamadas módulos, donde cada uno asume una tarea específica. Python permite que esta estructura lógica mejore la organización del proyecto.

Ventajas de la Modularidad

Ventaja Descripción
Independencia Cada módulo funciona de forma autónoma.
Reutilización Los componentes pueden usarse en diferentes proyectos.
Mantenibilidad Facilita la actualización y escalabilidad sin afectar a todo el sistema.
Colaboración Permite que múltiples desarrolladores trabajen simultáneamente.
Aislamiento de Errores Reduce el riesgo al confinar problemas en módulos específicos.


--------------------------------------------------------------------------------


2. El Concepto y Tipos de Función

Técnicamente, una función encapsula una tarea. Se describe como una "sub-receta" que evita reescribir pasos constantemente.

Flujo de Trabajo de una Función

1. Entrada: Parámetros que recibe la función.
2. Procesamiento: Lógica interna y ejecución del código.
3. Salida: Valor de retorno (return), opcional. Si no se especifica, Python devuelve None.

Categorías de Funciones

* Definidas por el Usuario: Creadas con la palabra reservada def.
* Integradas (Built-in): Predefinidas en el lenguaje (ej. print(), len(), sum()).
* Lambda (Anónimas): Funciones de una sola línea sin nombre definido.
* Recursivas: Funciones que tienen la capacidad de llamarse a sí mismas.


--------------------------------------------------------------------------------


3. Definición y Sintaxis de Funciones Propias

Para declarar una función, se utiliza la palabra reservada def seguida del nombre en formato snake_case.

Elementos de la Definición

* Docstrings: Breve explicación encerrada en triples comillas sobre qué hace la función. Es vital para la legibilidad.
* Cuerpo: Código identado (habitualmente 4 espacios).
* Dos puntos (:): Obligatorios tras los paréntesis de la definición.

Parámetros vs. Argumentos

* Parámetros: Variables que se escriben en la definición de la función (los valores esperados).
* Argumentos: Valores reales que se envían a la función cuando esta es invocada.


--------------------------------------------------------------------------------


4. Gestión Avanzada de Argumentos

Python ofrece flexibilidad en la forma en que las funciones reciben datos, permitiendo diferentes tipos de argumentos:

Tipos de Argumentos

1. Posicionales: El orden es crítico; los valores se asignan a los parámetros según su posición.
2. Nominales (Keyword): El orden no importa, ya que se indica explícitamente parámetro = valor. Esto aumenta la legibilidad en funciones con muchos parámetros.
3. Por Defecto: El parámetro tiene un valor prefijado en la definición, eliminando la obligatoriedad de pasar un argumento.

Regla de Oro: Los argumentos posicionales deben preceder siempre a los argumentos por nombre para evitar errores de sintaxis (SyntaxError).

Empaquetado y Desempaquetado

El uso de los operadores asterisco permite manejar volúmenes variables de datos:

* *args (Empaquetado Posicional): Captura argumentos adicionales en una tupla.
* **kwargs (Empaquetado Nominal): Captura argumentos con nombre en un diccionario.
* Operadores * y ** (Desempaquetado): Permiten dividir listas/tuplas o diccionarios en argumentos individuales al llamar a una función.


--------------------------------------------------------------------------------


5. Retorno de Valores y Resultados Múltiples

Aunque técnicamente Python devuelve un único objeto, permite retornar múltiples valores separados por comas, lo cual resulta en una tupla.

* Desempaquetado de Retorno: Se pueden asignar los resultados directamente a múltiples variables (ej. bajo, alto, media = analizar_numeros(lista)).
* Ignorar Valores: Si solo interesa un valor específico de los devueltos, se pueden usar guiones bajos (_) para ignorar el resto.


--------------------------------------------------------------------------------


6. Técnicas Especializadas: Decoradores y Lambdas

Decoradores (@)

Un decorador es una función que "envuelve" a otra para extender su comportamiento (como añadir logging o medir el tiempo de ejecución) sin modificar su código original.

* Wrapper: Es la función interna dentro del decorador que ejecuta la lógica extra antes y/o después de la función original.

Funciones Lambda

Son funciones anónimas de una sola línea con las siguientes características:

* No requieren def ni nombre.
* Contienen una única expresión.
* El resultado de dicha expresión se retorna automáticamente.


--------------------------------------------------------------------------------


7. Ámbito de Variables y Regla LEGB

El ámbito o scope define dónde una variable es accesible. Python sigue la jerarquía LEGB:

1. Local (L): Dentro de la función actual.
2. Enclosing (E): En funciones anidadas (el ámbito de la función "padre").
3. Global (G): Nivel superior del programa o módulo.
4. Built-in (B): Funciones y nombres predefinidos del lenguaje.

Palabras Clave de Ámbito

* global: Indica que se debe usar y modificar una variable definida en el nivel superior, no crear una local.
* nonlocal: Utilizada en funciones anidadas para modificar una variable de la función exterior.

Nota de Buenas Prácticas: Se debe evitar el uso abusivo de variables globales. Es preferible pasar datos mediante parámetros y recibirlos mediante return.


--------------------------------------------------------------------------------


8. Documentación e Integración

El código "autodocumentado" se logra mediante nombres descriptivos y el uso de Docstrings. Para proyectos de mayor escala, se recomienda el uso de herramientas como Sphinx para generar documentación técnica profesional a partir de estos comentarios estructurados.

Guía de estudio

Guía de Estudio: Funciones Avanzadas en Python

Este documento constituye una guía detallada para el estudio de la programación modular y el uso de funciones en el lenguaje Python, basada en los conceptos de modularidad, sintaxis de funciones, gestión de argumentos, decoradores y ámbitos de variables.


--------------------------------------------------------------------------------


I. Cuestionario de Repaso (Quiz)

A continuación, se presentan diez preguntas de respuesta corta diseñadas para evaluar la comprensión de los conceptos fundamentales.

1. ¿En qué consiste el principio de modularidad en la programación?
2. Explique la diferencia técnica entre un parámetro y un argumento.
3. ¿Cuál es la regla de oro al combinar argumentos posicionales y argumentos por nombre en una llamada a función?
4. ¿Qué ocurre en una función de Python si no se incluye una sentencia return explícita?
5. ¿Para qué se utiliza el operador *args en la definición de una función?
6. ¿Cómo maneja Python internamente el retorno de múltiples valores en una sola función?
7. Defina qué es un decorador y cómo se identifica en el código.
8. ¿Qué significa la regla LEGB en el contexto del ámbito (scope) de variables?
9. Describa las tres características clave de las funciones Lambda.
10. ¿Cuál es la función de la palabra reservada nonlocal?


--------------------------------------------------------------------------------


II. Clave de Respuestas

1. Es un principio de diseño que consiste en dividir un programa en partes más pequeñas y autónomas llamadas módulos. Cada módulo se encarga de una tarea específica, lo que facilita la organización, el mantenimiento y la escalabilidad del código.
2. Los parámetros son las variables que se escriben en la definición de la función (los valores esperados). Los argumentos son los valores reales que se envían a la función en el momento en que esta es invocada.
3. La regla establece que los argumentos posicionales deben colocarse siempre antes que los argumentos por nombre (keyword arguments). De lo contrario, el intérprete de Python lanzará un error de sintaxis (SyntaxError).
4. Si no hay un return explícito, la función siempre devolverá el valor None de forma automática tras completar la ejecución de su bloque de código identado.
5. Se utiliza para el empaquetado posicional, permitiendo que la función reciba un número variable de argumentos adicionales, los cuales se almacenan en una tupla para su procesamiento interno.
6. Python empaqueta todos los valores separados por comas en un único objeto de tipo tupla. Al recibir el resultado, el programador puede desempaquetarlos en variables individuales o tratar el resultado como una sola tupla.
7. Un decorador es una función que envuelve a otra para extender su comportamiento sin modificar su código original. En Python, se identifican visualmente mediante el símbolo @ colocado justo encima de la definición de la función.
8. Es el orden de prioridad que sigue Python para buscar el significado de una variable: primero en el ámbito Local, luego en el Enclosing (funciones anidadas), seguido del Global y finalmente en el Built-in (funciones predefinidas).
9. Las funciones lambda son anónimas (no requieren nombre), contienen una única expresión y retornan automáticamente el resultado de dicha expresión sin necesidad de usar la palabra return.
10. Se utiliza en funciones anidadas para indicar que se debe utilizar una variable que pertenece a la función "padre" o externa, evitando que se cree una nueva variable local en la función interna.


--------------------------------------------------------------------------------


III. Temas para Desarrollo (Ensayos)

Propuesta de temas para un análisis profundo del contenido:

1. La Modularidad como Pilar del Desarrollo de Software Moderno: Analice cómo la independencia de módulos y la reutilización de código impactan en el trabajo en equipo y en la reducción de riesgos de errores en proyectos de gran escala.
2. Flexibilidad en la Invocación de Funciones: Compare las ventajas de los argumentos posicionales frente a los nominales, y discuta cómo el uso de valores por defecto mejora la usabilidad de las funciones.
3. Mecanismos de Empaquetado y Desempaquetado con Asteriscos: Explique detalladamente el funcionamiento de *args y **kwargs, analizando su importancia en la creación de decoradores y en la integración con APIs o librerías externas.
4. Gestión de Ámbitos y Buenas Prácticas: Evalúe los riesgos de abusar de las variables globales y cómo el uso correcto de parámetros y retornos contribuye a la creación de código más limpio y fácil de depurar.
5. Extensibilidad mediante Decoradores: Desarrolle el concepto de funciones que reciben funciones, explicando cómo los "wrappers" permiten añadir funcionalidades como el registro de tiempo de ejecución o el control de acceso de forma elegante.


--------------------------------------------------------------------------------


IV. Glosario de Términos Clave

Término Definición
Ámbito (Scope) Sección de un programa donde una variable tiene significado y puede ser utilizada.
Argumento Valor real enviado a una función al invocarla.
Built-in Funciones o ámbitos predefinidos integrados directamente en el lenguaje Python.
Docstring Breve explicación o documentación de lo que hace una función, escrita entre triples comillas.
DRY (Don't Repeat Yourself) Principio que aboga por evitar la repetición de código mediante el uso de funciones.
Empaquetado Técnica que usa * o ** para agrupar múltiples argumentos en tuplas o diccionarios.
Función Lambda Función anónima de una sola línea que se define para tareas rápidas y sencillas.
Global Ámbito de variables definido en el nivel superior del programa, accesible desde cualquier parte.
Indentación Espaciado (generalmente 4 espacios) obligatorio en Python para delimitar el cuerpo de una función.
Modularidad División de un programa en módulos autónomos, organizados y fáciles de mantener.
Parámetro Variable definida en la firma de una función que espera recibir un valor.
Return Sentencia que devuelve un resultado procesado al llamador de la función.
Snake_case Estilo de escritura recomendado para nombres de funciones (palabras en minúsculas separadas por guiones bajos).
Wrapper Función interna en un decorador que "envuelve" la ejecución de la función original para añadirle lógica extra.

Preguntas, respuestas y explicaciones del tema

Listado público sin duplicados de las preguntas del tema, con su respuesta correcta y una explicación breve para facilitar el estudio y el repaso desde buscadores.

#1

Pregunta 3. Selecciona los tipos válidos de argumentos que admite Python

  1. A) Argumentos nominales (keywords)
  2. B) Argumentos de puntero de memoria directa
  3. C) Argumentos por defecto
  4. D) Argumentos posicionales.
Respuesta correcta
  • A) Argumentos nominales (keywords)
  • C) Argumentos por defecto
  • D) Argumentos posicionales.
Explicación:

La respuesta correcta es A, C y D. Python permite definir funciones con argumentos que se pasan por su posición, por su nombre (keywords) o que tienen un valor predefinido si se omiten.

#2

Pregunta 8. Según el ámbito, las variables pueden ser

  1. A) Globales
  2. B) Privadas del sistema operativo
  3. C) Temporales de hardware
  4. D) Locales
Respuesta correcta

A) Globales

Explicación:

La respuesta correcta es A. La respuesta correcta es Globales y Locales. En Python, el ámbito define la visibilidad de una variable: las locales existen dentro de funciones y las globales en todo el módulo.

#3

Pregunta 6. Empareja el concepto con su definición

Tipo: relacionar columnas.

Columna A

  • Docstrings
  • Argumento
  • Wrapper
  • Recursión

Columna B

  • Documentación integrada
  • Valor enviado a la función
  • Función que envuelve a otra
  • Función que se llama a sí misma
Respuesta correcta
  • Docstrings -> Documentación integrada
  • Argumento -> Valor enviado a la función
  • Wrapper -> Función que envuelve a otra
  • Recursión -> Función que se llama a sí misma
Explicación:

La respuesta correcta relaciona los términos técnicos con su función dentro del lenguaje. Los Docstrings sirven para documentar, los argumentos para pasar datos y la recursión para la auto-invocación lógica. El término 'wrapper' es fundamental en el estudio de decoradores, ya que es la función encargada de añadir funcionalidad extra.

#4

Pregunta 7. ¿Qué elementos forman parte de la cabecera o firma de la función

  1. A) Nombre de la Función
  2. B) bloque de código indentado
  3. C) La documentación docstring
  4. D) Lista de parámetros
Respuesta correcta
  • A) Nombre de la Función
  • D) Lista de parámetros
Explicación:

La respuesta correcta es A y D. La firma o cabecera de una función se define en la línea del 'def' y consta del identificador (nombre) y los paréntesis con sus parámetros.

#5

Pregunta 14. Un decorador típico consta de

  1. A) Un bucle while infinito
  2. B) Una función exterior que recibe la función original
  3. C) Una función interna (wrapper) que añade la lógica
  4. D) Una variable global llamada decorate
Respuesta correcta
  • B) Una función exterior que recibe la función original
  • C) Una función interna (wrapper) que añade la lógica
Explicación:

La respuesta correcta es B y C. La estructura estándar implica una función que toma la original y dentro de ella define un 'wrapper' que ejecuta la lógica extra y llama a la original.

#6

Pregunta 11. En la definición de funcion(*args, **kwargs), ¿qué tipo de estructura de datos almacena '*args'?

  1. A) Una tupla
  2. B) Un conjunto (set)
  3. C) Una lista mutable
  4. D) Un diccionario
Respuesta correcta

A) Una tupla

Explicación:

La respuesta correcta es A. La respuesta correcta es Una tupla. El operador asterisco (*) empaqueta los argumentos posicionales variables en una estructura inmutable llamada tupla.

#7

Pregunta 10. Aunque no se detalla a fondo, si una función usa 'yield' en lugar de 'return' se convierte en:

  1. A) Una función decoradora
  2. B) Un método estático
  3. C) Una función lambda
  4. D) Un generador
Respuesta correcta

D) Un generador

Explicación:

La respuesta correcta es D. La respuesta correcta es Un generador. La palabra clave 'yield' suspende la ejecución de la función y devuelve un valor, permitiendo que la función se reanude más tarde desde donde se quedó.

#8

Pregunta 4. Empareja la palabra clave con su efecto:

Tipo: relacionar columnas.

Columna A

  • global
  • lambda
  • return
  • nonlocal

Columna B

  • Permite modificar variables del módulo
  • Define una función de una sola línea
  • Devuelve un valor de la función
  • Permite modificar variables de funciones externas
Respuesta correcta
  • global -> Permite modificar variables del módulo
  • lambda -> Define una función de una sola línea
  • return -> Devuelve un valor de la función
  • nonlocal -> Permite modificar variables de funciones externas
Explicación:

La respuesta correcta vincula cada palabra clave con su ámbito de actuación específico. 'global' se usa para variables del módulo, mientras que 'nonlocal' actúa sobre variables en funciones anidadas. 'lambda' crea funciones anónimas rápidas y 'return' es la sentencia estándar para enviar un resultado al exterior. Es vital distinguir entre el ámbito global y el ámbito de cierre (closure) manejado por 'nonlocal'.

#9

Pregunta 15. En Sphinx (RST), ¿cuáles son etiquetas válidas?

  1. A) : param:
  2. B) : return:
  3. C) @author
  4. D) : raises:
Respuesta correcta

A) : param:

Explicación:

La respuesta correcta es A. La respuesta correcta es: param: (y aunque el examen muestra varias, se infiere el formato RST). Sphinx utiliza el formato de dos puntos para definir campos como ': param: ', ': return: ' o ': raises: '.

#10

Pregunta 13. Para qué se utiliza la palabra clave 'nonlocal'?

  1. A) Para modificar una variable en el ámbito de la función exterior inmediata (en cierres)
  2. B) Para importar módulos de carpetas superiores
  3. C) Para declarar que una función no devuelve ningún valor
  4. D) Para acceder a una variable global desde una función anidada.
Respuesta correcta

A) Para modificar una variable en el ámbito de la función exterior inmediata (en cierres)

Explicación:

La respuesta correcta es A. La respuesta correcta es Para modificar una variable en el ámbito de la función exterior inmediata. 'nonlocal' permite que una función anidada reasigne un valor a una variable que pertenece a la función que la contiene.

#11

Pregunta 9. Las funciones lambda pueden contener bloques if-else complejos con múltiples líneas

  1. A) Verdadero
  2. B) Falso
Respuesta correcta

B) Falso

Explicación:

La respuesta correcta es B. also. Por diseño, las funciones lambda en Python están limitadas a una única expresión y no pueden contener sentencias de varias líneas.

#12

Pregunta 2. ¿Qué directiva de Sphinx se usa para resaltar una advertencia en la documentación?

  1. A) warning
  2. B) danger
  3. C) caution
  4. D) attention
Respuesta correcta

A) warning

Explicación:

La respuesta correcta es A. La respuesta correcta es warning. Sphinx utiliza directivas de reStructuredText (reST) para crear bloques de avisos visuales, siendo '.. warning:: ' la específica para advertencias de seguridad o de uso.

#13

Pregunta 1. Cuál es el límite por defecto aproximado de recursividad en Python

  1. A) Infinito, depende de la RAM
  2. B) 100 llamadas
  3. C) 1000 llamadas.
  4. D) 500 llamadas
Respuesta correcta

C) 1000 llamadas.

Explicación:

La respuesta correcta es C. La respuesta correcta es 1000 llamadas. Python establece este límite de seguridad para evitar que una función recursiva mal diseñada agote la memoria de la pila (stack) y provoque un cierre inesperado del intérprete.

#14

Pregunta 12. Un decorador modifica permanentemente el código fuente de la función original

  1. A) Verdadero
  2. B) Falso
Respuesta correcta

B) Falso

Explicación:

La respuesta correcta es B. also. Los decoradores no alteran el archivo.py ni el código interno de la función, sino que la envuelven en otra función en tiempo de ejecución.

#15

Pregunta 5. Una función recursiva siempre es más eficiente en memoria que un bucle tradicional

  1. A) Verdadero
  2. B) Falso
Respuesta correcta

B) Falso

Explicación:

La respuesta correcta es B. also. Cada llamada recursiva añade una nueva capa a la pila de llamadas (stack frame), lo que consume memoria adicional de forma lineal.

Exámenes que incluyen este tema

Practicar este tema en TesIA Exam

Abre la app para entrenar este contenido en modo estudio o examen y guardar tu progreso.

Abrir TesIA Exam