Python基础及语法(四)

解析式和生成器表达式

列表解析式

语法:[返回值 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 dt = datetime.timedelta(days=1, seconds=2, microseconds=3, milliseconds=4, minutes=5, hours=6, weeks=7) #timedelta类指定一个或以上参数,生成一个timedelta对象,可与datetime对象做时间加减运算
8 print(d1+dt, d2-dt) #datetime对象可与timedelta对象做加减时间运算,datetime对象自身不能相加

猜你喜欢

转载自www.cnblogs.com/bgr1115/p/12685351.html