Explicación detallada de itertools, functools y módulos de funciones de operador en Python

módulo itertools

En el trabajo de automatización de interfaces, a menudo necesitamos procesar grandes cantidades de datos y realizar varias operaciones iterativas. Para mejorar la eficiencia y simplificar el código, Python proporciona el módulo itertools, que contiene funciones para crear iteradores de bucle eficientes. A continuación, comprendamos y utilicemos el módulo itertools juntos, brindando cinco códigos de muestra en el trabajo de automatización de interfaz real.

Ejemplo 1: conteo continuo del iterador

En las pruebas de interfaz, a veces necesitamos generar una serie de números consecutivos. La función itertools.count() puede ayudarnos a crear un iterador infinito que genera un número entero creciente con cada iteración. Aquí hay un código de muestra:

import itertools
for num in itertools.count(start=1, step=1):
    print(num)
    if num == 10:
        break

En el código anterior, usamos la función count() para crear un iterador comenzando desde 1 con un tamaño de paso de 1 e imprimimos los primeros 10 números a través del ciclo.

Ejemplo 2: repeticiones del bucle iterador

A veces necesitamos repetir el contenido de una secuencia o iterador. La función itertools.cycle() puede ayudarnos a crear un iterador de bucle infinito que repite los elementos de la secuencia en cada iteración. Aquí hay un código de muestra:

import itertools
seq = [1, 2, 3]
for num in itertools.cycle(seq):
    print(num)
    if num == 3:
        break

En el código anterior, usamos la función ciclo() para crear un iterador de bucle infinito que repite los elementos en la secuencia seq en cada iteración hasta que llega al número 3.

Ejemplo 3: disposición de combinación de iteradores

A veces necesitamos combinar o permutar secuencias para generar todas las combinaciones o permutaciones posibles. Las funciones itertools.combinations() e itertools.permutations() pueden ayudarnos a lograr este objetivo. Aquí hay un código de muestra:

import itertools
seq = [1, 2, 3]
# 组合
for combination in itertools.combinations(seq, r=2):
    print(combination)
# 排列
for permutation in itertools.permutations(seq, r=2):
    print(permutation)

En el código anterior, usamos la función combinaciones() para generar todas las combinaciones de longitud 2 en la secuencia secuencial, y usamos la función permutaciones() para generar todas las permutaciones de longitud 2 en la secuencia secuencial.

Ejemplo 4: corte condicional del iterador

A veces necesitamos dividir una secuencia según las condiciones y solo conservar los elementos que cumplen las condiciones. La función itertools.take while() puede ayudarnos a lograr este objetivo. Aquí hay un código de muestra:

import itertools
seq = [1, 2, 3, 4, 5, 6]
# 保留小于等于3的元素
result = list(itertools.takewhile(lambda x: x <= 3, seq))
print(result)

En el código anterior, usamos la función take while() para retener elementos menores o iguales a 3 en la secuencia seq y almacenar los resultados en una lista.

Ejemplo 5: el iterador filtra por condición

A veces necesitamos filtrar elementos que cumplan las condiciones de la secuencia en función de las condiciones. La función itertools.filterfalse() puede ayudarnos a lograr este propósito. Aquí hay un código de muestra:

importar itertools

secuencia = [1, 2, 3, 4, 5, 6]

# Filtrar elementos no pares

resultado = lista(itertools.filterfalse(lambda x: x % 2 == 0, seq))

imprimir (resultado)

En el código anterior, usamos la función filterfalse() para filtrar elementos no pares de la secuencia seq y almacenar los resultados en una lista.

módulo de herramientas funcionales

En el trabajo de automatización de interfaz real, a menudo necesitamos lidiar con funciones y objetos invocables, y el módulo functools de Python proporciona algunas funciones y herramientas convenientes para la operación de funciones de alto orden y objetos invocables. A continuación, comprendamos y utilicemos el módulo functools juntos, brindando cinco códigos de ejemplo en el trabajo de automatización de interfaz real.

Ejemplo 1: función parcial

En el trabajo de automatización de interfaces, a veces necesitamos crear una nueva función, que es una versión fija de algunos parámetros de la función original. La función parcial () del módulo functools puede ayudarnos a lograr este objetivo. Aquí hay un código de muestra:

import functools
# 原始函数
def add(a, b):
    return a + b
# 创建一个固定了第一个参数的新函数
add_5 = functools.partial(add, 5)
# 调用新函数
result = add_5(10)
print(result)

En el código anterior, usamos la función parcial() para crear una nueva función add_5, que es una versión de argumento fijo de la función original add(). Fijamos el primer parámetro en 5 y lo convertimos en el parámetro predeterminado para la nueva función, que luego puede usarse para cálculos.

Ejemplo 2: almacenamiento en caché de funciones

En el trabajo de automatización de interfaces, algunas funciones se pueden llamar con frecuencia y los resultados del cálculo de estas funciones son los mismos. Para mejorar la eficiencia, podemos usar la función lru_cache() del módulo functools para almacenar en caché la función y evitar cálculos repetidos. Aquí hay un código de muestra:

