Python의 itertools, functools 및 연산자 함수 모듈에 대한 자세한 설명

itertools 모듈

인터페이스 자동화 작업에서는 대량의 데이터를 처리하고 다양한 반복 작업을 수행해야 하는 경우가 많습니다. 효율성을 높이고 코드를 단순화하기 위해 Python은 효율적인 루프 반복자를 생성하기 위한 함수가 포함된 itertools 모듈을 제공합니다. 다음으로 실제 인터페이스 자동화 작업에 사용되는 5가지 샘플 코드를 제공하면서 itertools 모듈을 함께 이해하고 사용해 보겠습니다.

예시 1: 반복자 연속 계산

인터페이스 테스트에서 일련의 연속된 숫자를 생성해야 하는 경우가 있습니다. itertools.count() 함수는 각 반복마다 증가하는 정수를 생성하는 무한 반복자를 만드는 데 도움이 될 수 있습니다. 샘플 코드는 다음과 같습니다.

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

위 코드에서는 count() 함수를 사용하여 1부터 시작하고 단계 크기가 1인 반복자를 만들고 루프를 통해 처음 10개의 숫자를 인쇄합니다.

예제 2: 반복자 루프 반복

때로는 시퀀스나 반복자의 내용을 반복해야 하는 경우도 있습니다. itertools.cycle() 함수는 각 반복 시퀀스의 요소를 반복하는 무한 루프 반복기를 만드는 데 도움이 될 수 있습니다. 샘플 코드는 다음과 같습니다.

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

위 코드에서는 Cycle() 함수를 사용하여 숫자 3이 될 때까지 각 반복마다 시퀀스 seq의 요소를 반복하는 무한 루프 반복기를 만듭니다.

예시 3: 반복자 조합 배열

때때로 우리는 가능한 모든 조합이나 순열을 생성하기 위해 시퀀스를 결합하거나 순열해야 합니다. itertools.combinations() 및 itertools.permutations() 함수는 이 목표를 달성하는 데 도움이 될 수 있습니다. 샘플 코드는 다음과 같습니다.

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)

위 코드에서는 Combinations() 함수를 사용하여 시퀀스 seq에서 길이가 2인 모든 조합을 생성하고, permutations() 함수를 사용하여 시퀀스 seq에서 길이가 2인 모든 순열을 생성합니다.

예시 4: 반복기 조건부 슬라이싱

때로는 조건에 따라 시퀀스를 분할하고 조건을 충족하는 요소만 유지해야 하는 경우도 있습니다. itertools.takewhile() 함수는 이 목표를 달성하는 데 도움이 될 수 있습니다. 샘플 코드는 다음과 같습니다.

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

위 코드에서는 takewhile() 함수를 사용하여 시퀀스 seq에서 3보다 작거나 같은 요소를 유지하고 결과를 목록에 저장합니다.

예시 5: 반복자는 조건별로 필터링합니다.

때로는 조건에 따라 시퀀스에서 조건을 충족하는 요소를 필터링해야 하는 경우도 있습니다. itertools.filterfalse() 함수는 이러한 목적을 달성하는 데 도움이 될 수 있습니다. 샘플 코드는 다음과 같습니다.

itertool 가져오기

시퀀스 = [1, 2, 3, 4, 5, 6]

# 짝수가 아닌 요소를 필터링합니다.

결과 = 목록(itertools.filterfalse(lambda x: x % 2 == 0, seq))

인쇄(결과)

위 코드에서는 filterfalse() 함수를 사용하여 시퀀스 seq에서 짝수가 아닌 요소를 필터링하고 결과를 목록에 저장합니다.

functools 모듈

실제 인터페이스 자동화 작업에서 함수와 호출 가능 객체를 처리해야 하는 경우가 종종 있는데, Python의 functools 모듈은 고차 함수 및 호출 가능 객체의 작동을 위한 몇 가지 편리한 기능과 도구를 제공합니다. 다음으로 실제 인터페이스 자동화 작업에 사용되는 5가지 예제 코드를 제시하면서 functools 모듈을 함께 이해하고 사용해 보겠습니다.

예시 1: 부분 기능

인터페이스 자동화 작업에서 때로는 원래 기능의 일부 매개변수를 고정한 버전인 새 기능을 생성해야 하는 경우가 있습니다. functools 모듈의 부분() 함수는 이 목표를 달성하는 데 도움이 될 수 있습니다. 샘플 코드는 다음과 같습니다.

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

