函数
可变参函数
关键字参数
匿名函数
偏函数
闭包
装饰器
参考下一篇笔记 :https://www.cnblogs.com/TMMM/p/11395710.html
生成器
生成器 :
根据逻辑生成一个存放数据的容器。弥补了列表生成式的弊端。
生成器节省了内存,当生成器产生的时候 数据不会立即存放在内存中,而是取出一个存放一个
与列表生成式的区别:
生成器有两种方式生成数据:
-
将列表生成式的中括号换成小括号(生成的数据 数据的来源 对数据的进行筛选)
-
类似于方法的声明 需要每次调用方法的时候需要返回生成的数据 。不是使用return 返回 [因为return直接结束函数] 使用yield代替return返回生成器中的数据
1 # 生成器的第一种方式生成和获取数据 2 ge = (num for num in range(1,1000)) 3 print(ge) # 其类型 结果:<generator object <genexpr> at 0x106b9c480> 4 value = next(ge) 5 print(value) # 结果是:1。再次执行next(ge),结果是:2 6 # 获取前10个数据 7 for _ in range(10): 8 value = next(ge) 9 print(value) 10 ''' 11 遍历的时候 需要将对应的值赋予给变量 就得起一个变量的名字来存放数据 12 遍历的时候 只是为了获取循环的次数,为不会获取序列中的元素 就可以使用_占位符变量 13 ''' 14 15 # 生成器的第二种方式生成和获取数据 16 def get_value(): 17 for i in range(1,1000): 18 yield i # 此处并非结束函数,如果在yield后面还有平级的语句是会被执行的,但是是在第二次获取的时候执行 19 ge = get_value() 20 print(ge) # 其类型 结果:<generator object <genexpr> at 0x106b9c480> 21 value = next(ge) 22 print(value)
注意: 当生成其中的数据取完之后,再去取数据,就回报错
迭代器
迭代器:是相当于另外一种遍历序列的方式,通过next方法一个一个进行迭代 移动取数据的
如果一个序列想使用迭代器 前提这个序列是可以迭代的
1 from collections import Iterable,Iterator 2 3 # 验证指定数据是否是可迭代类型的 4 res = isinstance(10,Iterable) 5 print(res) # 结果 :False。 整型是不可以迭代的 6 7 res = isinstance('10',Iterable) 8 print(res) # 结果 :True。字符串类型是可以迭代的 9 10 res = isinstance(('10'),Iterable) 11 print(res) # 结果 :True。元组类型是可以迭代的 12 13 res = isinstance(['10'],Iterable) 14 print(res) # 结果 :True。列表类型是可以迭代的 15 16 res = isinstance({'10'},Iterable) 17 print(res) # 结果 :True。集合类型是可以迭代的 18 19 res = isinstance({'10':10},Iterable) 20 print(res) # 结果 :True。字典类型是可以迭代的 21 """ 22 Iterable 这个类型验证的结果是:所有的序列都是可以迭代的[遍历],for in 进行遍历 23 能用for in进行遍历的序列,不一定能用迭代器进行遍历。迭代器遍历使用next方法一个一个迭代的 24 生成器 --- 可以使用next来迭代 --- 就可以使用迭代器迭代。 25 列表 --- 可以使用for in进行遍历 --- 但不能使用迭代器迭代 26 """ 27 28 # 若想使用迭代器进行迭代列表类型,需要使用iter(序列)进行转换, 29 # 转化成Iterator迭代器的类型才可以使用next方法进行遍历迭代 30 list0 = [12,34,64,76,34,5,86] 31 it = iter(list0) 32 value = next(it) 33 print(value) # 结果:12 34 value = next(it) 35 print(value) # 结果:34