(yield)生成器是自定义的迭代器,本质就是迭代器python
生成器必须在函数体内定义,而且生成器直接调用不会执行函数体内代码编程
经过__next__()取值才会执行函数体内代码,而且yield会返回一次值,一次一个值(能够返回屡次)。函数
面向过程编程思想相似于工厂流水线,即先作什么后作什么。code
优势:复杂的问题流程化,简单化索引
缺点:可扩展性差资源
列表生成式可依赖索引取值,方便,可是耗费资源generator
生成器表达式没有索引取值,取值不方便,可是节省资源it
res1 = (i for i in range(10) if i % 2 == 0) print(res1) # 此处写答案--> 生成器表达式取余隐藏了0,2,4,6,8; 显示<generator object <genexpr> at 0x000001E75DCC0DB0> res2 = [i + 2 for i in res1] print(res2) # 此处写答案--> 2 4 6 8 10 res3 = sorted(res2, reverse=True) print(res3) # 此处写答案--> 10 8 6 4 2 0
a = [2, 5] b = [a] * 4 print(b) # 此处写答案-- >[[2, 5],[2, 5],[2, 5],[2, 5]] b = tuple(b) b[0][0] = 3 print(b) # 此处写答案, 请简述答案为什么是这个结果-->([3, 5], [3, 5], [3, 5], [3, 5]) 由于这里的b是元组套列表,b后面的第一个0表明元组索引,第二个表明列表索引,由于元组是不可变类型,列表是可变类型;因此列表里面索引为0的都修改为3
print([i % 2 for i in range(10)]) # 此处写答案--> [0,1,0,1,0,1,0,1] print((i % 2 for i in range(10))) # 此处写答案--> 别看了,生成器不会给你显示的
print([x * x for x in range(1, 11)])
key = lambda 参数 : 返回值 print(key(参数)) 和内置函数一块儿用
list1 = [100, 200, 300, 400, 500, 600, 700] print(min(list1)) print(max(lsit1)) print(max(sorted(list1,reverse=True))) print(min(sorted(list1,reverse=True))) print(max(list1,key=lambda x:x)) print(min(list1,key=lambda x:x))
user_dic = { '张全蛋': 20000, '赵铁柱': 3000, '李小花': 8000, '伍六七': 1500 } print(max(user_dic,key=lambda x:user_dic[x]))
1.一行代码实现 9*9 乘法表
2.继续编写ATM加购物车class