위 코드에서는 부분() 함수를 사용하여 원래 함수 add()의 고정 인수 버전인 새 함수 add_5를 생성합니다. 첫 번째 매개변수를 5로 고정하고 이를 새 함수의 기본 매개변수로 설정하여 계산에 사용할 수 있도록 했습니다.

예시 2: 함수 캐싱

인터페이스 자동화 작업에서 일부 기능은 자주 호출될 수 있으며 이러한 기능의 계산 결과는 동일합니다. 효율성을 높이기 위해 functools 모듈의 lru_cache() 함수를 사용하여 반복 계산을 피하기 위해 함수를 캐시할 수 있습니다. 샘플 코드는 다음과 같습니다.

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

위 코드에서는 lru_cache() 함수를 사용하여 get_data() 함수를 캐시합니다. 함수가 처음 호출되면 실제 계산을 수행하고 결과를 캐시하며, 이후 호출에서는 캐시된 결과를 직접 반환하므로 함수의 실행 효율성이 향상됩니다.

예시 3: 함수 데코레이터

인터페이스 자동화 작업 중에 추가 작업을 수행하거나 일부 기능에 기능을 추가해야 할 수도 있습니다. functools 모듈의 Wraps() 함수는 원래 함수 코드를 수정하지 않고 함수를 래핑하는 함수 데코레이터를 만드는 데 도움이 될 수 있습니다. 샘플 코드는 다음과 같습니다.

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)

위 코드에서는 데코레이팅된 함수의 메타데이터를 유지하기 위해 Wraps() 함수를 사용하는 데코레이터 함수 log_decator를 정의한 다음 원래 함수를 래핑하는 새 함수 래퍼를 생성합니다. 래퍼 기능에서는 로그 인쇄와 같은 추가 작업을 추가할 수 있습니다. 마지막으로 @log_ decorator 구문을 사용하여 계산 함수에 데코레이터를 적용합니다.

예제 4: 함수 비교기

인터페이스 자동화 작업에서는 개체 집합을 정렬하거나 최대값/최소값을 찾아야 할 수도 있습니다. functools 모듈의 cmp_to_key() 함수는 이전 스타일의 비교 함수를 정렬 및 검색 작업에 사용하기 위한 키 함수로 변환하는 데 도움이 될 수 있습니다. 샘플 코드는 다음과 같습니다.

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)

위 코드에서는 이전 스타일의 비교 함수인 Compare를 정의한 다음 cmp_to_key() 함수를 사용하여 이를 키 함수 key_func로 변환했습니다. sort(), max(), min() 함수에 주요 함수를 전달하면 정렬 및 검색 작업에서 이전 스타일의 비교 함수를 사용할 수 있습니다.

예시 5: 함수 재시도

인터페이스 자동화 작업에서는 발생할 수 있는 오류 상황을 처리하기 위해 특정 기능을 다시 시도해야 하는 경우가 있습니다. functools 모듈의 retry() 함수는 함수의 재시도 논리를 구현하는 데 도움이 될 수 있습니다. 샘플 코드는 다음과 같습니다.

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))

위 코드에서는 retry() 함수를 사용하여 send_request() 함수의 재시도 로직을 래핑했습니다. 함수에서 예외가 발생하면 retry() 함수는 지정된 재시도 횟수에 도달할 때까지 자동으로 재시도합니다. 이런 방식으로 우리는 함수 호출의 가능한 실패 상황을 처리할 수 있습니다.

연산자 모듈

사람들이 Python으로 프로그래밍할 때 다양한 연산자를 사용하여 수치 계산, 논리적 판단 및 기타 작업을 수행하는 경우가 많습니다. 그러나 때로는 이러한 연산자를 다양한 시나리오에 보다 유연하게 적용할 수 있도록 함수 형태로 처리해야 합니다. 이때 Python의 연산자 모듈이 유용합니다. 연산자 모듈은 일반적인 연산자를 대체하는 일련의 함수를 제공하여 기능적인 방식으로 작업을 수행할 수 있도록 합니다. 이 기사에서는 연산자 모듈의 사용법을 소개하고 실제 인터페이스 자동화 작업을 위한 5가지 샘플 코드를 제공합니다.

예시 1: 비교 ​​연산자

