1.什么是生成器?
(yield)生成器是自定义的迭代器,本质就是迭代器
生成器必须在函数体内定义,并且生成器直接调用不会执行函数体内代码
通过__next__()取值才会执行函数体内代码,并且yield会返回一次值,一次一个值(可以返回多次)。
2.请用自己认为通俗易懂的话简述面向过程编程思想,并列举优缺点。
面向过程编程思想类似于工厂流水线,即先做什么后做什么。
优点:复杂的问题流程化,简单化
缺点:可扩展性差
3.列表生成式与生成器表达式(生成器生成式)的区别?
列表生成式可依赖索引取值,方便,但是耗费资源
生成器表达式没有索引取值,取值不方便,但是节省资源
4.写出以下程序的输出结果1
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
5.写出以下程序的输出结果2
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
6.写出一下程序的输出结果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))) # 此处写答案--> 别看了,生成器不会给你显示的
7.从0-99这100个数中随机取出10个,要求不能重复,使用列表生成式。
print([x * x for x in range(1, 11)])
8.请写出匿名函数 lambda表达式的语法格式以及使用方式?
key = lambda 参数 : 返回值
print(key(参数))
和内置函数一起用
9.请用两种方式获取list1中最大值与最小值。
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))
10.请使用两种方式获取user_dic字典中薪资最高的员工。
user_dic = {
'张全蛋': 20000,
'赵铁柱': 3000,
'李小花': 8000,
'伍六七': 1500
}
print(max(user_dic,key=lambda x:user_dic[x]))
选做题
1.一行代码实现 9*9 乘法表
2.继续编写ATM加购物车