高阶函数简介
高阶函数是指接受函数作为参数或者返回函数作为结果的函数。在 Python 中,有许多内置的高阶函数,如 map, filter, reduce 等,它们可以极大地简化代码并提高代码的可维护性。
summer camp
map 函数
map 函数接收一个函数和一个序列,将函数应用于序列中的每一个元素,并返回一个新的序列。
使用 map 处理请求参数
import requests
from functools import partial
def send_request(url, params):
response = requests.get(url, params=params)
return response.json()
urls = ["https://api.example.com/user/1", "https://api.example.com/user/2"]
params = [{"id": 1}, {"id": 2}]
responses = map(partial(send_request, params=params), urls)
for response in responses:
print("响应内容:", response)
# 输出:
# 响应内容: {'id': 1, 'name': 'User 1'}
# 响应内容: {'id': 2, 'name': 'User 2'}
summer camp
filter 函数
filter 函数接收一个函数和一个序列,将函数应用于序列中的每一个元素,并返回一个迭代器,只包含那些函数返回 True 的元素。
使用 filter 过滤响应数据
import requests
def is_valid_response(response):
return response.status_code == 200
responses = [
requests.get("https://api.example.com/valid"),
requests.get("https://api.example.com/invalid"),
]
valid_responses = filter(is_valid_response, responses)
for response in valid_responses:
print("有效响应:", response.json())
# 输出:
# 有效响应: {'status': 'ok'}
summer camp
reduce 函数
reduce 函数接收一个函数和一个序列,并将序列中的元素累加起来。
使用 reduce 统计响应时间
from functools import reduce
def sum_response_times(a, b):
return a + b.elapsed.total_seconds()
responses = [
requests.get("https://api.example.com/1"),
requests.get("https://api.example.com/2"),
]
total_time = reduce(sum_response_times, responses, 0)
print("总响应时间:", total_time)
# 输出:
# 总响应时间: 0.123456
summer camp
partial 函数
partial 函数可以固定函数的部分参数,从而创建新的函数。
使用 partial 创建带默认参数的请求函数
import requests
from functools import partial
send_request = partial(requests.get, timeout=5)
response = send_request("https://api.example.com/data")
print("响应内容:", response.json())
# 输出:
# 响应内容: {'key': 'value'}
summer camp
lambda 表达式
lambda 表达式允许我们快速定义简单的匿名函数。
使用 lambda 和 filter 过滤响应数据
import requests
responses = [
requests.get("https://api.example.com/valid"),
requests.get("https://api.example.com/invalid"),
]
valid_responses = filter(lambda r: r.status_code == 200, responses)
for response in valid_responses:
print("有效响应:", response.json())
# 输出:
# 有效响应: {'status': 'ok'}
summer camp
itertools 模块
itertools 模块提供了多种高效操作迭代器的函数。
使用 itertools.chain 连接多个请求的结果
import requests
from itertools import chain
responses = [
requests.get("https://api.example.com/users?page=1"),
requests.get("https://api.example.com/users?page=2"),
]
all_users = chain.from_iterable(response.json()["users"] for response in responses)
for user in all_users:
print("用户:", user)
# 输出:
# 用户: {'id': 1, 'name': 'User 1'}
# 用户: {'id': 2, 'name': 'User 2'}
# 用户: {'id': 3, 'name': 'User 3'}
# 用户: {'id': 4, 'name': 'User 4'}
summer camp
functools 模块
functools 模块提供了许多有用的功能,如缓存、偏函数等。
使用 lru_cache 缓存请求结果
import requests
from functools import lru_cache
@lru_cache(maxsize=32)
def get_user(id):
response = requests.get(f"https://api.example.com/user/{id}")
return response.json()
user = get_user(1)
print("用户:", user)
# 输出:
# 用户: {'id': 1, 'name': 'User 1'}
summer camp
contextlib 模块
contextlib 模块提供了上下文管理器,可以用来处理资源的自动获取和释放。
使用 contextlib.closing 管理请求连接
import requests
from contextlib import closing
with closing(requests.get("https://api.example.com/data")) as response:
print("响应内容:", response.json())
# 输出:
# 响应内容: {'key': 'value'}
summer camp
concurrent.futures 模块
concurrent.futures 模块提供了异步执行函数的高级接口。
使用 ThreadPoolExecutor 并发发送请求
import requests
from concurrent.futures import ThreadPoolExecutor
def send_request(url):
response = requests.get(url)
return response.json()
urls = ["https://api.example.com/user/1", "https://api.example.com/user/2"]
with ThreadPoolExecutor(max_workers=2) as executor:
results = list(executor.map(send_request, urls))
for result in results:
print("响应内容:", result)
# 输出:
# 响应内容: {'id': 1, 'name': 'User 1'}
# 响应内容: {'id': 2, 'name': 'User 2'}
summer camp
decorator 模块
decorator 模块提供了一个装饰器框架,可以轻松地编写和使用装饰器。
使用 decorator 模块记录请求日志
from decorator import decorator
@decorator
def log_request(func, *args, **kwargs):
print("发送请求:", args[0])
result = func(*args, **kwargs)
print("响应结果:", result)
return result
@log_request
def send_request(url):
response = requests.get(url)
return response.json()
result = send_request("https://api.example.com/data")
# 输出:
# 发送请求: https://api.example.com/data
# 响应结果: {'key': 'value'}
summer camp
总结
通过使用 Python 中的高阶函数,我们可以使接口自动化测试代码更加简洁、高效。希望上述示例能够帮助你更好地理解这些高阶函数,并在实际项目中应用它们。
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。