首页 > 其他 > 详细

常用模块(更新中.....)

时间:2019-07-18 21:44:27      阅读:68      评论:0      收藏:0      [点我收藏+]

collections模块

在内置数据类型(dict,list,set,tuple)的基础上,collections模块还提供了额外
的几个数据类型:Counter,deque,defaultdict,namedtuple和OrderedDict等
  1.namedtuple:生成可以使用名字来访问元素内容的tuple
  2.deque:双端队列,可以快速的从另外一侧追加和推出对象
  3.Counter:计算器,主要用来计数
  4.OrderredDict:有序字典
  5.defaultdict:带有默认值的字典

namedtuple(具名元组)

因为元组的局限性:不能为元组内部的数据进行命名,所以往往我们并不知道一个元组所要表达的意义,所以在这里引入了 collections.namedtuple 这个工厂函数,来构造一个带字段名的元组。具名元组的实例和普通元组消耗的内存一样多,因为字段名都被存在对应的类里面。这个类跟普通的对象实例比起来也要小一些,因为 Python 不会用 __dict__ 来存放这些实例的属性。下面来看看具名元组的实例:

p = (1 , 2)

突兀的出现这么一个tuple大家就很难了解它到底想要表达什么东西,而这个时候namedtuple就派上用场了:

from collections import namedtuple
point = namedtuple(point,[x,y])
p = point(1,2)
print(p)
>>>p.x
out: 1
>>>p.y
out: 2

加上一个‘x‘,‘y‘就很容易让人明白这是一个坐标

类似的,如果要用坐标和半径表示一个圆,也可以用namedtuple定义:

#namedtuple(‘名称‘, [属性list]):
Circle = namedtuple(Circle, [x, y, r])

ps:书写规范

  namedtuplr的小括号里 第一个是类名,第二个是类的各个字段的名字。后者可以是由数个字符串组成的可迭代对象,或者是由空格分隔开的字段名组成的字符串

 

deque(双端队列)

技术分享图片

技术分享图片

对于list这种线性存储的数据类型,插入和删除元素就很慢,于是deque这种高效实现插入和删除操作的双向列表就问世了,它的出现对于队列和栈的操作提供了一大便利

from collections import deque
q = deque([a,b,c])

q.append(1)
q.appendleft(2)
print(q)
out: deque([2, a, b, c, 1])
"""
队列不应该支持任意位置插值
只能在首尾插值(不能插队)
"""
q.insert(0, 哈哈哈)
print(q)
out: deque([哈哈哈, 2, a, b, c, 1])
print(q.pop())  # 弹出右边第一个元素
out: 1
print(q.popleft())  # 弹出左边第一个元素
out: 哈哈哈

OrderredDict(有序字典)

很多人认为python中的字典是无序的,因为它是按照hash来存储的,但是python中有个模块collections(英文,收集、集合),里面自带了一个子类

OrderedDict,实现了对字典对象中元素的排序。请看下面的实例:

from collections import OrderedDict
print(Regular dictionary)
d={}
d[a]=A
d[b]=B
d[c]=C
for k,v in d.items():
    print(k,v)


print( "\nOrder dictionary")
d1 =OrderedDict()
d1[a] = A
d1[b] = B
d1[c] = C
d1[1] = 1
d1[2] = 2
for k,v in d1.items():
    print(k,v)

out:
Regular dictionary
a A
c C
b B

Order dictionary
a A
b B
c C
1 1
2 2

可以看到,同样是保存了ABC等几个元素,但是使用OrderedDict会根据放入元素的先后顺序进行排序。所以输出的值是排好序的。

意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:

d = OrderedDict()
d[z] = 1
d[y] = 2
d[x] = 3
d.keys() # 按照插入的Key的顺序返回
[z, y, x]

defaultdict(默认值字典)

当我使用普通的字典时,用法一般是dict={},添加元素的只需要dict[element] =value即,调用的时候也是如此,dict[element] = xxx,但前提是element字典里,如果不在字典里就会报错,如:
                                          技术分享图片

这时defaultdict就能派上用场了,defaultdict的作用是在于,当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值.来看个例子:

from collections import defaultdict
s = [(yellow, 1), (blue, 2), (yellow, 3), (blue, 4), (red, 1)]

d = defaultdict(list)
for k, v in s:
    d[k].append(v)

