迭代器和生成器是 Python 中强大的工具,允许迭代一系列值或动态生成一系列值。该itertools模块提供了用于使用迭代器和生成器的附加函数。
# 从列表创建迭代器my_list = [ 1 , 2 , 3 ] my_iterator = iter (my_list) # 使用循环迭代迭代器for i in my_iterator: print (i) Output: 1 2 3在此示例中,使用该函数从列表创建迭代器iter()。然后,使用for循环来迭代迭代器并打印出每个值。生成器与迭代器类似,但允许即时生成值,而不是将它们存储在内存中。
# 定义一个生成值的生成器函数def my_generator (): Yield 1 Yield 2 Yield 3 # 从我们的函数创建一个生成器对象gen = my_generator() # 使用循环迭代生成器for i in gen: print (i)输出: 1 2 3在此示例中,定义了一个生成器函数,该函数使用yield关键字一次返回一个值。然后,从函数创建一个生成器对象,并使用for循环对其进行迭代并打印出每个值。该itertools模块提供了使用迭代器和生成器的附加函数。
import itertools # 创建一个迭代器,从可迭代对象中返回连续的键和组my_list = [( 'a' , 1 ), ( 'a' , 2 ), ( 'b' , 3 ), ( 'b' , 4 )] key_func = lambda x: x grouped_iter = itertools.groupby(my_list, key_func) # 使用嵌套循环迭代分组迭代器for key, group in grouped_iter: print ( f"Key: {key} " ) for item in group: print ( f"Value: {item[ 1 ]} " )输出:键:( 'a' , 1 )值:1键:( 'a' , 2 )值:2键:( 'b' , 3 )值: 3键: ( 'b' , 4 )值: 4在此示例中,使用模块groupby()中的函数按列表中的第一个元素(键)对项目进行分组。然后,我们使用嵌套循环迭代每个组并打印出其键和值。总的来说,迭代器和生成器是在 Python 中处理数据序列的强大工具。该模块提供了有效使用这些工具的附加功能。
收集模块Python 中的模块collections提供了在某些情况下有用的专用容器数据类型。例如,该类defaultdict提供了一种便捷的方法来创建具有缺失键默认值的字典。这是一个例子:
从集合导入defaultdict颜色 = [( '黄色' , 1 ), ( '蓝色' , 2 ), ( '黄色' , 3 ), ( '蓝色' , 4 ), ( '红色' , 1 )] d = defaultdict ( list ) for k, v颜色: d[k].append(v) print (d.items())输出:dict_items([( 'yellow' , [ 1 , 3 ]), ( 'blue' , [ 2 ,4 ]), ( '红色' , [ 1 ])])在此示例中,创建一个名为 的defaultdict ,每当遇到新键d时,它将创建一个新的空列表。然后,迭代包含颜色名称和数字的元组列表,并将数字附加到 defaultdict 中的相应列表中。最后,我们打印出defaultdict 中的项目。
功能工具模块Python 中的模块functools提供了一组高阶函数,对于处理函数和可调用对象非常有用。模块中最常用的函数之一是partial(),它允许创建一个预先填充一些参数的新函数。这是一个例子:
from functools import partial defmultiply ( x,y ): return x * ydouble=partial(multiply, y= 2 ) print (double ( 3 ) )输出 :6在这个例子中,定义了一个名为的函数multiply(),它接受两个参数并返回它们的乘积。然后创建一个名为doubleusing的新函数partial(),它将第二个参数设置为multiply()to 2。
导入库模块importlib是 Python 中的一个模块,提供了一种在 Python 中导入模块和包的编程方式。它允许您在运行时动态导入模块及其成员,这出于多种原因可能很有用。
主要用例之一importlib是允许您的 Python 代码使用编写代码时未知的插件或扩展。例如,可能想要构建一个可以根据用户输入或配置设置加载不同模块或插件的应用程序。使用importlib,可以在运行时动态地执行此操作,而无需对要导入的模块或包的名称进行硬编码。importlib以下是如何在 Python 中使用该模块的示例:
import importlib module_name = 'math' module = importlib.import_module(module_name) print (module.pi)输出:3.141592653589793在这个例子中,们首先导入importlib模块。我们定义一个变量module_name,其中包含我们要导入的模块的名称 ( math)。使用import_module()from 函数importlib动态导入math模块。当直到运行时才知道要导入的模块的名称时,这非常有用。最后,我们打印出 的值pi,它是模块中定义的常量math。这是,演示了如何使用以下命令重新加载模块importlib.reload():
import math import importlib print (math.sin( 0 )) # 修改 math.sin() math.sin = lambda x: 42 print (math.sin( 0 )) # 重新加载数学模块math = importlib.reload(math) print (math.sin( 0 ))输出:0.0 42 42