python学习笔记_13(标准库)

标准库


1. 包、模块基本概念
  • 模块,一个模块就是一个py文件,模块名和文件名一致

  • 包,为了组织模块,可以分组为包,包就是模块所在的目录,python中如果需要把目录当作包,需要在目录下创建一个__init__.py的文件,如果导入包实际导入的是次文件。

  • __all__变量,定义了模块的共有接口,在编写模块时设置__all__变量,使用import *导入只会导入all中定义的内容,否则默认导入模块中所有不以下划线开头的全局名称

  • __name__,主程序中值是__main__,在导入模块中值设定为模块的名称

2. sys模块
函数/变量描述
argv命令行参数,包括脚本名称
exit([arg])退出当前的程序,可以参数为给定的返回值或错误信息
modules映射模块名称到载入模块的字典
path查找模块所在的目录的目录列表
platform平台表示,类似sunos5或win32的平台标识
stdin标准输入流-------一个类文件(file-like)对象
stdou标准输出流-------一个类文件(file-like)对象
stderr标准错误流-------一个类文件(file-like)对象
3. os模块
函数/变量描述
environ对环境变量进行映射
system(command)在子shell中执行操作系统命令
sep路径分隔符
pathsep分隔路径的分隔符
linesep行分隔符(’\n’, ‘\r’或’\r\n’)
urandom(n)返回n字节的加密强随机数据
4. fileinput模块
函数描述
input(files[, inplace[, bakup]])便于遍历多个输入流中的行
filename()返回当前文件的名称
lineno()返回当前(累计)的行数
filelineno()放回当前文件的行数
isfirstline()检测当前是否是文件的第一行
isstdin()检测最后一行是否来自sys.stdin
nextfile()关闭当前文件,移动下一个文件
close()关闭序列
#!/bin/sh
# -*- coding: utf-8 -*-

import fileinput
import sys

for line in fileinput.input(inplace=True):
    line = line.rstrip()
    num = fileinput.filelineno()
    print '%-40s # %02d' % (line, num)
 

#保存为numberlines.py,运行python numberlines.py numberlines.py
#运行后程序文件
#!/bin/sh                                # 01
# -*- coding: utf-8 -*-                  # 02
                                         # 03
import fileinput                         # 04
import sys                               # 05
                                         # 06
for line in fileinput.input(inplace=True): # 07
    line = line.rstrip()                 # 08
    num = fileinput.filelineno()         # 09
    print '%-40s # %02d' % (line, num)   # 10
5. 集合(set)

集合Set类位于sets模块中,在python 2.3中通过set类型的实现成为了语言的一部分,意味不需要导入直接创建集合

  • 集合是由序列构建的,主要用于检查成员资格,因此副本是被忽略的,集合中的元素都是唯一的

  • 集合元素的顺序是随意的

    >>> set(range(10))
    set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    >>> set([0, 1, 2, 3, 4, 0, 1, 2, 3, 4])
    set([0, 1, 2, 3, 4])
    >>> set(['fee', 'fie', 'foe'])
    set(['foe', 'fee', 'fie'])
  • 集合操作,除了检查成员资格,还可以使用标准的集合操作,比如并集和交集,可以使用方法,也可以使用对整数进行位操作时使用的操作

    >>> a = set([1, 2, 3])
    >>> b = set([2, 3, 4])
    # 1. 并集
    >>> a.union(b)
    set([1, 2, 3, 4])
    >>> a | b
    set([1, 2, 3, 4])
    # 2. 交集
    >>> a.intersection(b)
    set([2, 3])
    >>> c = a & b
    >>> c
    set([2, 3])
    # 3. 判断子集
    >>> c.issubset(a)
    True
    >>> c <= a
    True
    # 4. 判断超集
    >>> c.issuperset(a)
    False
    >>> c >= a
    False
    # 5. 补集
    >>> a.difference(b)
    set([1])
    >>> a - b
    set([1])
    # 6. 真补集
    >>> a.symmetric_difference(b)
    set([1, 4])
    >>> a ^ b
    set([1, 4])
  • 集合是可变的,所有集合不能用做字典中的键,另外集合本身只能包含不可变的元素,所以集合不能包含其他集合。

  • frozenset,不可变集合,可以作为集合的元素

    >>> a = set()
    >>> a
    set([])
    >>> b=set()
    >>> a.add(b)
    
    Traceback (most recent call last):
      File "<pyshell#40>", line 1, in <module>
        a.add(b)
    TypeError: unhashable type: 'set'
    
    >>> a.add(frozenset(b))
    >>> a
    set([frozenset([])]) 
