Python 常用内置模块——time&datetime、collection

time
 
time模块的时间数据有三种存在形式:
  时间戳,time.time() ,距离1970年初的秒数
  结构化时间,time.localtime()
  字符串时间,time.strftime() ,可直接呈现给用户
import time
time.time() # 当前时间的时间戳
time.strftime()  # 获取当前时间的字符串形式
time.localtime()  # 结构化时间,类型为命名元祖,可直接获取当前时间
 # 时间戳-->结构化
time.localtime(time.time())

# 字符串-->结构化 , 格式必须一致
# 转化成结构化,命名元祖,并且支持索引,支持结构化时间的成员
time.strptime('2102-11-23 12:30', '%Y-%m-%d %H:%M')
# ps. parse 分析字符串,变成格式化时间
 
# 结构化-->时间戳
time.mktime()  # 把结构化时间转换成时间戳
 
# 结构化-->字符串 , 格式可根据需求省略
f = time.localtime(time.time() - 86400 * 3)
time.strftime('%Y-%m-%d %H:%M:%S', f)
# ps. str ftime 把f 格式化时间 字符串化

  有如下的转化关系

 
  ps.一天86400秒,可用于对时间戳的计算
 
 
 
 
datetime
也有三种形式,时间戳、时间对象、字符串
from datetime import datetime, timedelta
datetime.now() # 时间对象 ,可获取到毫秒
# 时间对象--> 时间戳
f = datetime.timestamp(datetime.now())
# 时间戳 --> 时间对象
o = datetime.fromtimestamp(f)
# 字符串--> 时间对象
datetime.strptime()
# 时间对象--> 字符串
datetime.strftime()
# 时间变化值,如下,就是两天的变化值,可与时间对象加减运算
timedelta(days=2)  # 参数不支持年月
# Δtime

collections

collections模块在内置的数据类型,比如:int、str、list、dict等基础之上额外提供了几种数据类型。
1.namedtuple(): 生成可以使用名字来访问元素内容的tuple子类
2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
3.Counter: 计数器,主要用来计数
4.OrderedDict: 有序字典
5.defaultdict: 带有默认值的字典
 
 
collection.deque
队列
from collections import deque
d = deque([1, 2, 3, 4, 5])
d.append(6)  # 加在右边
d.appendleft(0)  # 加在左边
d.insert(position, obj)  # 加在指定位置,从左数
d.remove() # 可以指定位置删除
d.pop() # 从右端删除一个,返回该值
d.popleft() # 从左端删
ps. FIFO, 队列;LIFO FILO, 栈;双端队列,可两端操作
 
 
Counter
用于计数
from collections import Counter
Counter([1, 2, 3234, 42, 4 ,2, 23  ,32, 2,2 ,3,2,])
# 统计出每个元素的个数,返回类字典的数据结构
 
 
Namedtuple
命名元祖
  给元祖一个名字,并且给元祖的每个元素一个名字,便于取值
  namedtuple(typename, field_names, *, verbose=False, rename=False, module=None)
  返回typename类型的元祖子类,子类可以实例化成类元祖对象,对象可索引,可迭代,可用field_names访问元素。
  field_names可以是列表等容器,还可以是空格或逗号分隔的字符序列,
  形如'name age sex',和下面代码的效果一样
tu = namedtuple('juge',['name', 'age', 'sex']) # 这是一个类
t = tu('PDD', '3', '骚猪')  # 这是一个实例化的对象
print(t)
# 输出:juge(name='PDD', age='3', sex='骚猪')
t.name # 可以取得实例的name属性, PDD # 同时,可以用下标操作 t[0] # 也是得到PDD
# 还可以用元祖的count()方法和index()方法
 ps.工厂模式?
 
defautdict
默认值字典
  defaultdict(default_factory[, ...])
  返回一个类字典对象,其类型是字典的子类,重载了一个方法,增加了一个可写入的实例变量
  default_factory参数默认为None,官方建议了三种用法list int 和set,指的是默认创建的值的类型
1.list
 把default_factory设置为list,便于把键值对形式的序列 重组进列表字典中。
  当第一次遇到某个键时,default_factory函数会返回一个空列表,随后把值append进这个新列表,第二次遇到相同的键就会直接把值加到列表中了
  比用setdefault的方法效率要高
>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> for k, v in s:
...     d[k].append(v)
...
>>> sorted(d.items())
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

2.int

  便于统计各元素出现次数

  与list的情况类似,这里会遇到新键时,生成0作为默认值

>>> s = 'mississippi'
>>> d = defaultdict(int)
>>> for k in s:
...     d[k] += 1
...
>>> sorted(d.items())
[('i', 4), ('m', 1), ('p', 2), ('s', 4)]

3.set

  便于构造集合字典

>>> s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]
>>> d = defaultdict(set)
>>> for k, v in s:
...     d[k].add(v)
...
>>> sorted(d.items())
[('blue', {2, 4}), ('red', {1, 3})]
 
 
OrderedDict
有序字典
  由于python新版本中,字典有固定的顺序,可以暂时不用这个模块

猜你喜欢

转载自www.cnblogs.com/pyonwu/p/10569159.html