sys.argv
: 这是一个包含命令行参数的列表。当你在命令行中运行一个 Python 脚本时,sys.argv
中会包含脚本的名称以及任何传递给脚本的参数。sys.modules
: 这是一个字典,包含当前 Python 解释器中已加载的所有模块的信息。你可以使用它来查看已导入的模块或者手动添加模块。sys.exit([arg])
: 这个函数用于退出 Python 解释器。你可以选择传递一个整数参数给 sys.exit
,作为退出状态码。通常情况下,0 表示成功退出,非零值表示出错。sys.stdin
, sys.stdout
, sys.stderr
: 这些变量分别代表标准输入、标准输出和标准错误流。你可以重定向这些流来进行输入输出的操作。sys.platform
: 这个变量包含当前系统的平台信息,例如 'win32'
、'linux'
等。sys.version
: 这是一个字符串,包含当前 Python 解释器的版本信息。sys.path
: 这是一个包含模块搜索路径的列表。你可以通过修改 sys.path
来添加或删除模块搜索路径。sys.getsizeof(obj)
: 这个函数返回对象 obj
占用的内存大小,单位为字节。sys.setrecursionlimit(limit)
: 设置递归调用的最大深度限制。sys.getrecursionlimit()
: 返回当前递归调用的最大深度限制。sys.getdefaultencoding()
: 返回 Python 解释器默认的字符编码。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)]
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(, {'apple': [10, 5], 'banana': [20]})
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)])
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
namedtuple
函数可以用来创建具有命名字段的元组类型。与普通元组不同,命名元组的字段可以通过名称访问,使得代码更加清晰易懂。
from collections import namedtuple
# 创建命名元组类型
Point = namedtuple('Point', ['x', 'y'])
# 创建具有命名字段的实例
p = Point(x=1, y=2)
print(p.x, p.y) # Output: 1 2
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})
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' 不存在
ChainMap
类还提供了一些方法如 new_child()
来创建新的映射链,maps
属性来获取所有映射对象的视图等。Counter
类除了统计计数外,还提供了诸如 subtract()
、elements()
等方法来支持计数器的运算和操作。