生成器及表达式+常用内置函数

生成器及表达式+常用内置函数

1.生成器对象

生成器其实就是自定义的迭代器。其实就是一个内部有yield关键字的函数,在定义阶段就是一个普通的函数,跟普通函数的区别是在第一次调用函数

的时候不会执行代码,而是把函数先转换成生成器,然后用.next()方法才会执行代码。执行代码的时候如果遇到yield函数会先停止(阻塞),继续调

用才会往下走,再遇到yield又停止(阻塞)...

2.自定义range功能

3.yield传值(了解)

yield传值是给函数体代码传参的第三种方式。第一种是形参传参,第二种是闭包函数传参。用.send(参数) = yield 的方式传。

并不会执行代码 而是转换成生成器。

4.yield与return对比区别

5.生成器表达式

生成器表达式内部代码只有在迭代取值的时候才会执行。
迭代器对象和生成器对象都可以看成是工厂,为了节省空间,只有当我们索要数据的时候才会加工出数据。

语法结构:
res = (满足if条件后的变量 for i in 可迭代对象 if条件)

6.其他内置函数

其他内置函数
 1 # 1.abs()  绝对值
 2 print(abs(123))
 3 print(abs(-123))
 4 
 5 # 2.all()  any()
 6 l = [11, 22, 33, 0]
 7 print(all(l))  # 所有的元素都为True结果才是True
 8 print(any(l))  # 所有的元素只要有一个为True结果就为True
 9 
10 # 3.bin() oct() hex()  进制数
11 print(bin(123))
12 print(oct(123))
13 print(hex(123))
14 
15 # 4.bytes() str()
16 res = '金牌班 最牛逼'
17 res1 = bytes(res, 'utf8')
18 print(res1)
19 res2 = str(res1, 'utf8')
20 print(res2)
21 res1 = res.encode('utf8')
22 print(res1)
23 res2 = res1.decode('utf8')
24 print(res2)
25 
26 # 5.callable()  是否可调用(查看能不能加括号运行)
27 s1 = 'jason'
28 def index():
29     pass
30 print(callable(s1),callable(index))  # False True
31 
32 # 6.chr()  ord()
33 print(chr(65))  # 根据ASCII码转数字找字符
34 print(ord('A'))  # 65
35 
36 # 7.complex()  复数
37 print(complex(123))  # (123+0j)
38 
39 # 8.dir()  查看当前对象可以调用的名字 
40 def index():
41     pass
42 print(dir(index))
43 print(index.__name__)
44 
45 # 9.divmod()  # 整除,余
46 print(divmod(101,10))  # 101整除10,余1》》》(10,1)
47 """总数据100 每页10条  10页"""
48 """总数据99  每页10条  10页"""
49 """总数据101 每页10条  11页"""
50 num, more = divmod(233,10)
51 if more:
52     num += 1
53 print('总共需要%s页' % num)
54 
55 # 10.eval()只能识别简单的语法  exec()可以识别复杂语法  都是将字符串中的数据内容加载并执行
56 res = """
57 你好啊
58 for i in range(10):
59     print(i)
60 """
61 res1 = """
62 print('hello world')
63 """
64 eval(res1)
65 exec(res1)
66 
67 # 11.isinstance()  判断是否属于某个数据类型
68 print(isinstance(123, float))  # False
69 print(isinstance(123, int))  # True
70 
71 # 12.pow() 次方
72 print(pow(4, 3))  # 4的3次方
73 
74 # 13.round() 五舍六入,小数点后面小于5就舍,6及以上就入
75 print(round(4.8))
76 print(round(4.6))
77 print(round(8.5))
78 
79 # 14.sum() 求和
80 l = [11, 22, 333, 44, 55, 66]
81 print(sum(l))  # 求列表l里面所有元素的和

 

 

7、小练习

 1 # 求和
 2 def add(n, i):
 3     return n + i
 4 # 调用之前是函数 调用之后是生成器
 5 def test():
 6     for i in range(4):
 7         yield i
 8 g = test()  # 初始化生成器对象
 9 for n in [1, 10]:
10     g = (add(n, i) for i in g)
11     """
12     第一次for循环
13         g = (add(n, i) for i in g)
14     第二次for循环
15         g = (add(10, i) for i in (add(10, i) for i in g))
16     """
17 res = list(g)
18 print(res)
19 
20 #A. res=[10,11,12,13]
21 #B. res=[11,12,13,14]
22 #C. res=[20,21,22,23]
23 #D. res=[21,22,23,24]
练习题(面试)

 

 上图摘自JudyJU 

 

posted @ 2021-11-22 21:14  Panda_Xin  阅读(89)  评论(0编辑  收藏  举报