python标准库(二)

格式化输出

  • reprlib 库用来格式化
>>> import reprlib
>>> reprlib.repr(set('aabbccddeeeff'))
"{'a', 'b', 'c', 'd', 'e', 'f'}"
>>>
  • 对集合能排序
>>> reprlib.repr(set('fdajfejaa'))
"{'a', 'd', 'e', 'f', 'j'}"
>>>
  • pprint库用来缩进和空行,输出的内置对象和用户自定义对象能被解释器直接读取。
>>> p = [[['red', 'yellow'], ['pink']], ['black'], 'blue']
>>> pprint.pprint(p, width=5)
[[['red','yellow'],['pink']],['black'],'blue']
>>>
  • textwrap用来格式化段落
>>> import textwrap as tw
>>> doc = ''' she is so gorgeous! I really like her !
...     May the distance between her want and I am weak .
...     Try Hard... Learning your all time... aseert...'''
>>> print(tw.fill(doc, width=40)) # 每行40个字母she is so gorgeous! I really like her !
May the distance between her want and I
am weak .         Try Hard... Learning
your all time... aseert...
>>>
  • Locale 模块处理与特定地域相关的数据格式。
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'English_United States.1252')
'English_United States.1252'
>>>
>>> conv = locale.localeconv()
>>> conv
{'int_curr_symbol': 'USD', 'currency_symbol': '$', 'mon_decimal_point': '.', 'mon_thousands_sep': ',', 'mon_grouping': [3, 0], 'positive_sign': '', 'negative_sign': '-', 'int_frac_digits': 2, 'frac_digits': 2, 'p_cs_precedes': 1, 'p_sep_by_space': 0, 'n_cs_precedes': 1, 'n_sep_by_space': 0, 'p_sign_posn': 3, 'n_sign_posn': 0, 'decimal_point': '.', 'thousands_sep': ',', 'grouping': [3, 0]}
>>>
>>> x = 12345.6
>>> locale.format_string("%d", x, grouping =True) # 对数字进行分隔
'12,345'
>>> locale.format_string("%s%*.f", (conv['currency_symbol'], conv['frac_digits'], x), grouping=True)
'$12,346'

模块

  • string模块的Template 类

    用于格式化的 占位符($(字母,数字,下划线)) $ + 标识符 , 如果在外面加上{} 后面可直接跟字母,数字(不用空格)。


T = Template('${k}like $kk')
T.substitute(k='', kk='')
	>>> from string import Template # 导入摸板>>> t = Template('${she} is so $how')  # $加标识符表示占位>>> t.substitute(she='she', how='adorable') # 把占位符给替换了'she is so adorable'>>># 如果,参数不完整>>> t = Template('return the $item to $owner')>>> t.substitute(dict(item='unladen swallow')) # 未提供 owner的参数Traceback (most recent call last):File "<stdin>", line 1, in <module>File "D:\softWare\python\python3.7\lib\string.py", line 132, in substitutereturn self.pattern.sub(convert, self.template)File "D:\softWare\python\python3.7\lib\string.py", line 125, in convertreturn str(mapping[named])KeyError: 'owner'>>># 用户也可能出现上面滴参数不完整情况 用safe_substitute>>> t.safe_substitute(dict(item='unladen swallow'))'return the unladen swallow to $owner'>>>
  • 对浏览器照片重命名
	>>> import time, os.path>>> photofiles = ['img_102.jpg', 'img_104.jpg', 'img_106.jpg']>>> class BatchRename(Template): # 继承模板类...     delimiter = '%'...>>> fmt = input('输入重命名的样式(%d-date %n-sequm %f-format): ')输入重命名的样式(%d-date %n-sequm %f-format): lel_%n%f>>> fmt'lel_%n%f'>>> br = BatchRename(fmt)>>> date = time.strftime('%d%b%y')>>> date'13May20'>>> for i, filename in enumerate(photofiles):...     base, ext = os.path.splitext(filename)...     newname = br.substitute(d=date, n=i, f=ext)...     print('{0} --> {1}'.format(filename, newname))...img_102.jpg --> lel_0.jpgimg_104.jpg --> lel_1.jpgimg_106.jpg --> lel_2.jpg>>>

