解析式和生成器表达式
列表解析式
语法:[返回值 for 元素 in 可迭代对象 if 条件]立刻生成一个全新的列表。
1 # [0, 2, 4, 6, 8, 10],打印10以内的偶数列表。 2 print([i for i in range(0, 11, 2)]) 3 print([i*2 for i in range(6)]) 4 print([i for i in range(11) if i % 2 == 0])
生成器表达式
语法:在列表解析式的基础上把中括号换成小括号即可,返回一个生成器对象。
1 # <generator object <genexpr> at 0x00xxx...xxx>,10以内的偶数生成器。 2 print((i for i in range(0, 11, 2)))
生成器和列表解析式区别:
生成器:惰性,延迟计算,返回生成器对象,是迭代器,可迭代一次。内存占用小。生成速度快,不进行运算,只生成一个生成器对象。
列表解析式:立刻计算,返回一个新列表,不是迭代器,但可重复迭代。内存占用大,生成速度慢,需要运算得出完整的列表。
注意:可迭代对象不一定是迭代器,生成器是迭代器的一种。
集合解析式和字典解析式
语法:集合解析式在列表解析式的基础上把中括号换成大括号即可,立刻生成一个全新的集合。
# {0, 2, 4, 6, 8, 10},打印10以内的偶数集合。 print({i for i in range(0, 11, 2)}) print({i*2 for i in range(6)}) print({i for i in range(11) if i % 2 == 0})
语法:字典解析式在集合解析式的基础上,返回值是key: value形式即可,立刻生成一个全新的字典。
1 # {0: 0, 2: 4, 4: 16, 6: 36, 8: 64, 10: 100},打印10以内的偶数为key,该key的平方为value的字典。 2 print({i: i**2 for i in range(0, 11, 2)}) 3 print({i*2: (i*2)**2 for i in range(6)}) 4 print({i: i**2 for i in range(11) if i % 2 == 0})
注意:集合返回值与字典返回值的key必须可哈希。
时间模块
datetime模块datetime类
1 from datetime import datetime as dt # 导入datetime模块中的datetime类被赋予别名为dt 2 print(dt.now()) # now返回当前时区时间,精确到毫秒,不带时区信息 3 print(dt.utcnow()) # utcnow返回当前0时区时间,精确到毫秒,不带时区信息 4 print(dt.timestamp(dt.now())) # timestamp指定一个datetime类时间,返回该时间的时间戳 5 print(dt.fromtimestamp(1234567.89)) # fromtimestamp指定一个数值类时间戳,返回该时间戳的时间 6 print(dt(2022, 2, 22, 11, 15, 8, 5)) # datetime类构造一个时间,返回datetime类时间 7 print(dt.now().year) # year返回datetime类时间的年 8 print(dt.now().month) # month返回datetime类时间的月 9 print(dt.now().day) # day返回datetime类时间的日 10 print(dt.now().hour) # hour返回datetime类时间的时 11 print(dt.now().minute) # minute返回datetime类时间的分 12 print(dt.now().second) # second返回datetime类时间的秒 13 print(dt.now().microsecond) # microsecond返回datetime类时间的毫秒 14 print(dt.now().weekday()) # weekday返回0-6,代表datetime类时间星期一到星期日,0是星期一,6是星期日 15 print(dt.now().isoweekday()) # isoweekday返回1-7,代表datetime类时间星期一到星期日,1是星期一,7是星期日 16 print(dt.now().date()) # date返回date对象的时间 17 print(dt.now().time()) # time返回time对象的时间
日期格式化
1 from datetime import datetime as dt # 导入datetime模块中的datetime类被赋予别名为dt 2 print(dt.now()) # now返回当前时区时间,精确到毫秒,不带时区信息 3 print(dt.utcnow()) # utcnow返回当前0时区时间,精确到毫秒,不带时区信息 4 print(dt.timestamp(dt.now())) # timestamp指定一个datetime类时间,返回该时间的时间戳 5 print(dt.fromtimestamp(1234567.89)) # fromtimestamp指定一个数值类时间戳,返回该时间戳的时间 6 print(dt(2022, 2, 22, 11, 15, 8, 5)) # datetime类构造一个时间,返回datetime类时间 7 print(dt.now().year) # year返回datetime类时间的年 8 print(dt.now().month) # month返回datetime类时间的月 9 print(dt.now().day) # day返回datetime类时间的日 10 print(dt.now().hour) # hour返回datetime类时间的时 11 print(dt.now().minute) # minute返回datetime类时间的分 12 print(dt.now().second) # second返回datetime类时间的秒 13 print(dt.now().microsecond) # microsecond返回datetime类时间的毫秒 14 print(dt.now().weekday()) # weekday返回0-6,代表datetime类时间星期一到星期日,0是星期一,6是星期日 15 print(dt.now().isoweekday()) # isoweekday返回1-7,代表datetime类时间星期一到星期日,1是星期一,7是星期日 16 print(dt.now().date()) # date返回date对象的时间 17 print(dt.now().time()) # time返回time对象的时间 18 print(dt.strptime('2022-02-22 11:15:8.5', '%Y-%m-%d %H:%M:%S.%f')) # strptime指定一个时间与时间输出格式,按格式返回一个datetime对象时间 19 # strftime 20 print(dt.strftime(dt.now(), '%Y-%m-%d %H:%M:%S.%f')) #指定一个datetime对象与时间输出格式,按格式返回一个字符串时间 21 print(dt.now().strftime('%Y-%m-%d %H:%M:%S.%f')) #指定一个时间输出格式,按格式返回一个字符串时间 22 print('{:%Y-%m-%d %H:%M:%S.%f}'.format(dt.now())) #format也能按格式返回一个字符串时间
时间格式可在帮助文档查询
datetime模块timedelta类与time模块
1 import datetime 2 import time 3 d1 = datetime.datetime.now() 4 time.sleep(5) # time模块sleep类指定一个数值,将调用线程挂起指定秒数 5 d2 = datetime.datetime.now() 6 print(d2-d1) # datetime对象自身可以做时间差运算
7# timedelta类指定一个或以上参数,生成一个timedelta对象,可与datetime对象做时间加减运算 8 dt = datetime.timedelta(days=1, seconds=2, microseconds=3, milliseconds=4, minutes=5, hours=6, weeks=7) 9 print(d1+dt, d2-dt) # datetime对象可与timedelta对象做加减时间运算,datetime对象自身不能相加