Python学习——解析式、生成器

标准库datetime

datetime模块,对日期、时间、时间戳的处理
datetime类 ,类方法 ,
today() 返回本地时区当前时间的datetime对象 ,
now(tz=None) 返回当前时间的datetime对象,时间到微秒,如果tz为None,返回 和today()一样
utcnow() 没有时区的当前时间
fromtimestamp(timestamp, tz=None) 从一个时间戳返回一个datetime对象
datetime对象
timestamp() 返回一个到微秒的时间戳。
时间戳:格林威治时间1970年1月1日0点到现在的秒数

datetime对象

构造方法 datetime.datetime(2020, 2, 6, 16, 29, 43, 79043)
year、month、day、hour、minute、second、microsecond,取datetime对象的年月日时 分秒及微秒
weekday() 返回星期的天,周一0,周日6
isoweekday() 返回星期的天,周一1,周日7
date() 返回日期date对象
time() 返回时间time对象
replace() 修改并返回新的时间
isocalendar() 返回一个三元组(年,周数,周的天)

日期格式化*

类方法 strptime(date_string, format) ,返回datetime对象
对象方法 strftime(format) ,返回字符串
字符串format函数格式化
Python学习——解析式、生成器

timedelta对象

datetime2 = datetime1 + timedelta
datetime2 = datetime1 - timedelta
timedelta = datetime1 - datetime2
构造方法
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
year = datetime.timedelta(days=365)
total_seconds() 返回时间差的总秒数
Python学习——解析式、生成器

标准库time
time.sleep(secs) 将调用线程挂起指定的秒数

列表解析List Comprehension

语法
[返回值 for 元素 in 可迭代对象 if 条件]
使用中括号[],内部是for循环,if条件语句可选
返回一个新的列表

编译器会优化,不会因为简写而影响效率,反而因优化提高了效率 减少程序员工作量,减少出错 简化了代码,但可读性增强
Python学习——解析式、生成器

[expr for item in iterable if cond1 if cond2]
等价于
ret = []
for item in iterable:
if cond1:
if cond2:
ret.append(expr)
[expr for i in iterable1 for j in iterable2 ]
等价于
ret = []
for i in iterable1:
for j in iterable2:
ret.append(expr)

生成器表达式Generator expression

语法
(返回值 for 元素 in 可迭代对象 if 条件)
列表解析式的中括号换成小括号就行了
返回一个生成器
和列表解析式的区别
生成器表达式是按需计算(或称惰性求值、延迟计算),需要的时候才计算值
列表解析式是立即返回值

Python学习——解析式、生成器
生成器 可迭代对象 迭代器
Python学习——解析式、生成器

和列表解析式的对比
生成器表达式延迟计算,列表解析式立即计算
单从返回值本身来说,生成器表达式省内存,列表解析式返回新的列表
生成器没有数据,内存占用极少,但是使用的时候,虽然一个个返回数据,但是合起来占 用的内存也差不多
列表解析式构造新的列表需要占用内存
单看计算时间看,生成器表达式耗时非常短,列表解析式耗时长
但是生成器本身并没有返回任何值,只返回了一个生成器对象
列表解析式构造并返回了一个新的列表

集合解析式

{返回值 for 元素 in 可迭代对象 if 条件}
列表解析式的中括号换成大括号{}就行了
立即返回一个集合

字典解析式

{返回值 for 元素 in 可迭代对象 if 条件}
列表解析式的中括号换成大括号{}就行了
使用key:value形式
立即返回一个字典