import functools
# 需要进行缓存的函数
@functools.lru_cache()
def get_data(url):
    # 发送HTTP请求并获取数据
    # ...
    return data
# 第一次调用函数,会执行实际的计算
result1 = get_data("http://example.com")
# 第二次调用函数,会直接返回缓存的结果
result2 = get_data("http://example.com")

En el código anterior, usamos la función lru_cache() para almacenar en caché la función get_data(). Cuando se llama a la función por primera vez, se realiza el cálculo real y los resultados se almacenan en caché, y las llamadas posteriores devuelven directamente los resultados almacenados en caché, lo que mejora la eficiencia de ejecución de la función.

Ejemplo 3: decorador de funciones

Durante el trabajo de automatización de la interfaz, es posible que necesitemos realizar operaciones adicionales o agregar funcionalidad a algunas funciones. La función wraps() del módulo functools puede ayudarnos a crear decoradores de funciones para envolver funciones sin modificar el código de función original. Aquí hay un código de muestra:

import functools
# 自定义装饰器
def log_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print("Calling function:", func.__name__)
        result = func(*args, **kwargs)
        print("Function", func.__name__, "finished")
        return result
    return wrapper
# 应用装饰器
@log_decorator
def calculate(a, b):
    return a + b
# 调用被装饰的函数
result = calculate(5, 10)
print(result)

En el código anterior, definimos una función decoradora log_decorator, que utiliza la función wraps() para retener los metadatos de la función decorada y luego crea un nuevo contenedor de funciones para envolver la función original. En la función contenedora, podemos agregar operaciones adicionales, como imprimir registros. Finalmente, aplicamos el decorador a la función calcular usando la sintaxis @log_decorator.

Ejemplo 4: Comparador de funciones

En el trabajo de automatización de interfaces, es posible que necesitemos ordenar un conjunto de objetos o encontrar el valor máximo/mínimo. La función cmp_to_key() del módulo functools puede ayudarnos a convertir funciones de comparación antiguas en funciones clave para usar en operaciones de clasificación y búsqueda. Aquí hay un código de muestra:

import functools
# 旧式的比较函数
def compare(a, b):
    if a < b:
        return -1
    elif a > b:
        return 1
    else:
        return 0
# 将旧式的比较函数转换为键函数
key_func = functools.cmp_to_key(compare)
# 使用键函数进行排序
data = [4, 2, 6, 1, 3]
data.sort(key=key_func)
print(data)
# 使用键函数查找最大/最小值
max_value = max(data, key=key_func)
min_value = min(data, key=key_func)
print("Max:", max_value)
print("Min:", min_value)

En el código anterior, definimos una función de comparación de estilo antiguo y luego usamos la función cmp_to_key() para convertirla en una función clave key_func. Al pasar funciones clave a las funciones sort(), max() y min(), podemos utilizar funciones de comparación de estilo antiguo en operaciones de clasificación y búsqueda.

Ejemplo 5: reintento de función

En el trabajo de automatización de interfaces, a veces necesitamos reintentar ciertas funciones para manejar posibles situaciones de falla. La función retry() del módulo functools puede ayudarnos a implementar la lógica de reintento de la función. Aquí hay un código de muestra:

import functools
# 需要重试的函数
@functools.retry()
def send_request(url):
    # 发送HTTP请求
    # ...
    # 如果请求失败,抛出异常
    raise Exception("Request failed")
# 调用带重试逻辑的函数
try:
    send_request("http://example.com")
except Exception as e:
    print("Error:", str(e))

En el código anterior, usamos la función retry() para ajustar la lógica de reintento de la función send_request(). Si la función genera una excepción, la función retry() reintentará automáticamente hasta alcanzar el número especificado de reintentos. De esta manera podemos manejar posibles situaciones de falla de llamadas a funciones.

módulo operador

Cuando las personas programan en Python, a menudo utilizan varios operadores para realizar cálculos numéricos, juicios lógicos y otras operaciones. Sin embargo, a veces necesitamos procesar estos operadores en forma de funciones para que puedan aplicarse de manera más flexible en diferentes escenarios. En este momento, el módulo operador de Python resulta útil. El módulo operador proporciona una serie de funciones para reemplazar a los operadores comunes, permitiéndonos realizar operaciones de manera funcional. Este artículo presentará el uso del módulo de operador y proporcionará cinco códigos de muestra para el trabajo de automatización de interfaz real.

Ejemplo 1: operadores de comparación

En el trabajo de automatización de interfaces, a menudo necesitamos comparar el tamaño o la igualdad de dos valores. Las operaciones de comparación se pueden realizar fácilmente utilizando las funciones del módulo de operador. Aquí hay un código de muestra:

