Python 解析式、生成器

2021-01-05  本文已影响0人  Alexander_Zz

一、标准库 datetime

1.1 datetime 模块
1.2 datetime
1.3 datetime 对象
1.4 日期格式化
import datetime

dt = datetime.datetime.strptime("08/12/20 16:30", "%d/%m/%y %H:%M")

print(dt.strftime("%Y-%m-%d %H:%M:%S"))
print("{0:%Y}/{0:%m}/{0:%d} {0:%H}::{0:%H}::{0:%S}".format(dt))
print('{:%Y-%m-%d %H:%M:%S}'.format(dt))
示例.png
1.5 timedelta 对象

二、标准库 time

2.1 time

三、列表解析

3.1 举例
lst = list(range(10))
newlst = list()

for i in lst:
    newlst.append((i+1) ** 2)
print(newlst)


lst = list(range(10))
newlst = [ (i + 1) ** 2 for i in lst]
print(newlst)
示例.png
3.2 语法
3.3 列表解析式是一种语法糖
3.4 举例
even = []

for i in range(10):
    if i % 2 == 0:
        even.append(i)

even = [ i for i in range(10) if i % 2 == 0]
示例.png

四、列表解析进阶

4.1 [expr for item in iterable if cond1 if cond2]
ret = []

for item in iterable:
    if cond1:
        if cond2:
            ret.appent(expr)
示例.png
4.2 [expr for i in iteranle1 for j in iterable2]
ret = []

for i in iterable1:
    for j in iterable2:
        ret.append(expr)
示例.png 示例.png 示例.png 示例.png
4.4 请问下面 3 中输出各是什么?为什么
[(i,j) for i in range(7) if i>4 for j in range(20,25) if j>23]
[(i,j) for i in range(7) for j in range(20,25) if i>4 if j>23]
[(i,j) for i in range(7) for j in range(20,25) if i>4 and j>23]
示例.png

五、列表解析练习

5.1 练习(要求使用列表解析式完成)
[i ** 2 for i in range(11) if i > 0 ]
示例.png
lst = [1, 4, 9, 16, 2, 5, 10, 15]
[lst[i] + lst[i+1] for i in range(len(lst)) if i < (len(lst)-1)]
示例.png

六、生成器表达式 Generator expression

6.1 语法
示例.png
6.2 和列表解析式的区别
示例.png
6.3 生成器
示例.png
6.4 举例
g = ("{:04}".format(i) for i in range(1,11))
next(g)
for x in g:
    print(x)
print('~~~~~~~~~~~~')
for x in g:
    print(x)
g = ["{:04}".format(i) for i in range(1,11)]
for x in g:
    print(x)
print('~~~~~~~~~~~~')
for x in g:
    print(x)
6.5 总结
6.6 习题
it = (print("{}".format(i+1)) for i in range(2))
first = next(it)
second = next(it)
val = first + second
print() 函数是立即返回,所以不论是 first 还是 second 的值都是 None
所以 val 的运算结果会抛异常
示例
不可以 next() 了,因为此前的计数器是 range(2),程序已经迭代两次,所以不可再次 next()
示例.png
it = (x for x in range(10) if x % 2)
first = next(it)
second = next(it)
val = first + second
val 的值为 4
示例.png
因为此前计数器并未迭代完,所以可以继续 next() 调用
示例.png
6.7 和列表解析式的对比

七、集合解析式

7.1 语法
7.2 用法

八、字典解析式

8.1 语法
8.2 用法
ret = {}
for x in range(3):
    for y in range(4):
        ret[str(x)] = y

九、总结

上一篇 下一篇

猜你喜欢

热点阅读