print(list(d.items()))

输出:

技术分享图片

 

时间模块

表示时间的三种方式

在Python中,通常有这三种方式来表示时间:时间戳、元组(struct_time)、格式化的时间字符串:

(1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。

(2)格式化的时间字符串(Format String): ‘1999-12-06’

time模块

技术分享图片
1.time.sleep(secs)

线程推迟指定的时间运行
适合放在脚本里,定时sleep一会然后继续干啥

while True:
    time.sleep(3)
    print time.strftime(%H:%M:%S)
17:21:35
17:21:38
17:21:41
17:21:44
……


2.time.localtime([secs])

将一个时间戳转换成一个当前时区的struct_time,如果seconds参数未输入,则以当前时间为转换标准
未提供secs参数时,按当前时间为准
In : time.localtime()
Out: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=14, tm_hour=17, tm_min=23, tm_sec=48, tm_wday=3, tm_yday=226, tm_isdst=0)

提供secs为当前时间戳时
In : time.time()
Out: 1408008232.217969
In : time.localtime(time.time())
Out: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=14, tm_hour=17, tm_min=24, tm_sec=2, tm_wday=3, tm_yday=226, tm_isdst=0)



3.time.strftime(format[, t])

将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出
t未指定,传入time.localtime()作为默认参数:
In : time.strftime(%Y-%m-%d %H:%M:%S)
Out: 2014-08-14 17:28:16’

指定t为time.localtime(1407945600.0)时:
In : time.localtime(1407945600.0)
Out: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=14, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=226, tm_isdst=0)

In : time.strftime(%Y-%m-%d %H:%M:%S,time.localtime(1407945600.0))
Out: 2014-08-14 00:00:00’



4.time.time()

返回当前时间的时间戳
In : time.time()
Out: 1408008711.730218

5.time.mktime(t)

将一个struct_time转换为时间戳,如下time.localtime接收一个时间戳返回一个struct_time,而time.mktime接收一个struct_time,返回一个时间戳
In : time.localtime(1407945600.0)
Out: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=14, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=226, tm_isdst=0)
In : time.mktime(time.localtime(1407945600.0))
Out: 1407945600.0
time 模块常用方法小记

datetime模块

技术分享图片
datetime模块常用的主要有下面这四个类:

1. datetime.date: 是指年月日构成的日期(相当于日历)
2. datetime.time: 是指时分秒微秒构成的一天24小时中的具体时间(相当于手表)
3. datetime.datetime: 上面两个合在一起,既包含时间又包含日期
4. datetime.timedelta: 时间间隔对象(timedelta)。一个时间点(datetime)加上一个时间间隔(timedelta)可以得到一个新的时间点(datetime)。比如今天的上午3点加上5个小时得到今天的上午8点。同理,两个时间点相减会得到一个时间间隔。



1.datetime.date 类

1.新建一个date对象,日期为今天,既可以直接调用datetime.date.today(),也可以直接向datetime.date()传值,如下:
In : today = datetime.date.today()
In : today
Out: datetime.date(2014, 8, 15)
In : t = datetime.date(2014,8,15)
In : t
Out: datetime.date(2014, 8, 15)

2.datetime.date.strftime(format) 格式化为需要的时间,如常用的 “年-月-日 小时:分钟:秒” 格式
In : today.strftime(%Y-%m-%d %H:%M:%S)
Out: 2014-08-15 00:00:00’
date对象中小时、分钟、秒默认都是0,纪元年的那个时间

3.datetime.date.timple() 转成struct_time格式,这样传递给time.mktime(t)  后,直接转成时间戳格式
In : today.timetuple()
Out: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=15, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=227, tm_isdst=-1)
In : time.mktime(today.timetuple())
Out: 1408032000.0

4.datetime.date.replace(year, month, day)  返回一个替换后的date对象
In : today.replace(year=2013)
Out: datetime.date(2013, 8, 15)

5.datetime.date.fromtimestamp(timestamp) 将时间戳转化为date对象
In : datetime.date.fromtimestamp(1408058729)
Out: datetime.date(2014, 8, 15)



2.datetime.time 类

1.新建一个time对象
In : t
Out: datetime.time(8, 45, 20)

2.datetime.time.(format)格式化输出
In : t.strftime(%Y-%m-%d %H:%M:%S)
Out: 1900-01-01 08:45:20’
time对应的年、月、日为1900、01、01,纪元年的那个时间

3.datetime.time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]])  返回一个替换后的time对象
In : t.replace(hour=9)
Out: datetime.time(9, 45, 20)



3.datetime.datetime类

1.新建一个datetime对象,日期为今天,既可以直接调用datetime.datetime.today(),也可以直接向datetime.datetime()传值,如下:
In : d1 = datetime.datetime.today()
In : d1
Out: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945)
In : d2 = datetime.datetime(2014, 8, 15, 8, 12, 34, 790945)
In : d2
Out: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945)

2.datetime.datetime.now([tz]) 当不指定时区时,和datetime.datetime.today()是一样的结果,如下
In : datetime.datetime.now()
Out: datetime.datetime(2014, 8, 15, 8, 14, 50, 738672)

3..datetime.datetime.strftime(format) 格式化为需要的时间,如常用的 “年-月-日 小时:分钟:秒” 格式
In : d1
Out: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945)
In : d1.strftime(%Y-%m-%d %H:%M:%S)
Out: 2014-08-15 08:12:34’

4.datetime.datetime.timple() 转成struct_time格式,这样传递给time.mktime(t)  后,直接转成时间戳格式
In : d1
Out: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945)
In : d1.timetuple()
Out: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=15, tm_hour=8, tm_min=12, tm_sec=34, tm_wday=4, tm_yday=227, tm_isdst=-1)
In : time.mktime(d1.timetuple())
Out: 1408061554.0

5.datetime.datetime.replace(year, month, day)  返回一个替换后的date对象
In : d1
Out: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945)
In : d1.replace(year=2000)
Out: datetime.datetime(2000, 8, 15, 8, 12, 34, 790945)

6.datetime.datetime.fromtimestamp(timestamp) 将时间戳转化为datetime对象
In : time.time()
Out: 1408061894.081552
In : datetime.datetime.fromtimestamp(1408061894)
Out: datetime.datetime(2014, 8, 15, 8, 18, 14)
4.datetime.timedelta类

时间的加减法用,如下:
In : today = datetime.datetime.today()
In : yesterday = today - datetime.timedelta(days=1)
In : yesterday
Out: datetime.datetime(2014, 8, 14, 15, 8, 25, 783471)
In : today
Out: datetime.datetime(2014, 8, 15, 15, 8, 25, 783471)
datetime 模块常用方法小记

几种格式之间的转换

技术分享图片

 

技术分享图片

 

random模块

random模块用于生成随机数,废话不多说,下面介绍几个随机数的常用方法:

 import random
#随机小数
 random.random()      # 大于0且小于1之间的小数
out: 0.7664338663654585
 random.uniform(1,3) #大于1小于3的小数
out: 1.6270147180533838


#随机整数
 random.randint(1,5)  # 大于等于1且小于等于5之间的整数
 random.randrange(1,10,2) # 大于等于1且小于10之间的奇数


#随机选择一个返回
random.choice([1,23,[4,5]])  # #1或者23或者[4,5]
#随机选择多个返回,返回的个数为函数的第二个参数
 random.sample([1,23,[4,5]],2) # #列表元素任意2个组合
out: [[4, 5], 23]


#打乱列表顺序
item=[1,3,5,7,9]
 random.shuffle(item) # 打乱次序
item
out: [5, 1, 3, 7, 9]
random.shuffle(item)
 item
out: [5, 9, 7, 1, 3]

小练习:

技术分享图片
"""
大写字母 小写字母 数字

5位数的随机验证码
提示:
chr
random.choice
封装成一个函数,用户想生成几位就生成几位
"""
def get_code(n):
    code = ‘‘
    for i in range(n):
        # 先生成随机的大写字母 小写字母 数字
        upper_str = chr(random.randint(65,90))
        lower_str = chr(random.randint(97,122))
        random_int = str(random.randint(0,9))
        # 从上面三个中随机选择一个作为随机验证码的某一位
        code += random.choice([upper_str,lower_str,random_int])
    return code
res = get_code(4)
print(res)
生成验证码

 

os模块

 os模块是与操作系统交互的一个接口

sys模块

sys模块是与python解释器交互的一个接口

序列化模块

subprocess模块

 

常用模块(更新中.....)

原文:https://www.cnblogs.com/linxidong/p/11207960.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!