import operator
a = 10
b = 5
# 使用函数进行比较
result1 = operator.lt(a, b)  # a < b
result2 = operator.eq(a, b)  # a == b
result3 = operator.gt(a, b)  # a > b
print(result1)  # 输出False
print(result2)  # 输出False
print(result3)  # 输出True

En el código anterior, utilizamos las funciones lt(), eq() y gt() para comparar la relación de tamaño entre las variables a y b. Al utilizar las funciones del módulo operador, podemos expresar claramente las operaciones de comparación.

Ejemplo 2: operadores aritméticos

En el trabajo de automatización de interfaces, a veces necesitamos realizar operaciones aritméticas con números, como suma, resta, multiplicación, etc. El módulo de operador proporciona una serie de funciones para reemplazar estos operadores aritméticos. Aquí hay un código de muestra:

import operator
a = 10
b = 5
# 使用函数进行算术运算
result1 = operator.add(a, b)  # a + b
result2 = operator.sub(a, b)  # a - b
result3 = operator.mul(a, b)  # a * b
print(result1)  # 输出15
print(result2)  # 输出5
print(result3)  # 输出50

En el código anterior, utilizamos las funciones add(), sub() y mul() para realizar operaciones de suma, resta y multiplicación. Al utilizar las funciones del módulo de operador, podemos evitar el uso de operadores directamente, lo que hace que el código sea más claro y fácil de entender.

Ejemplo 3: operadores lógicos

En el trabajo de automatización de interfaces, a menudo necesitamos realizar operaciones lógicas, como Y, O, NO, etc. El módulo de operador proporciona las funciones correspondientes para realizar operaciones lógicas. Aquí hay un código de muestra:

import operator
a = True
b = False
# 使用函数进行逻辑运算
result1 = operator.and_(a, b)  # a and b
result2 = operator.or_(a, b)  # a or b
result3 = operator.not_(a)  # not a
print(result1)  # 输出False
print(result2)  # 输出True
print(result3)  # 输出False

En el código anterior, utilizamos las funciones and_(), or_() y not_() para realizar operaciones lógicas de AND, OR y NOT. Al utilizar las funciones del módulo operador, podemos manejar operaciones lógicas de manera más flexible.

Ejemplo 4: operador de secuencia

En el trabajo de automatización de interfaces, es posible que necesitemos realizar algunas operaciones en secuencias (como listas y tuplas), como empalmar, repetir, etc. El módulo de operador proporciona las funciones correspondientes para realizar operaciones de secuencia. Aquí hay un código de muestra:

operador de importación

hoja1 = [1, 2, 3]

lista2 = [4, 5, 6]

# Usar funciones para operaciones de secuencia

resultado1 = operador.concat(lista1, lista2) # lista1 + lista2

resultado2 = operador.mul(lista1, 3) # lista1 * 3

imprimir(resultado1) # Salida [1, 2, 3, 4, 5, 6]

imprimir(resultado2) # Salida [1, 2, 3, 1, 2, 3, 1, 2, 3]

En el código anterior, usamos la función concat() para concatenar listas y la función mul() para realizar operaciones repetidas en listas. Al utilizar las funciones del módulo operador, podemos operar en la secuencia de manera más conveniente.

Ejemplo 5: operadores de indexación y corte

En el trabajo de automatización de interfaces, a menudo necesitamos realizar operaciones de indexación y división en listas, cadenas, etc. El módulo de operador proporciona las funciones correspondientes para operaciones de indexación y corte. Aquí hay un código de muestra:

import operator
list1 = [1, 2, 3, 4, 5]
# 使用函数进行索引和切片操作
result1 = operator.getitem(list1, 2)  # list1[2]
result2 = operator.setitem(list1, 1, 10)  # list1[1] = 10
result3 = operator.delitem(list1, 3)  # del list1[3]
print(result1)  # 输出3
print(result2)  # 输出None
print(result3)  # 输出None
print(list1)  # 输出[1, 10, 3, 5]

En el código anterior, usamos la función getitem() para obtener el elemento de índice especificado de la lista, usamos la función setitem() para establecer el elemento de índice especificado de la lista y usamos la función delitem() para eliminar el índice especificado. elemento de la lista. Al utilizar las funciones del módulo de operador, podemos realizar operaciones de indexación y corte de manera más conveniente.

Finalmente: se ha compilado y subido el video tutorial completo de prueba de software a continuación. Los amigos que lo necesiten pueden obtenerlo ellos mismos [garantizado 100% gratis]

Documento de entrevista de prueba de software

Debemos estudiar para encontrar un trabajo bien remunerado. Las siguientes preguntas de la entrevista provienen de los últimos materiales de entrevista de empresas de Internet de primer nivel como Alibaba, Tencent, Byte, etc., y algunos jefes de Byte han dado respuestas autorizadas. Después de terminar esto set Creo que todos pueden encontrar un trabajo satisfactorio según la información de la entrevista.

Supongo que te gusta

Origin blog.csdn.net/wx17343624830/article/details/132975705
Recomendado
Clasificación