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新版本中,字典有固定的顺序,可以暂时不用这个模块