说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
itertools.repeat() 是 Python itertools 库中的一个函数,用于创建一个迭代器,该迭代器重复生成指定的对象。可以指定重复的次数或无限重复。
语法为 itertools.repeat(object[, times])
负责把一个元素无限重复下去,不过如果提供第二个参数就可以限定重复次数。它创建一个迭代器,不断重复 object 。除非设定参数 times ,否则将无限重复。可用于 map() 函数中的参数,被调用函数可得到一个不变参数。也可用于 zip() 的参数以在元组记录中创建一个不变的部分。
参数和返回:
大致相当于:
def repeat(object, times=None):
# repeat(10, 3) --> 10 10 10
if times is None:
while True:
yield object
else:
for i in range(times):
yield object
repeat 最常见的用途就是在 map 或 zip 提供一个常量流:
list(map(pow, range(10), repeat(2)))
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
import itertools
# 重复生成数字 5,共 3 次
repeater = itertools.repeat(5, 3)
# 输出所有值
print(list(repeater)) # [5, 5, 5]
如果不指定 times 参数,itertools.repeat() 将无限重复生成指定的对象。
import itertools
# 无限重复生成字符串 'Hello'
repeater = itertools.repeat('Hello')
# 输出前五个值
for _ in range(5):
print(next(repeater))
# 输出:
'''
Hello
Hello
Hello
Hello
Hello
'''
itertools.repeat() 可以与 zip() 结合使用,用于将单个值与另一个可迭代对象一起打包。
import itertools
# 重复生成值 'Yes',与列表中的元素一起打包
values = ['a', 'b', 'c', 'd', 'e']
zipped = zip(itertools.repeat('Yes'), values)
# 输出打包后的结果
for pair in zipped:
print(pair)
# 输出:
'''
('Yes', 'a')
('Yes', 'b')
('Yes', 'c')
('Yes', 'd')
('Yes', 'e')
'''
可以将 itertools.repeat() 与列表推导式结合,生成重复的元素列表。
import itertools
# 生成重复的 'Python' 元素列表,共 4 个元素
repeated_list = [x for x in itertools.repeat('Python', 4)]
# 输出列表
print(repeated_list) # ['Python', 'Python', 'Python', 'Python']
通过 itertools.repeat(),可以方便地生成重复的元素序列或对象,适用于需要多次使用相同值或对象的各种场景。
示例:生成器函数中的默认值设置
假设我们有一个生成器函数 process_data(),它从外部接收数据并处理,但在处理前需要设置一些默认值,这些默认值可能是相同的,而不需要每次调用都重新计算或设置。
import itertools
def process_data(data_stream, default_value):
# 初始化处理器
processor = initialize_processor(default_value)
# 处理数据流
for data in data_stream:
# 使用处理器处理数据
processed_data = processor(data)
yield processed_data
def initialize_processor(default_value):
# 在这里可以进行一些初始化操作,比如设置默认值
default_value = itertools.repeat(default_value)
def processor(data):
# 在处理器中使用默认值
processed_data = data + next(default_value) # 示例中简单地加上默认值
return processed_data
return processor
# 使用示例
data_stream = [1, 2, 3, 4, 5]
default_value = 10
# 创建数据处理器
processor = process_data(data_stream, default_value)
# 处理并输出处理后的数据
for result in processor:
print(result)
# 输出
'''
11
12
13
14
15
'''
解释:
initialize_processor() 函数:这个函数接收一个 default_value 参数,并返回一个处理器函数 processor。在这里,itertools.repeat() 被用来无限重复生成 default_value,这样在处理器函数中就可以使用这个默认值了。
process_data() 函数:这个生成器函数接收一个数据流 data_stream 和一个默认值 default_value。它初始化一个处理器,并遍历数据流,使用处理器处理每个数据,并生成处理后的结果。
示例输出:对于输入的数据流 [1, 2, 3, 4, 5],默认值为 10,处理后的结果是每个数据加上默认值 10
更新时间:2024-07-20 10:43:40 标签:python repeat 迭代 重复