Saltar a contenido

9. Funciones II#

(★☆☆, ★★☆, ★★★) Esta notación indica la dificultad de cada ejercicio, de menor a mayor.

Scoping#

  1. ★☆☆ ¿Qué imprime del siguiente programa?

    def f(x):
        x = x + 1
        return x
    
    x = 3
    print(f(x))
    print(x)
    
  2. ★☆☆ ¿Qué imprime del siguiente programa?

    def f(x):
        x = x + 1
        return x
    
    x = 3
    print(f(x))
    x += 4
    print(x)
    
  3. ★☆☆ Dado el siguiente programa

    var = 1
    var += 1
    print(var)
    

    ¿var es una variable local o global?

  4. ★☆☆ Dado el siguiente programa

    def f(var):
        global x
        x = x + 1
        return x
    
    x = 3
    print(f(20))
    x += 4
    print(x)
    

    ¿Qué imprime? ¿Por qué?

  5. ★☆☆ Dado el siguiente programa

    def f(var):
        x = x + 1
        return x
    
    x = 3
    print(f(20))
    x += 4
    print(x)
    

    ¿Qué error produce? ¿Dónde? ¿Por qué?

  6. ★☆☆ Dado el siguiente programa

    def main():
        var = 1
        var += 1
        print(var)
    
    if __name__ == '__main__':
        main()
    

    ¿var es una variable local o global?

  7. ★★☆ ¿Por qué es considerado una mala práctica usar variables globales?

Typehints#

  1. ★☆☆ ¿Qué es un typehint? ¿Para qué sirve? ¿Es obligatorio? ¿Es recomendable?

  2. ★☆☆ ¿Qué significa def f(x: int) -> int:?

  3. ★☆☆ ¿Qué significa def f(x: int) -> None:?

  4. ★☆☆ Dado el siguiente programa

    def f(x: int) -> int:
        return x * 2
    
    print(f(3))
    print(f('hola'))
    
    1. ¿Qué imprime? ¿Por qué?
    2. ¿Produce algún error? ¿Por qué?

Argumentos por omisión#

  1. ★☆☆ ¿Qué es un argumento por omisión? ¿Para qué sirve?

  2. ★☆☆ ¿Qué significa def f(x = 3) -> int:?

  3. ★☆☆ ¿Qué imprime el siguiente programa?

    def pow(base, exp = 2):
        return base ** exp
    
    print(pow(4))
    print(pow(4, 3))
    
  4. ★☆☆ Modificar el programa anterior para que la definición de la función pow utilice typehints.

    Cuidado

    Debe mantenerse el exp como argumento por omisión.

  5. ★☆☆ ¿Cuál es el error que produce el siguiente programa? ¿Por qué? ¿Cómo se soluciona?

    def f(x = 3, y):
        return x + y
    
    print(f(4))
    

Módulos#

  1. ★☆☆ En un archivo calculadora.py escribir las funciones suma, resta, multiplicacion y division. Cada función debe recibir dos números y devolver el resultado de la operación correspondiente.

    En otro archivo main.py importar el módulo calculadora y utilizar las funciones definidas.

    ¿Cuál es el beneficio de hacer esto, en vez de tener todas las funciones en el mismo archivo?

  2. ★☆☆ Escribir un archivo llamado words.py que contenga una variable que sea una lista con palabras (strings). Escribir, luego, una función que lea las palabras en words.py y las almacene como valores en un diccionario. La clave a la que pertenece cada palabra es su propia longitud. Luego se pueden recuperar rápidamente todas las palabras de una determinada longitud.

  3. ★★☆ Hacer dos archivos: main.py y funciones.py y completarlos de la siguiente manera:

    main.py
    import funciones
    
    def main():
        print(funciones.f(3))
        print(funciones.pi)
    
    if __name__ == '__main__':
        main()
    
    funciones.py
    def f(x):
        x = x + 1
        return x
    
    pi = 3.14159
    print('Este print es de funciones.py')
    print(f'El valor de 2*pi es {2*pi}')
    
    1. ¿Qué imprime? ¿Por qué?
    2. Quiero que los prints de funciones.py no se ejecuten cuando importo el módulo, pero sí cuando lo ejecuto directamente. ¿Cómo lo hago?