python常用库(二)

本文详细介绍了Python的sys库和collections库中的关键功能,包括命令行参数处理、模块导入、程序退出、标准流管理、系统信息获取、内存管理,以及collections库中的Counter、defaultdict、OrderedDict、deque、namedtuple和ChainMap等高级数据结构的使用方法。
摘要由CSDN通过智能技术生成

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
  • UserDictUserListUserStringcollections 模块中的辅助类,它们分别用于创建自定义的字典、列表和字符串类。这些类可以作为基类来扩展和定制标准的字典、列表和字符串行为。

    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() 等方法来支持计数器的运算和操作。
  • 38
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值