6. 堆(heap)
  • 优先队列的一种,使用优先队列能够以任意顺序增加对象,并且能在任何时间找到最小对象

  • python中没有独立的堆类型,只有一个包含一些堆操作的函数的模块,这个模块是heapq(q即queue的缩写),包含以下函数

    堆属性(heap property)位于i位置上的元素总比i//2位置处的元素大,反过来说就是位置i处的元素总比2*i和2*i+1位置处的元素小,这是底层堆算法的基础

    函数描述
    heappush(heap, x)将x入堆
    heappop(heap)将x中的最小元素弹出
    heapify(heap, x)将heap属性应用到任意一个列表
    nlargest(n, iter)返回iter中第n大的元素
    nsmallest(n, iter)返回iter中第n小的元素
    >>> from heapq import *
    >>> from random import shuffle
    >>> data = range(10)
    >>> shuffle(data)
    >>> data
    [9, 8, 1, 4, 3, 0, 6, 7, 5, 2]
    >>> heap = []
    # 1. heappush
    >>> for n in data:
    	heappush(heap, n)
    
    	
    >>> heap
    [0, 2, 1, 5, 3, 8, 6, 9, 7, 4]
    >>> heappush(heap, 0.5)
    >>> heap
    [0, 0.5, 1, 5, 2, 8, 6, 9, 7, 4, 3]
    # 2. heappop,弹出最小的元素,一般来说是在索引0处,并确保剩余元素中最小的占据这个位置
    >>> heappop(heap)
    0
    >>> heap
    [0.5, 2, 1, 5, 3, 8, 6, 9, 7, 4]
    >>> heappop(heap)
    0.5
    >>> heappop(heap)
    1
    >>> heap
    [2, 3, 4, 5, 7, 8, 6, 9]
    # 3. heapify,使用任意列表做为参数,并且通过尽可能少的移位转换为合法的堆
    >>> heap = [5, 8, 0, 3, 6, 7, 9, 1, 4, 2]
    >>> heapify(heap)
    >>> heap
    [0, 1, 5, 3, 2, 7, 9, 8, 4, 6]
    # 4. heapreplace,弹出最小元素,并将新元素推入
    >>> heapreplace(heap, 0.5)
    0
    >>> heap
    [0.5, 1, 5, 3, 2, 7, 9, 8, 4, 6]
    # 5. nlargest和nsmallest,分别寻找任何可迭代对象iter中第n大或n小的元素
    >>> heap = [3, 2, 5, 9, 0 ,3, 1, 4]
    >>> nlargest(3, heap)
    [9, 5, 4]
    >>> nlargest(2, heap)
    [9, 5]
    >>> nlargest(1, heap)
    [9]
    >>> nsmallest(2, heap)
    [0, 1]
7. 双端队列
  • 双端队列(double-ended queue或称deque),在需要按元素增加的顺序来移除元素时非常有用

    python 2.4中增加了collections模块,包括deque类型

    python 2.5中的collections模块只包括deque和defaultdict类型

  • 双端队列通过可迭代对象创建,而且有些非常有用的方法,如下示例

    >>> from collections import deque
    >>> q = deque(range(5))
    >>> q.append(5)
    >>> q
    deque([0, 1, 2, 3, 4, 5])
    >>> q.appendleft(6)
    >>> q
    deque([6, 0, 1, 2, 3, 4, 5])
    >>> q.pop()
    5
    >>> q.popleft()
    6
    >>> q
    deque([0, 1, 2, 3, 4])
    >>> q.rotate(3)
    >>> q
    deque([2, 3, 4, 0, 1])
    >>> q.rotate(-1)
    >>> q
    deque([3, 4, 0, 1, 2])
    >>> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值