生成器及表达式+常用内置函数
生成器及表达式+常用内置函数
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