文章目录
python常用库
4、sys库
4.1、 命令行参数
sys.argv
: 这是一个包含命令行参数的列表。当你在命令行中运行一个 Python 脚本时,sys.argv
中会包含脚本的名称以及任何传递给脚本的参数。
4.2、模块导入
sys.modules
: 这是一个字典,包含当前 Python 解释器中已加载的所有模块的信息。你可以使用它来查看已导入的模块或者手动添加模块。
4.3、退出程序
sys.exit([arg])
: 这个函数用于退出 Python 解释器。你可以选择传递一个整数参数给sys.exit
,作为退出状态码。通常情况下,0 表示成功退出,非零值表示出错。
4.4、标准输入输出
sys.stdin
,sys.stdout
,sys.stderr
: 这些变量分别代表标准输入、标准输出和标准错误流。你可以重定向这些流来进行输入输出的操作。
4.5、系统相关信息
sys.platform
: 这个变量包含当前系统的平台信息,例如'win32'
、'linux'
等。sys.version
: 这是一个字符串,包含当前 Python 解释器的版本信息。sys.path
: 这是一个包含模块搜索路径的列表。你可以通过修改sys.path
来添加或删除模块搜索路径。
4.6、内存管理
sys.getsizeof(obj)
: 这个函数返回对象obj
占用的内存大小,单位为字节。
4.7、其他功能
sys.setrecursionlimit(limit)
: 设置递归调用的最大深度限制。sys.getrecursionlimit()
: 返回当前递归调用的最大深度限制。sys.getdefaultencoding()
: 返回 Python 解释器默认的字符编码。
5、collections库
5.1、Counter 计数器
-
Counter
类是用来统计可迭代对象中元素出现次数的工具。你可以使用Counter
类创建一个计数器对象,并通过方法如most_common()
来获取出现次数最多的元素。from collections import Counter # 创建计数器对象 word_counts = Counter(['apple', 'banana', 'apple', 'orange', 'banana', 'apple']) # 获取出现次数最多的元素 # most_common(1) 表示要获取出现次数最多的第一个元素,也就是说,返回一个包含出现次数最多的元素及其出现次数的元组的列表。 most_common_word = word_counts.most_common(1) print(most_common_word) # Output: [('apple', 3)]
5.2、defaultdict 默认字典
-
defaultdict
类是dict
的子类,它允许你为字典的键设置默认值类型。当访问不存在的键时,defaultdict
会使用默认值类型创建一个新的键值对。from collections import defaultdict # 创建默认字典,指定默认值类型为列表 fruit_inventory = defaultdict(list) # 添加水果库存信息 fruit_inventory['apple'].append(10) fruit_inventory['banana'].append(20) fruit_inventory['apple'].append(5) print(fruit_inventory) # Output: defaultdict(<class 'list'>, {'apple': [10, 5], 'banana': [20]})
5.3、OrderedDict 有序字典
-
OrderedDict
类是一种有序的字典,它会记住元素插入的顺序。与普通的字典不同,OrderedDict
的键值对会按照插入的顺序进行迭代。from collections import OrderedDict # 创建有序字典 ordered_dict = OrderedDict() # 添加键值对,并保持插入顺序 ordered_dict['a'] = 1 ordered_dict['b'] = 2 ordered_dict['c'] = 3 print(ordered_dict) # Output: OrderedDict([('a', 1), ('b', 2), ('c', 3)])
5.4、deque 双端队列
-
deque
类是一种高效的双端队列数据结构,支持从队列两端进行快速的插入和删除操作。它比使用列表实现的队列更加高效,尤其是在频繁地从队列两端进行操作时。from collections import deque # 创建双端队列 d = deque([1, 2, 3]) # 从左侧添加元素 d.appendleft(0) print(d) # Output: deque([0, 1, 2, 3]) # 从右侧弹出元素 last_element = d.pop() print(last_element) # Output: 3
5.5、namedtuple 命名元组
-
namedtuple
函数可以用来创建具有命名字段的元组类型。与普通元组不同,命名元组的字段可以通过名称访问,使得代码更加清晰易懂。from collections import namedtuple # 创建命名元组类型 Point = namedtuple('Point', ['x', 'y']) # 创建具有命名字段的实例 p = Point(x=1, y=2) print(p.x, p.y) # Output: 1 2
5.6、ChainMap 链式映射
-
ChainMap
类可以将多个字典或映射对象链接在一起,形成一个逻辑上的映射链。当查询键值对时,ChainMap
会按照参数列表中的顺序依次查找键值对,直到找到对应的键值对为止。因此,如果同一个键同时存在于多个映射对象中,ChainMap
会优先使用参数列表中排在前面的映射对象中的对应值。from collections import ChainMap # 创建两个字典 dict1 = {'a': 1, 'b': 2} dict2 = {'b': 3, 'c': 4} # 创建 ChainMap 对象 chain_map = ChainMap(dict1, dict2) # 查询键值对 value_a = chain_map['a'] print(value_a) # Output: 1 value_b = chain_map['b'] print(value_b) # Output: 2,因为 ChainMap 会按照链的顺序查找,找到 dict1 中的键 'b' value_c = chain_map['c'] print(value_c) # Output: 4,因为 'c' 在 dict2 中
# 更具体案例 """ 在这个案例中,ChainMap 将默认设置和用户自定义设置链接在一起,当查询设置项时会按照链的顺序依次查找,如果用户自定义了某个设置项,则会优先使用用户自定义的值,否则使用默认设置中的值。 """ from collections import ChainMap # 定义两个字典,分别表示默认设置和用户自定义设置 default_settings = {'theme': 'light', 'font_size': 12} user_settings = {'font_size': 14, 'show_line_numbers': True} # 创建 ChainMap 对象,将默认设置和用户设置链接在一起 settings = ChainMap(user_settings, default_settings) # 获取设置项 theme = settings['theme'] print(theme) # Output: 'light',因为用户设置中没有 'theme' 键,所以会使用默认设置 font_size = settings['font_size'] print(font_size) # Output: 14,因为用户设置中有 'font_size' 键,会优先使用用户设置中的值 show_line_numbers = settings['show_line_numbers'] print(show_line_numbers) # Output: True,因为用户设置中有 'show_line_numbers' 键,并且值为 True # 添加新的设置项 settings['line_spacing'] = 1.5 print(settings) # Output: ChainMap({'font_size': 14, 'show_line_numbers': True, 'line_spacing': 1.5}, {'theme': 'light', 'font_size': 12})
5.7、UserDict、UserList、UserString
-
UserDict
、UserList
、UserString
是collections
模块中的辅助类,它们分别用于创建自定义的字典、列表和字符串类。这些类可以作为基类来扩展和定制标准的字典、列表和字符串行为。from collections import UserDict # 创建自定义字典类 class MyDict(UserDict): def __contains__(self, key): # 自定义 __contains__ 方法来判断键是否存在 return key in self.data.keys() and self.data[key] > 0 # 创建 MyDict 实例 my_dict = MyDict({'a': 1, 'b': 2}) # 判断键是否存在且值大于0 print('a' in my_dict) # Output: True,因为 'a' 存在且值为正数 print('c' in my_dict) # Output: False,因为 'c' 不存在
5.8、其他工具
ChainMap
类还提供了一些方法如new_child()
来创建新的映射链,maps
属性来获取所有映射对象的视图等。Counter
类除了统计计数外,还提供了诸如subtract()
、elements()
等方法来支持计数器的运算和操作。