Phyton – Nivel 3 – Test 2

Phyton – Nivel 3 – Test 2

Test-2 Phyton Nivel 3

Considera el siguiente código:


class Meta(type):
        def __new__(cls, name, bases, dct):
                 x = super().__new__(cls, name, bases, dct)
                 x.attr = 100
                 return x

class MyClass(metaclass=Meta):
        pass

print(MyClass.attr)

¿Cuál será la salida?

¿Qué es una función de orden superior en Python?

¿Qué es el método mágico call en Python?

¿Qué es un descriptor en Python?

¿Qué es una expresión walrus (:=) en Python 3.8+?

Considera el siguiente código:



def outer(x):
       def inner(y):
             return x + y
       return inner

f = outer(10)
print(f(5))

¿Cuál será la salida?

¿Cuál es la diferencia principal entre .sort() y sorted() en Python?

¿Qué es el módulo asyncio en Python?

Observa el siguiente código:


import threading

def print_numbers():
        for i in range(5):
               print(i)

threads = [threading.Thread(target=print_numbers) for _ in range(3)]
for thread in threads:
        thread.start()

¿Qué describe mejor la salida probable de este código?


¿Qué hace la función zip() en Python?

Tests similares

Respuestas:

1. ¿Qué es una función de orden superior en Python?

Respuesta: Una función que toma otra función como argumento o devuelve una función

Explicación:
Una función de orden superior es aquella que trabaja con otras funciones como datos. Puede recibir funciones como argumentos, devolverlas como resultado, o ambas. Ejemplo:

def aplicar_funcion(f, x):

    return f(x)

def cuadrado(n):

    return n * n

print(aplicar_funcion(cuadrado, 5))  # Salida: 25


2. Observa el código sobre hilos:

import threading

def print_numbers():

    for i in range(5):

        print(i)

threads = [threading.Thread(target=print_numbers) for _ in range(3)]

for thread in threads:

    thread.start()

Respuesta: Los números del 0 al 4 impresos en un orden impredecible, posiblemente entremezclados

Explicación:
El módulo threading permite ejecutar múltiples hilos concurrentemente. Sin sincronización explícita (como join()), los hilos pueden entremezclar su salida, ya que corren simultáneamente.


3. ¿Qué es una expresión walrus (:=) en Python 3.8+?

Respuesta: Un operador de asignación que permite asignar valores dentro de expresiones

Explicación:
El operador := (apodado «walrus») asigna un valor a una variable dentro de una expresión. Esto es útil en bucles y condicionales. Ejemplo:

if (n := len([1, 2, 3, 4])) > 3:

    print(f»La lista tiene {n} elementos»)  # Salida: La lista tiene 4 elementos


4. ¿Qué es el módulo asyncio en Python?

Respuesta: Un módulo para programación asíncrona y concurrencia

Explicación:
asyncio facilita la ejecución de código de manera asíncrona, permitiendo que se manejen múltiples tareas sin bloquear el programa. Ejemplo:

import asyncio

async def saludo():

    print(«Hola»)

    await asyncio.sleep(1)

    print(«Adiós»)

asyncio.run(saludo())


5. ¿Cuál será la salida?

def outer(x):

    def inner(y):

        return x + y

    return inner

f = outer(10)

print(f(5))

Respuesta: 15

Explicación:
outer devuelve la función inner, que recuerda el valor de x (closure). Al llamar a f(5), se calcula 10 + 5.


6. ¿Qué es el método mágico __call__ en Python?

Respuesta: Un método que permite que una instancia de clase sea llamada como una función

Explicación:
El método __call__ permite que un objeto sea invocado como si fuera una función. Ejemplo:

class Llamable:

    def __call__(self, x):

        return x * 2

obj = Llamable()

print(obj(3))  # Salida: 6


7. ¿Qué hace la función zip() en Python?

Respuesta: Combina dos o más iterables en una secuencia de tuplas

Explicación:
La función zip() toma múltiples iterables y devuelve un iterador de tuplas donde cada tupla contiene elementos de las mismas posiciones de los iterables. Ejemplo:

a = [1, 2, 3]

b = [‘a’, ‘b’, ‘c’]

print(list(zip(a, b)))  # Salida: [(1, ‘a’), (2, ‘b’), (3, ‘c’)]


8. Observa el siguiente código sobre metaclases:

class Meta(type):

    def __new__(cls, name, bases, dct):

        x = super().__new__(cls, name, bases, dct)

        x.attr = 100

        return x

class MyClass(metaclass=Meta):

    pass

print(MyClass.attr)

Respuesta: 100

Explicación:
El código utiliza una metaclase (Meta) para agregar el atributo attr con el valor 100 a la clase MyClass. Este atributo es accesible directamente desde la clase.


9. ¿Qué es un descriptor en Python?

Respuesta: Un objeto que define los métodos __get__, __set__ o __delete__

Explicación:
Los descriptores controlan cómo se accede a los atributos de una clase. Se usan, por ejemplo, en propiedades y métodos estáticos. Ejemplo:

class Descriptor:

    def __get__(self, instance, owner):

        return «Acceso controlado»

class MiClase:

    atributo = Descriptor()

obj = MiClase()

print(obj.atributo)  # Salida: Acceso controlado


10. ¿Cuál es la diferencia principal entre .sort() y sorted() en Python?

Respuesta: .sort() modifica la lista original, sorted() devuelve una nueva lista ordenada

Explicación:

  • .sort() ordena la lista en el lugar y solo funciona con listas.
  • sorted() crea una nueva lista ordenada a partir de cualquier iterable, sin modificar el original. Ejemplo:

lista = [3, 1, 2]

print(sorted(lista))  # Salida: [1, 2, 3]

print(lista)          # Salida: [3, 1, 2]

lista.sort()

print(lista)          # Salida: [1, 2, 3]

Deja un comentario