인터페이스 자동화 작업에서는 두 값의 크기나 동일성을 비교해야 하는 경우가 많습니다. 비교 연산은 오퍼레이터 모듈의 기능을 이용하여 쉽게 수행할 수 있습니다. 샘플 코드는 다음과 같습니다.

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

위 코드에서는 lt(), eq(), gt() 함수를 사용하여 변수 a와 b 사이의 크기 관계를 비교합니다. 연산자 모듈의 기능을 사용하면 비교 연산을 명확하게 표현할 수 있습니다.

예 2: 산술 연산자

인터페이스 자동화 작업에서는 덧셈, 뺄셈, 곱셈 등과 같은 숫자에 대한 산술 연산을 수행해야 하는 경우가 있습니다. 연산자 모듈은 이러한 산술 연산자를 대체하는 일련의 함수를 제공합니다. 샘플 코드는 다음과 같습니다.

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

위 코드에서는 add(), sub(), mul() 함수를 사용하여 덧셈, 뺄셈, 곱셈 연산을 수행합니다. 연산자 모듈의 기능을 사용하면 연산자를 직접 사용하지 않고도 코드를 더 명확하고 이해하기 쉽게 만들 수 있습니다.

예시 3: 논리 연산자

인터페이스 자동화 작업에서는 AND, OR, NOT 등과 같은 논리 연산을 수행해야 하는 경우가 많습니다. 연산자 모듈은 논리 연산을 수행하기 위한 해당 기능을 제공합니다. 샘플 코드는 다음과 같습니다.

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

위 코드에서는 and_(), or_() 및 not_() 함수를 사용하여 AND, OR 및 NOT의 논리 연산을 수행합니다. 연산자 모듈의 기능을 사용하면 논리 연산을 보다 유연하게 처리할 수 있습니다.

예제 4: 시퀀스 연산자

인터페이스 자동화 작업에서는 접합, 반복 등과 같은 시퀀스(예: 목록 및 튜플)에 대한 일부 작업을 수행해야 할 수도 있습니다. 연산자 모듈은 시퀀스 작업을 수행하기 위한 해당 기능을 제공합니다. 샘플 코드는 다음과 같습니다.

수입업자

sheet1 = [1, 2, 3]

목록2 = [4, 5, 6]

# 시퀀스 작업에 함수 사용

result1 = Operator.concat(list1, list2) # 목록1 + 목록2

result2 = Operator.mul(list1, 3) # 목록1 * 3

print(result1) # 출력 [1, 2, 3, 4, 5, 6]

print(result2) # 출력 [1, 2, 3, 1, 2, 3, 1, 2, 3]

위 코드에서는 concat() 함수를 사용하여 목록을 연결하고, mul() 함수를 사용하여 목록에 대해 반복 작업을 수행합니다. 오퍼레이터 모듈의 기능을 이용하면 보다 편리하게 시퀀스를 조작할 수 있습니다.

예제 5: 인덱싱 및 슬라이싱 연산자

인터페이스 자동화 작업에서는 목록, 문자열 등에 대한 인덱싱 및 슬라이싱 작업을 수행해야 하는 경우가 많습니다. 연산자 모듈은 인덱싱 및 슬라이싱 작업에 해당하는 기능을 제공합니다. 샘플 코드는 다음과 같습니다.

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]

위 코드에서는 getitem() 함수를 사용하여 목록의 지정된 인덱스 요소를 가져오고, setitem() 함수를 사용하여 목록의 지정된 인덱스 요소를 설정하며, delitem() 함수를 사용하여 지정된 인덱스를 삭제합니다. 목록의 요소입니다. 오퍼레이터 모듈의 기능을 이용하면 인덱싱과 슬라이싱 작업을 보다 편리하게 수행할 수 있습니다.

마지막으로: 아래 완전한 소프트웨어 테스팅 비디오 튜토리얼이 편집되어 업로드되었습니다. 필요한 친구는 스스로 얻을 수 있습니다. [100% 무료 보장]

소프트웨어 테스팅 인터뷰 문서

고임금 일자리를 찾으려면 공부를 해야 합니다. 다음 면접 질문은 알리바바, 텐센트, 바이트 등 1위 인터넷 기업의 최신 면접 자료에서 발췌한 것이며 일부 바이트 상사들이 권위 있는 답변을 내놓았습니다. set 저는 면접 정보를 바탕으로 누구나 만족스러운 일자리를 찾을 수 있다고 믿습니다.

추천

출처blog.csdn.net/wx17343624830/article/details/132975705