多线程

  • 线程是一种对于非顺序依赖的多个任务进行解耦的技术。
  • 多线程可以提高应用的响应效率 当接收用户输入的同时,保持其他任务在后台运行。
  • 应用场景,将i/o 和 计算运行在两个并行的线程中。
import zipfile, threadingclass AsyncZip(threading.Thread):def __init__(self, infile, outfile): # 构造输入输出文件threading.Thread.__init__(self)self.infile = infileself.outfile = outfiledef run(self):f = zipfile.ZipFile(self.outfile, 'w', zipfile.ZIP_DEFLATED) # 打开文件只写f.write(self.infile) # 压缩文件f.close()print('完成后台压缩...', self.infile)# 测试
background = AsyncZip('e:/MyStudy/bitQianBlog/python/pythonBasic/StandLib/test.txt', 'output.zip')
background.start()print('主程序后台运行中...')background.join() # 等待后台任务完成...print('主程序一直等待后台任务完成...')

  • 日志记录 – logging模块
>>> import logging as log # 日志记录模块
>>> log.debug('解决bug信息...')
>>> log.info('消息')
>>> log.warning('警告, 配置文件%s找不到', 'server.conf')
WARNING:root:警告, 配置文件server.conf找不到
>>> log.error('存在错误')
ERROR:root:存在错误
>>> log.critical('判定错误 -- 关机')
CRITICAL:root:判定错误 -- 关机
>>>

弱引用weakdef

  • py 会自动进行内存管理(garbage collection)。
  • 当某个对象的最后一个引用被移除后 不久就会释放所占的内存。
  • weakdef 可以不创建引用,就可跟踪其它对象。
  • 当对象不再需要时,它将自动从一个弱引用表中被移除,并为弱引用对象触发一个回调。
  • 典型应用包括对创建开销较大的对象进行缓存:
import weakref, gc
class A:def __init__(self, value):self.value = valuedef __repr__(self):return str(self.value)a = A(10) # 创建一个引用
d = weakref.WeakValueDictionary()
d['primary'] = a
print(d['primary']) # 10del a # 移除引用print(gc.collect()) # 0print(d['primary']) # KeyError: 'primary'
  • 用于操作列表的工具
	array模块提供的array()对象,类似列表,但只储存一种数据类型>>> # 以两个字节为存储单元的无符号d二进制数值的数组(类型码为 'H')>>> from array import array>>> a = array([1, 2, 3, 4])Traceback (most recent call last):File "<stdin>", line 1, in <module>TypeError: array() argument 1 must be a unicode character, not list>>> a = array('H', [1, 2, 3, 4])>>> sum(a)10>>> a[0:2]  # 切片array('H', [1, 2])>>>>>> aarray('H', [1, 2, 3, 4])collections 的 deque() 对象 队列,增删快,查找慢>>> from collections import deque>>> d = deque(['a', 'b', 'c', 'd'])>>> d.append('e')>>> ddeque(['a', 'b', 'c', 'd', 'e'])>>> print('出队, ', d.popleft())出队,  a>>> ddeque(['b', 'c', 'd', 'e'])bisect(平分,二等分)模块操作排序列表的函数>>> import bisect as bi>>> scores = [(100, 'ruby'), (200, 'python'), (400, 'java'), (500, 'c')]>>> bi.insort(scores, (300, 'javascript')) # 按分数排序>>> scores[(100, 'ruby'), (200, 'python'), (300, 'javascript'), (400, 'java'), (500, 'c')]heapq 模块 基于列表来实现堆函数。 你可选择性的排序你要的列表。>>> from heapq import heapify, heappop, heappush>>> data = [2, 1, 4, 7, 5, 0, 9, 8, 3, 6]>>> heapify(data) # 按堆顺序重新排列列表>>> data[0, 1, 2, 3, 5, 4, 9, 8, 7, 6]>>> data[0, 1, 2, 3, 5, 4, 9, 8, 7, 6]>>> heappush(data, -1) # 添加-1>>> data[-1, 0, 2, 3, 1, 4, 9, 8, 7, 6, 5]>>> heappop(data) # 移除-1-1>>> data[0, 1, 2, 3, 5, 4, 9, 8, 7, 6]>>> [heappop(data) for i in range(3)] # 从堆中移除前三个数[0, 1, 2]>>> data[3, 5, 4, 6, 8, 7, 9]

