暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python 基础知识整理 - 标准库简介(3)

数据库杂货铺 2022-01-02
387

日期和时间

 

datetime 模块提供了类来对日期和时间进行简单或者复杂的操作。此模块支持日期和时间计算,但实现的重点是高效提取数据成员,进行格式化输出。该模块还支持支持时区感知的对象。

 

# 日期构造以及格式化
from datetime import date
now = date.today()
print(now)
print(now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B."))
print(now.strftime('%Y{y}%m{m}%d{d}').format(y='年', m='月', d='日'))


# 支持日历计算
birthday = date(1964, 7, 31)
age = now - birthday
print(age.days)
复制

 

运行结果:

 

2022-01-01
01-01-22. 01 Jan 2022 is a Saturday on the 01 day of January.
20220101
20973
复制

 

数据压缩

 

zlibgzipbz2lzmazipfile tarfile 模块直接支持常用的数据归档和压缩格式。

 

import zlib


s = b'witch which has which witches wrist watch'
print(len(s))


t = zlib.compress(s)
print(t)
print(len(t))


print(zlib.decompress(t))


print(zlib.crc32(s))
复制

 

运行结果:

 

41
b'x\x9c+\xcf,I\xceP(\xcf\xc8\x04\x92\x19\x89\xc5PV9H4\x15\xc8+\xca,.Q(O\x04\xf2\x00D?\x0f\x89'
37
b'witch which has which witches wrist watch'
226805979
复制

 

性能测量

 

一些 Python 用户对用不同方法处理同一问题的性能差异有浓厚的兴趣。Python 提供了一个测量工具,可以立即回答这些问题。

 

例如,可能会尝试使用元组打包和解包功能,而不是传统的参数交换方法。timeit 模块很快显示出适度的性能优势:

 

from timeit import Timer


print(Timer('t=a; a=b; b=t', 'a=1; b=2').timeit())
print(Timer('a,b = b,a', 'a=1; b=2').timeit())
复制

 

timeit 的细粒度级别相比,profile pstats 模块提供了在更大的代码块中识别时间的工具。

 

质量控制

 

开发高质量软件的一种方法是在开发时为每个功能编写测试,并在开发过程中频繁地运行这些测试。

 

doctest 模块提供了一个工具,用于扫描模块和验证嵌入到程序文档字符串中的测试。测试构造非常简单,只需将一个典型调用及其结果剪切并粘贴到文档字符串中即可。这种方式通过向用户提供一个示例来改进文档,它允许 doctest 模块确保代码保持文档的真实性:

 

def average(values):
"""Computes the arithmetic mean of a list of numbers.


>>> print(average([20, 30, 70]))
40.0
"""
return sum(values) / len(values)


import doctest
print(doctest.testmod()) # 自动验证嵌入的测试
复制

 

运行结果:

 

TestResults(failed=0, attempted=1)
复制

 

如果把40.0 改成其他数字,比如 30.0

 

运行结果:

 

Failed example:
print(average([20, 30, 70]))
Expected:
30.0
Got:
40.0
**********************************************************************
1 items had failures:
1 of 1 in __main__.average
***Test Failed*** 1 failures.
TestResults(failed=1, attempted=1)
复制

 

unittest 模块不像 doctest 模块那样简单,但它允许在一个单独的文件中维护一组更全面的测试:

 

import unittest


def average(values):
return sum(values) / len(values)


class TestStatisticalFunctions(unittest.TestCase):


def test_average(self):
self.assertEqual(average([20, 30, 70]), 40.0)
self.assertEqual(round(average([1, 5, 7]), 1), 4.3)
with self.assertRaises(ZeroDivisionError):
average([])
with self.assertRaises(TypeError):
average(20, 30, 70)


unittest.main()
复制

 

运行结果:

 

.
----------------------------------------------------------------------
Ran 1 test in 0.000s


OK
复制

 

自带工具(Batteries Included

 

Python 有一个自带工具的哲学。这一点可以从它的大型包的复杂和健壮的功能中得到最好的体现。例如:

 

 xmlrpc.client xmlrpc.server 模块使实现远程过程调用成为一项几乎微不足道的任务。尽管模块名称包含 xml,但不需要直接了解或处理 XML

 

 email 包是一个用于管理电子邮件消息的库,包括 MIME 和其他基于 RFC 2822 的消息文档。与实际发送和接收消息的 smtplib poplib 不同,email 包有一个完整的工具集,用于构建或解码复杂的消息结构(包括附件),以及实现互联网编码和报头协议。

 

 json 包为解析这种流行的数据交换格式提供了强大的支持。csv 模块支持以逗号分隔值格式直接读取和写入文件,数据库和电子表格通常支持这种格式。xml.etree.ElementTreexml.dom xml.sax 包支持 XML 处理。总之,这些模块和包大大简化了 Python 应用程序和其他工具之间的数据交换。

 

 sqlite3 模块是 SQLite 数据库库的包装器,提供了一个可以使用稍微不标准的 SQL 语法进行更新和访问的持久数据库。

 

 国际化受到许多模块的支持,包括 gettextlocale codecs 包。

 

 

 

 

 

 

官方文档:

https://docs.python.org/3.9/tutorial/stdlib.html

文章转载自数据库杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论