python高级 之(一) --- 函数类型

函数

可变参函数

关键字参数

匿名函数

偏函数

闭包


装饰器

  参考下一篇笔记 :https://www.cnblogs.com/TMMM/p/11395710.html 

生成器

  生成器 :

  根据逻辑生成一个存放数据的容器。弥补了列表生成式的弊端。

  生成器节省了内存,当生成器产生的时候 数据不会立即存放在内存中,而是取出一个存放一个

  与列表生成式的区别:

  列表生成式可以快速生成一批数据存放在内存中。列表生成式有一个弊端:

  如果生成了大量的数据 但是只使用 前面一些的数据,此时使用列表生成式就非常的浪费内存

  生成器有两种方式生成数据:

  1. 将列表生成式的中括号换成小括号(生成的数据 数据的来源 对数据的进行筛选)

  1. 类似于方法的声明 需要每次调用方法的时候需要返回生成的数据 。不是使用return 返回 [因为return直接结束函数] 使用yield代替return返回生成器中的数据

  生成器中获取数据

  通过next的方法 将数据从生成器中一个一个的取出

  已经取出数据了 再使用next获取数据 获取的是下一个数据 不会重复的获取同一个数据

 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)

  注意: 当生成其中的数据取完之后,再去取数据,就回报错

迭代器

  遍历序列:for 变量 in 序列

  迭代器:是相当于另外一种遍历序列的方式,通过next方法一个一个进行迭代 移动取数据的

      如果一个序列想使用迭代器 前提这个序列是可以迭代的

  collections模块:Iterator   --- 迭代器

          Iteratable --- 验证序列是否可以迭代

 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

猜你喜欢

转载自www.cnblogs.com/TMMM/p/11423392.html
今日推荐