【学Python自动化】 11 标准库简介 —— 第二部分

一、格式化输出

reprlib 模块

  • 提供定制版 repr(),缩略显示大型或深层嵌套对象

import reprlib
reprlib.repr(set('supercalifragilisticexpialidocious'))
# "{'a', 'c', 'd', 'e', 'f', 'g', ...}"

pprint 模块

  • 美化输出,添加换行和缩进显示复杂数据结构

import pprint
t = [[[['black', 'cyan'], 'white', ['green', 'red']], [['magenta', 'yellow'], 'blue']]]
pprint.pprint(t, width=30)

textwrap 模块

  • 格式化文本段落适应屏幕宽度

import textwrap
doc = """长文本..."""
print(textwrap.fill(doc, width=40))

locale 模块

  • 处理地域文化相关的数据格式

import locale
locale.setlocale(locale.LC_ALL, 'English_United States.1252')
x = 1234567.8
locale.format_string("%d", x, grouping=True)  # '1,234,567'

二、模板

string.Template 类

  • 简化模板语法,支持占位符替换

from string import Template
t = Template('${village}folk send $$10 to $cause.')
t.substitute(village='Nottingham', cause='ditch fund')
  • safe_substitute():缺失数据时保留原占位符

t.safe_substitute(d)  # 不会抛出KeyError
  • 自定义分隔符:创建Template子类

class BatchRename(Template):delimiter = '%'

三、使用二进制数据记录格式

struct 模块

  • 处理不定长度的二进制记录格式

import struct
with open('myfile.zip', 'rb') as f:data = f.read()
fields = struct.unpack('<IIIHH', data[start:start+16])
# 小端字节序,无符号整数

四、多线程

threading 模块

  • 实现后台任务运行

import threading, zipfileclass AsyncZip(threading.Thread):def run(self):# 压缩操作print('Finished background zip')background = AsyncZip('mydata.txt', 'myarchive.zip')
background.start()
background.join()  # 等待线程结束
  • 同步原语:线程锁、事件、条件变量、信号量

  • 推荐使用 queue:集中资源请求,更易设计

五、日志记录

logging 模块

  • 灵活的日志记录系统

import logging
logging.debug('Debug info')
logging.info('Info message')
logging.warning('Warning: %s not found', 'server.conf')
logging.error('Error occurred')
logging.critical('Critical error')
  • 日志级别:DEBUG, INFO, WARNING, ERROR, CRITICAL

  • 输出选项:文件、邮件、套接字、HTTP服务器等

六、弱引用

weakref 模块

  • 跟踪对象而不创建永久引用

import weakref, gcclass A:def __init__(self, value):self.value = valuea = A(10)
d = weakref.WeakValueDictionary()
d['primary'] = a  # 不创建强引用
del a
gc.collect()
d['primary']  # KeyError: 对象已被回收

七、用于操作列表的工具

array 模块

  • 类型一致、存储密度高的数组

from array import array
a = array('H', [4000, 10, 700, 22222])  # 双字节无符号整数
sum(a)  # 26932

collections.deque

  • 高效的双端队列

from collections import deque
d = deque(["task1", "task2", "task3"])
d.append("task4")
d.popleft()  # "task1"

bisect 模块

  • 操作有序列表

import bisect
scores = [(100, 'perl'), (200, 'tcl'), (400, 'lua')]
bisect.insort(scores, (300, 'ruby'))

heapq 模块

  • 堆队列算法

from heapq import heapify, heappop, heappush
data = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
heapify(data)
heappush(data, -5)
[heappop(data) for i in range(3)]  # [-5, 0, 1]

八、十进制浮点运算

decimal 模块

  • 精确的十进制浮点运算

from decimal import *
round(Decimal('0.70') * Decimal('1.05'), 2)  # Decimal('0.74')
round(.70 * 1.05, 2)  # 0.73(二进制浮点不精确)
  • 适用场景:

    • 财务应用

    • 需要精确十进制表示

    • 控制精度和四舍五入

    • 跟踪有效小数位

    • 精确性优势:


Decimal('1.00') % Decimal('.10')  # Decimal('0.00')
sum([Decimal('0.1')]*10) == Decimal('1.0')  # True
  • 精度控制:

getcontext().prec = 36  # 设置精度
Decimal(1) / Decimal(7)  # 36位小数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/95522.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Kubernetes】知识点2

15. 什么是Pod的根容器&#xff1f;答&#xff1a;Pod 的根容器是每个 Pod 中默认存在的一个特殊容器pause容器&#xff0c;有时也称为infra容器&#xff0c;它是Pod 启动时创建的第一个容器&#xff0c;也是整个 Pod中所有容器的 “父容器”。其核心作用是为 Pod 内的所有容器…

视频增强AI哪个效果好?实战对比帮你找到最适合的工具

hitpaw 牛小影hitpaw 牛小影在处理低质量视频时&#xff0c;我们经常会遇到画面模糊、噪点过多、分辨率不足等问题&#xff0c;比如老旧视频资料修复、监控录像清晰化、手机拍摄视频画质提升等。这时候&#xff0c;一款好用的视频增强AI软件就成了刚需。下面就为大家盘点几款效…

C#工作流示例(WorkflowCore)

using Microsoft.Extensions.DependencyInjection; using WorkflowCore.Interface; using WorkflowCore.Models;namespace LeaveRequestWorkflow {// 请假申请单public class LeaveBill{/// <summary>/// 申请人/// </summary>public string EmployeeName { get; s…

两个子进程之间使用命名pipe

两个子进程间可以使用命名管道&#xff0c;非常简单。管道如果文件一样存在硬盘中&#xff0c;使用ls可以查看&#xff0c;管道文件0字节。使用fork函数分别创建两个子进程。 一个负责读数据&#xff0c;一个负责写数据。 #define _GNU_SOURCE #include <stdio.h> #inclu…

第一讲、Kafka 初识与环境搭建

一、Kafka 是什么&#xff1f; Apache Kafka 是一个分布式的消息队列&#xff08;Message Queue&#xff09;与流处理平台。 它最早由 LinkedIn 开发&#xff0c;后来捐赠给 Apache 基金会&#xff0c;现已广泛应用于日志收集、实时数据管道和大数据处理。 Kafka 的特点&…

Conda相关的用法

1、背景 此文主要记录conda的一些用法&#xff0c;大部分命令来自ai搜索以及自己的理解。 2、安装conda 2.1 选择 conda 版本 2.1.1 Anaconda 含有 Conda 大量科学计算包&#xff08;NumPy、Pandas、Matplotlib 等&#xff09;适合数据科学、机器学习初学者下载地址&…

数据库选择有讲究?SQLite、PostgreSQL还是MySQL?

不同规模的项目&#xff0c;数据库选择有讲究。大家好&#xff0c;我是技术支持彼得&#xff0c;每天两眼一睁就是为客户解决问题。在日常使用我们的视频平台时&#xff0c;很多用户会问到数据库选择的问题。今天就来详细说说EasyGBS、EasyNVR和EasyCVR三大平台该如何选择数据库…

在VMware的Win10虚拟机中安装使用ENSP

VMware安装Windows10 安装ENSP及相关软件 把安装ENSP所使用的相关复制到已安装好的Windows10虚拟机中&#xff0c;如下图所示。 安装VirtualBox 安装时请确保路径为英文目录&#xff0c;并在出现"安装设备软件"或"Oracle USB设备"提示时选择安装选项。具…

Go 语言面试题详解之接口 (Interface) 详解一文吃透

自古流传着一个传言...在 Go 语言面试的时候必有人会问接口&#xff08;interface&#xff09;的实现原理。这又是为什么&#xff1f;为何对接口如此执着&#xff1f;实际上&#xff0c;Go 语言的接口设计在整体扮演着非常重要的角色&#xff0c;没有他&#xff0c;很多程序估计…

ansible循环+判断(with,loop,when,if,for)

一、文档核心定位 本文档聚焦Ansible自动化运维中的两大核心功能——循环与判断&#xff0c;通过“功能说明完整Playbook代码”的形式&#xff0c;覆盖循环迭代场景&#xff08;列表、字典、文件等&#xff09;、数据处理过滤器&#xff08;字符串、数字、加密等&#xff09;、…

在linux下使用MySQL常用的命令集合

1. 数据库查看和选择-- 查看所有数据库 SHOW DATABASES;-- 选择使用某个数据库&#xff08;需要修改&#xff1a;your_database_name&#xff09; USE your_database_name;-- 查看当前正在使用的数据库 SELECT DATABASE();说明&#xff1a;your_database_name 替换为你要操作的…

mysy2使用

参考链接 https://blog.csdn.net/qq_36525177/article/details/115279468 介绍 要把linux程序在windows上编译&#xff0c;且最好兼容posix标准&#xff0c;就用msys2。 使用 1、先下载安装&#xff0c;我装在D:\mysy2 2、打开vscode&#xff0c;不要切换目录&#xff0c;…

【Protues仿真】基于AT89C52单片机的温湿度测量

目录 0案例视频效果展示 1DHT11温度湿度传感器 1.1传感器简介 1.2引脚定义&#xff08;从左到右&#xff0c;面对网格面&#xff09; 1.3时序 & 校验&#xff08;原理速览&#xff09; 1.4常见故障排查 2 DHT11温度湿度传感器数据 2.1 DHT11温度湿度传感器数据格式…

JavaScript箭头函数与普通函数:两种工作方式的深度解析

文章目录JavaScript箭头函数与普通函数&#xff1a;两种"工作方式"的深度解析 &#x1f3f9;&#x1f19a;&#x1f468;&#x1f4bc;引言&#xff1a;为什么需要箭头函数&#xff1f;核心区别全景图对比表格&#xff1a;箭头函数 vs 普通函数关系示意图一、this绑定…

蓝光三维扫描技术赋能内衣胸垫设计:从精准制造到个性化体验的革新之旅

在竞争激烈的内衣市场中&#xff0c;产品设计的精准性、舒适度和个性化已成为品牌制胜的关键。传统内衣设计依赖主观经验与样品反复调整&#xff0c;不仅周期长、成本高&#xff0c;且难以实现对复杂胸型的精准适配。为应对这一挑战&#xff0c;某知名内衣品牌采用新拓三维XTOM…

内存保护单元MPU

一、介绍内存保护单元 是一种硬件模块&#xff0c;通常集成在处理器内核中&#xff0c;用于管理和管理对内存的访问&#xff0c;以提高系统的可靠性和安全性。它的核心任务是保护。想象一下&#xff0c;一个操作系统中有多个任务在运行&#xff1a;* 任务A的代码 bug 可能会错误…

【Kubernetes知识点】监控升级,备份及Kustomize管理

目录 1.举例说明K8s中都有哪些常规的维护管理操作。 2.如何升级K8s到新的版本&#xff1f;在升级过程中应该注意哪些事项&#xff1f; 3.解释ETCD及其备份和恢复的过程。 4.Kustomization在Kubernetes中的作用 1.举例说明K8s中都有哪些常规的维护管理操作。 集群状态监控…

《Effective Java》第4条:通过私有构造器强化不可实例化的能力

说明&#xff1a; 关于本博客使用的书籍&#xff0c;源代码Gitee仓库 和 其他的相关问题&#xff0c;请查看本专栏置顶文章&#xff1a;《Effective Java》第0条&#xff1a;写在前面&#xff0c;用一年时间来深度解读《Effective Java》这本书 正文&#xff1a; 原文P15&am…

20.Linux进程信号(一)

信号: 产生->保存->处理一、预备知识信号vs信号量->没有任何关系什么叫做信号&#xff1f;中断我们正在做的事情&#xff0c;是一种事件的异步通知机制。同步和异步理解&#xff1a;同步指事件发生具有一定的顺序性&#xff08;如命名管道中服务端读方式打开会阻塞&am…

【C++】Vector核心实现:类设计到迭代器陷阱

vector 模拟实现代码的核心下面从类设计、核心接口、内存安全、常见陷阱、测试场景5 个维度&#xff0c;提炼需重点掌握的知识点&#xff0c;覆盖面试高频考点与实践易错点&#xff1a;一、类结构与成员变量&#xff08;基础框架&#xff09;vector 的核心是通过三个迭代器&…