入门到放弃之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中时间日期格式化符号:

 

posted @ 2017-08-07 17:28  程绩  阅读(369)  评论(0编辑  收藏  举报