decimal模块

• 财务应用和其他需要精确十进制表示的用途,
• 控制精度,
• 控制四舍五入以满足法律或监管要求,
• 跟踪有效小数位,或
• 用户期望结果与手工完成的计算相匹配的应用程序。

  • 用decimal计算,和直接计算
	>>> round(Decimal('0.70') * Decimal('1.05'), 2)Decimal('0.74')>>>>>> round(0.70 * 1.05, 2)0.73
  • 对比float的浮点运算 和 比较
	>>> Decimal('1.00') % Decimal('0.10')Decimal('0.00')>>>>>> 1.00 % 0.100.09999999999999995>>>>>> sum([Decimal('0.1')*10]) == Decimal('1.0')True>>> s = sum([0.1] * 10)>>> s0.9999999999999999>>> s == 1.0False
  • decimal提供的精度
	>>> getcontext().prec = 36>>> Decimal(1) / Decimal(7)Decimal('0.142857142857142857142857142857142857')

ps:学习笔记。请看:
python标准库(一)

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

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

相关文章

实验4 进程运行轨迹的跟踪与统计

进程运行轨迹的跟踪与统计 难度系数&#xff1a;★★★☆☆ 实验目的 掌握Linux下的多进程编程技术&#xff1b;通过对进程运行轨迹的跟踪来形象化进程的概念&#xff1b;在进程运行轨迹跟踪的基础上进行相应的数据统计&#xff0c;从而能对进程调度算法进行实际的量化评价&…

虚拟环境创建,pip管理包

windows10虚拟环境的创建&#xff0c;pip管理包1.虚拟环境的创建1.1 为什么要创建虚拟环境1.2 创建虚拟环境1.3 激活虚拟环境1.3.1 激活方式1.3.2 检查是否创建成功2.用pip管理包2.1 pip的基本使用2.2 pip创建安装的文件requirements.txt2.3 安装包对应的版本2.4 用pip - r ins…

vi文字处理器

http://blog.csdn.net/wangloveall/article/details/22649331 摘要&#xff1a;vi是类UNIX命令行接口的标准文字处理软件&#xff0c;也是进行shell脚本程序编写与服务器设置的非常重要的工具。本文介绍vi文字处理器&#xff0c;包括vi简介、vi怎么使用、vi的加强版vim。 关键词…

用numpy,matplotlib库画笛卡尔爱心曲线

1650年&#xff0c;斯德哥尔摩的街头&#xff0c;52岁的笛卡尔邂逅了18岁的瑞典公主克里斯汀。   那时&#xff0c;落魄、一文不名的笛卡尔过着乞讨的生活&#xff0c;全部的财产只有身上穿的破破烂烂的衣服和随身所带的几本数学书籍。生性清高的笛卡尔从来不开口请求路人施舍…

centos7虚拟机共享本机磁盘的方法

说明&#xff1a;这个方法不一定是通用的&#xff0c;也可能不是最快捷的&#xff0c;但是感觉比较稳妥的办法。 1&#xff0c;首先坚持两个进程是否启动&#xff1a;右击&#xff1a;我的电脑-管理-服务&#xff0c;检查server服务和Workstation服务是否启动。如果没有启动&a…

服务器小程序servlet的使用

servlet的创建使用一&#xff0c;三种创建方式1.1 实现servlet接口1.2 继承GenericServlet1.3 继承HttpServlet二&#xff0c;servlet使用2.1 web.xml文件的配置2.1.1 创建xml文件2.1.2 手写web.xml文件2.2 在8080端口下访问2.2.1 servlet的生命周期servlet是服务器小程序。是个…

el表达式,c标签的使用

el表达式的使用 学生类 public class Student {int id;String name;String sex;String birth;public Student() {}public Student(int id, String name, String sex, String birth) {super();this.id id;this.name name;this.sex sex;this.birth birth;}// el 表达式取实…

conda虚拟环境中安装ipython

问题&#xff1a;今天安装了tensorflow&#xff0c;启动ipython竟然提示如下&#xff1a; In [1]: import tensorflow as tf --------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recen…

使用session保持登录状态,cookie保存用户账号密码

session保存登录状态与cookie保存账号密码1. session维持登录状态1.1 代码实现2. cookie保存账号密码2.1 什么是cookie2.2 cookie记住账号密码1. session维持登录状态 利用session的生命周期实现 1.1 代码实现 login页面表单部分 <form action"judgeLoginSession&qu…

js表单验证,给出友好的提示

js验证表单 注意&#xff1a; 只做非空验证, 只是个小demo学习思想&#xff0c;onblur onfocus onsubmit的使用&#xff0c;给出友好提示网上有很多有良好&#xff0c;强大的控件&#xff0c;用于用户输入 代码实现 js代码 <script>function check_form(form) {// 得到f…

注册demo,使用jQuery异步验证账号是否存在

功能 jQuery验证账号是否存在form表单提交判断&#xff0c;失焦判断 界面 Ajax代码&#xff0c;验证用户rye1是否存在 function check_UserId() {$userId $("#userId").val();$.post("checkUserId","userId" $userId,function (result) { // 异…

虚拟机的网络连接模式

本文参考文章如下&#xff0c;感谢原作者&#xff1a; 《虚拟机的桥接模式和NAT模式》 https://blog.csdn.net/qq_40198004/article/details/89785806 1、桥接模式 桥接模式:直接连接物理网络&#xff0c;也就是连的你交换机的网络和你主机的IP在一个网段上&#xff0c;将虚拟…

自考感悟,话谈备忘录模式

引言&#xff1a; 2014年4月20号上午11:30&#xff0c;正式结束了自己的自学考试&#xff01;考完之后瞬间感觉放松了开来&#xff01;全身无力则是自己20号下午的唯一感受。放松了半天&#xff0c;今天回归正轨&#xff01;又回到了和生活息息相关的设计模式上来&#xff01;今…

小白教你用Java生成验证码

验证码生成效果一&#xff0c;生成验证码二&#xff0c;页面收到验证码三&#xff0c;验证验证码是否填写正确效果 点击验证码可切换 给出提示 一&#xff0c;生成验证码 package servlet;import java.io.IOException;import javax.servlet.ServletException; import jav…

modbus rtu 协议转DLT645-2007和DLT645-1997电表协议转换器定制,

现场会碰到现场数据为Modbus协议&#xff0c;但是后台系统为DLT645协议系统&#xff0c;本模块支持将工业ModbusRtu协议转换为电表国标协议DLT645协议&#xff0c;支持1997和2007俩种标准&#xff0c;只需要进行简单的配置&#xff0c;就可以实现Modbus 协议转DLT645协议&#…

残差网络(ResNet)

普通块 残差块 现在一个大概的理解是&#xff0c;增加x这条“短路”后&#xff0c;肯定优于&#xff08;恒等映射&#xff09;&#xff0c;可以考虑两种情况&#xff1a;可以拟合出远远高于&#xff08;恒等映射&#xff09;&#xff0c;或者根本拟合不出高于&#xff08;恒等…

AI绘画训练一个扩散模型-上集

介绍 AI绘画&#xff0c;其中最常见方案基于扩散模型&#xff0c;Stable Diffusion 在此基础上&#xff0c;增加了 VAE 模块和 CLIP 模块&#xff0c;本文搞了一个测试Demo&#xff0c;分为上下两集&#xff0c;第一集是denoising_diffusion_pytorch &#xff0c;第二集是diff…