入门到放弃之py 模块
什么是模块
模块就是一个包含了python定义声明的文件,文件名就是模块
名字加上.py的后缀。但其实import加载的模块分为4个类别
1使用python编写的代码(.py文件)
2 已被编译为共享库或dll的c或c++扩展
3包好一组模块的包
4使用c编写并链接到哦python解释器的内置模块
为何要使用模块?
如果你退出python解释器然后重新进入,那么你之前定义的函数
或者变量都将要丢失,因此我们通将程序写到文件中
便永久保存下来,需要时候就通过python test.py方式
去执行,此时test.py被称为脚本script。
随着程序的发展,功能越来越多,为了方便管理
我们通常将程序分成一个个的文件,这样做的程序结构更清晰
,方便管理。
常用模块
在内置数据类型(dict、list、tuple)的基础上,
collestions模块还提供了几个额外的数据类型:
Counter、deque、defaultdict、namedtuple和OrderedDict
等。
1 namedtuple:生成可以使用名字来访问元素内容的tup
2 deque双端队列,可以快速的从另外一侧追加退出对象
3 Counter计数器 主要用来计数
4 OrderedDict 有序字典
5 defaultdict 带有默认值的字典
namedtuple
我们知道tuple 可以表示不变集合。列如,一个点的
二维坐标可以表示成:
>>>p=(1,2)
但是看到(1,2)很难看出这个tuple是用来表示一个
坐标的。
这是 namedtuple就派上用场:
>>> from collections import namedtuple
>>>point=namemdtuple ('point',['x','y'])
>>>p=point(1,2)
>>>p.x
1
>>>p..y
2
类似的,如果要用坐标和半径表示一个圆,也可以用
namedtuple定义:
circle=namedtuple([‘x’,'y','r'])
deque
\使用list存储数据时,按索引访问元素很快,但是插入
和删除元素就很慢了,因为list是线性存储,数据量大
时候插入和删除效率很低
deque 是为了高效实现插入和删除的双向列表,
适合用于队列和栈:
from collections import deque
>>>q=deque(['a','b','c'])
>>>q.append('x')
>>>q.appendleft('y')
>>>q
deque(['y','a','b','c','x'])
deque除了实现list的append()和pop外,还支持
appendleft()和popleft()
这样就可以非常高效等等往头部添加或者删除元素
OrderedDict
使用dict时,key是无序的,在对dict做迭代时,
我们无法确定Key 的顺序。
如果要保持key 的顺序,可以用OrderedDict:
>>>from collections import OrderedDict
d=dict(['a',1),('b'2),('c',3])
d # dict 的key 是无序的
{'a':1,'c':3,'b':2}
>>>od=OrderedDict(['a',1,('b',2),('c',3)])
>>>od#OrderedDict的key是有序的
OrderedDict([('a',1),('b',1),('b',2),('c',3)])
OrderedDict的key 会按照插入的顺序排列,不是key本身排序:
>>>od=OrderedDict()
>>>od['z']=1
>>>od['y']=2
>>>od['x']=3
>>>od.keys()#按照插入的key的顺序返回
['z','y','x']
defaultdict
有如下值的集合[11,22,33,44,55,66,77,88,99,90..]
将所有大于66的值保存至字典的第一个key中,将小于66
的值保存至第二个key的值中
values=[11,22,33,44,55,66,77,88,99,90]
my_dict={}
for value in valuse:
if value>66:
if my_dict.has_key('k1'):
my_dict['k1'].append(value)
else:
my_dict['k1'].append(value)
else:
if my_dict.has_key('k2'):
my_dict['k2'].append(value)
else:
my_dict['k2']=[value]
from collections import defaultdict
values=[11,22,33,44,55,66,77,88,99,90]
my_dict=defaultdict(list)
for value in values:
if value>66:
my_dict['k1'].append(value)
slse:
my_dict[my_dict['k2'].append(value)
>>>from collections import defaultdict
>>>dd=defaultdict(lambda:'N/A')
>>>dd['key1']='abc'
>>>dd['key1']#key1存在
'abc'
>>>dd['key2']#ke2不存在,返回默认
'N/A'
counter
counterl类的目的是用来跟着值出现的次数。它是一个无序的
容器类型,以字典的健值对形式存储,其中元素作为key
其计数作为value。计数值可以是任意的lnterger(包括0和负数)
counter类和其他语言的bags或multisets很相似
c = Counter('abcdeabcdabcaba') print c 输出:Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}
时间模块
方法 倒入模块
time.sleep(secs)
(线程)推迟指定的时间运行,单位为秒。
2 time.time
获取当前时间戳
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
python中时间日期格式化符号: