python17:基础库概述

这里对python的基础库做一个简要概述,包括每个模块的基本功能和常用操作。更详细的信息请参考Python库参考。

操作系统接口

操作系统接口对应os模块,用于与操作系统交互:

>>> import os
>>> os.getcwd()      # 返回当前的工作目录
'C:\\Python34'
>>> os.chdir('/server/accesslogs')   # 改变当前工作目录
>>> os.system('mkdir today')   # 运行系统命令mkdir
0

注意使用import os导入os模块,不要使用from os import *,防止os.open()和内建函数open()冲突。

内建函数dir()和help()可以帮助使用os这样的大模块:

>>> import os
>>> dir(os)
<返回所有模块方法的列表>
>>> help(os)
<返回模块的手册,该手册来自模块的docstrings>

对于日常文件和文件夹管理任务,shutil模块提供了更易用的更高层次的接口。

>>> import shutil
>>> shutil.copyfile('data.db', 'archive.db')
'archive.db'
>>> shutil.move('/build/executables', 'installdir')
'installdir'

文件通配符

glob模块提供了一个函数用于搜索指定文件夹下的文件列表(使用通配符‘*‘):

>>> import glob
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']

命令行参数

通常工具脚本经常需要处理命令行参数,这些参数在sys模块的argv属性中作为一个列表存储。例如,如果你在命令行中执行python demo.py one two three,则会得到:

>>> import sys
>>> print(sys.argv)
['demo.py', 'one', 'two', 'three']

getopt模块使用Unix的getopt()函数处理sys.argv。更多强大的和可扩展的命令行处理函数被argparse模块提供。

错误输出重定向和程序终止

sys模块也提供了属性stdin、stdout和stderr。后者为发出警告和错误信息是有用的,即使当stdout被重定向后任然使他们可见。

>>> sys.stderr.write('Warning, log file not found starting a new one\n')
Warning, log file not found starting a new one

终止一个脚本最直接的方法就是调用sys.exit()。

字符串模式匹配

re模块提供了正则表达式工具,对于复杂的字符串匹配和处理,正则表达式提供了简洁的、最优的解决方案:

>>> import re
>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
>>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
'cat in the hat'

当今需要简单的功能时,string的方法是更好的,因为他们更加易于理解和阅读:

>>> 'tea for too'.replace('too', 'two')
'tea for two'

数学运算

math模块提供了基于C库的浮点运算函数的入口:

>>> import math
>>> math.cos(math.pi / 4)
0.70710678118654757
>>> math.log(1024, 2)
10.0

random模块提供了工具随机选择工具:

>>> import random
>>> random.choice(['apple', 'pear', 'banana'])
'apple'
>>> random.sample(range(100), 10)   # sampling without replacement
[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
>>> random.random()    # random float
0.17970987693706186
>>> random.randrange(6)    # random integer chosen from range(6)
4

SciPy项目<http://scipy.org>为数字计算提供了多个模块。

网络

有多个模块用于连接internet和处理internet协议。其中最简单的两个是urllib.request(用于从URL获取数据)和smtplib(发送邮件):

>>> from urllib.request import urlopen
>>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
        line = line.decode('utf-8')  # 解码二进制数据到文本
        if 'EST' in line or 'EDT' in line:
            print(line)

<BR>Nov. 25, 09:43:32 PM EST

>>> import smtplib
>>> server = smtplib.SMTP('localhost')
>>> server.sendmail('[email protected]', '[email protected]',
    """To: [email protected]
    From: [email protected]

    Beware the Ides of March.
    """)
>>> server.quit()

注意第二个例子需要一个邮件服务器运行在localhost。

日期和时间

datetime模块提供类处理日期和时间。日期和时间的算法主要聚焦在为输出格式化和处理。该模块也支持时区。

>>> # dates are easily constructed and formatted
>>> from datetime import date
>>> now = date.today()
>>> now
datetime.date(2003, 12, 2)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'

>>> # dates support calendar arithmetic
>>> birthday = date(1964, 7, 31)
>>> age = now - birthday
>>> age.days
14368

数据压缩

支持通常的数据归档和压缩格式,包括模块:zlib、gzip、 bz2、lzma、zipfile和tarfile。

>>> import zlib
>>> s = b'witch which has which witches wrist watch'
>>> len(s)
41
>>> t = zlib.compress(s)
>>> len(t)
37
>>> zlib.decompress(t)
b'witch which has which witches wrist watch'
>>> zlib.crc32(s)
226805979

效率测试

一些用户对于效率问题非常关注,Python提供了一个测量工具,可以测试对于不同的方法解决同一个问题的效率。

例如,使用元组的打包和拆包特征来代替传统的参数交换可能是非常诱人的,下面使用timeit模块快速的演示了两者的效率差异:

>>> from timeit import Timer
>>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
0.57535828626024577
>>> Timer('a,b = b,a', 'a=1; b=2').timeit()
0.54962537085770791

与timeit提供的细粒度级别相反,profile和pstats模块提供了为大块代码做效率测试的工具。

质量控制

开发高质量软件的一个方法是为每个函数写测试,并在开发的过程中频繁的执行这些测试。

doctest模块提供了工具,用于扫描一个模块并验证嵌入在程序的docstring中的测试。测试是尽可能简单的语句,并包含它的结果。

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
doctest.testmod()   # automatically validate the embedded tests

unittest模块要比doctest复杂,它允许在一个单独的文件中写一整套测试:

import unittest

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() # Calling from the command line invokes all tests
时间: 2024-11-08 23:01:34

python17:基础库概述的相关文章

python18:基础库概述续

这里介绍Python的高级模块,用于专家级编程的需要,在小的脚本中很少使用. 输出格式化 reprlib模块提供了repr()的一个版本,定制大的或者多层嵌套的容器的简洁展示: >>> import reprlib >>> reprlib.repr(set('supercalifragilisticexpialidocious')) "set(['a', 'c', 'd', 'e', 'f', 'g', ...])" pprint模块为打印内建的和用

第4章 C++STL泛型库概述

/* 第二篇 C++STL泛化技术基础 第4章 C++STL泛型库概述 4.1 C++STL的发展历程 4.2 C++STL的各种实现版本 4.3 C++STL的Visual C++编译 4.4 C++STL的体系结构 4.5 C++STL存在的一些问题 4.6 本章小结 第二篇 C++STL泛化技术基础 第4章 C++STL泛型库概述 4.1 C++STL的发展历程 4.2 C++STL的各种实现版本 4.2.1 HP STL 4.2.2 SGI STL 4.2.3 STLport 4.2.4

程序设计语言-标准库概述

1 认识标准库 没有任何一个重要程序只用某种赤裸裸的程序设计语言写出的:首先总要开发出一组支持库,这也形成了进一步工作的基础. 2 第一个程序 #include<iostream>  //指编译器包含位于iostream里的标准流I/O功能的声明 int main() //定义一个main()函数,该函数没有参数,也不做任何事情 { std::cout<<"hello,world!\n"; //字符串文字量"hello,world!\n"将被

雷观(十二):构建基础库,提升研发效率

观点:IT之所以迅速普及,进入到每个人的生活.一方面是由于,IT相关技术产品,给每个人带来了丰富的虚拟世界和娱乐生活.另一方面,它大大提升了大部分行业的生产效率.社会生产力的发展方向,就是时代的发展方向.   程序员等IT技术人员,在IT届的地位,就像IT在社会生活中的地位:不可或缺.普遍存在.生产力的关键. 作为一名自学6年多的程序员,对技术的追求从未曾放弃.但我也终究意识到,纯粹的技术无法带我到达理想境界,而生产力的提高才可以把我从繁杂的基础工作中解脱出来,可以把我带向幸福美好的生活中. 与

【转】Struts1.x系列教程(4):标签库概述与安装

转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/01/15/251411.html Struts的整个视图层(就是MVC模式中的View层)是由Struts的定制标签(或者称为定制动作)和客户端代码(Javascript.HTML等)实现的.这些Struts标签被写在JSP页面中,用于生成客户端代码.进行逻辑判断等工作,使用Struts标签可以尽量

360消息系统RPC基础库迭代

https://github.com/johntech-o/blog 360消息系统RPC基础库迭代 引文: 消息系统内部各服务的通信,是依赖于RPC调用串联起来的.RPC框架的易用性,性能,开销决定了整个系统的开发的灵活性,整体性能 和负载上限.因此对于这样一个基础库,硬性要求一定是稳定高效易用的,一旦整个系统使用,除非必要不做影响应用层的修改. 但由于项目在启动时,go语言本身还没有成型的开源方案,先后开发3个版本,才完善成型. 消息系统的rpc框架的迭代,可以说是系统通信模型设计的一个缩影

容器库概述

容器类型上的操作形成了一种层次: 某些操作是所有容器类型都提供的,如下表所示 一般来说,每个容器都定义在一个头文件中,文件名与类型名相同.即,deque定义在头文件deque中,list定义在头文件list中,以此类推.容器均定义为模板类.例如对于vector,我们必须提供额外信息来生成特定的容器类型.对大多数,但不是所有容器,我们还需要额外提供元素类型信息: list<Sales_data> //保存Sales_data对象的list deque<double> //保存doub

我眼中的Linux设备树(二 基础规范概述)

二 基础规范概述 DTS(Device tree syntax,另一种说法是Device tree source)是设备树源文件,为了方便阅读及修改,采用文本格式.DTC(Device tree compiler)是一个小工具,负责将DTS转换成DTB(Device tree blob).DTB是DTS的二进制形式,供机器使用.使用中,我们首先根据硬件修改DTS文件,然后在编译的时候通过DTC工具将DTS文件转换成DTB文件,然后将DTB文件烧写到机器上(如emmc,磁盘等存储介质).系统启动时

开始编写寄几的 CSS 基础库

前言 在现在的互联网业务中,前端开发人员往往需要支持比较多的项目数量.很多公司只有 1-2 名前端开发人员,这其中还不乏规模比较大的公司.这时前端同学就需要独挡一面支持整个公司上下的前端业务,项目如流水一般从手里流过,此时更需要前端开发人员将工作工程化.流水线化. 一个栗子 现在需要编写页面中的一个按钮,结构与样式如下: <div class='button'>开始</div> 有人说,这有什么难的,不到1分钟就能写好了: .button { width: 100px; heigh