python基础知识复习
*)
三器一闭
第一章:什么是迭代器
今天复习了三器一闭,其中先复习什么是迭代器:
- ** 什么是迭代器:迭代是 访问集合的一种方式
- 可以迭代的数据类型有:列表,元祖,字典,字符串
- 不可以迭代的数据类型有:整形和浮点型
- 可迭代对象的本质就是可以向我们提供一个这样的“中间人”,迭代器可以帮助我们对其进行迭代遍历使用
- 一个实现了_iter_方法和_next_方法的对象,就是迭代器
- 如何判断一个对象是否是迭代器呢?
可以使用isinstance()来判断一个对象是否是lterator对象
下面展示一些demo
。
//
以下就是demo片段
//
In [56]: from collections.abc import Iterator
In [57]: isinstance([], Iterator)
Out[57]: False
In [58]: isinstance(iter([]), Iterator)
Out[58]: True
In [59]: isinstance(iter("abc"), Iterator)
Out[59]: True
第二章:什么是生成器
1 :在python中,这种一边循环一边计算的机制,称为生成器:generator
2 生成器是一种特殊的迭代器
3 :只要在def函数中有yield关键字的就称为生成器
4:只要有yield关键字,那么虽然看上去是调用函数,实际上已经变成了创建一个 生成器对象
5:我们除了可以使用next()函数来唤醒,让生成器继续执行外,还可以使用send()函数来唤醒执行。
6:使用send()函数的一个好处是:可以在唤醒的同时向断点处传入一个附加数据
7:
yield关键字有两点作用:
保存当前运行状态(断点),然后暂停执行,即将生成器(函数)挂起
将yield关键字后面表达式的值作为返回值返回,此时可以理解为起到了return的作用
可以使用next()函数让生成器从断点处继续执行,即唤醒生成器(函数)
Python3中的生成器可以使用return返回最终运行的返回值
第三章:什么是闭包
什么是闭包????
1:定义函数可以理解为:定义了一个全局变量,这个变量指向了一个代码块,其实说就是这个全局变量保存了一个代码块的地址,并且把它进行引用
下面展示 demo片段
。
// 闭包demo
// An highlighted block
def test():
print("--- in test func----")
test() # 这是调用函数
ret = test # 用另外一个变量 复制了 test这个引用,导致ret变量也指向那个 函数代码块
# 下面输出的2个地址信息是相同的
print(id(ret))
print(id(test))
# 通过引用调用函数
ret()
2 :使用闭包的注意点:闭包会携带他的函数作用域,因此会比其他函数占有更多的内存所以需要手动解除匿名函数的引用,以便释放内存
3:
闭包定义是在函数内再嵌套函数
闭包是可以访问另一个函数局部作用域中变量的函数
闭包可以读取另外一个函数内部的变量
闭包可以让参数和变量不会被垃圾回收机制回收,始终保持在内存中(而普通的函数调用结束后 会被Python解释器自动释放局部变量)
如下图demo:
下面展示一些 内联代码片
。
// 闭包demo;
// An highlighted block
def make_printer(msg): # 可以认为是 外部函数
def printer(): # 可以认为是 内部函数
print(msg)
return printer # 返回的内部函数的引用
printer = make_printer('Good!')
printer()