函数的闭包 迭代器的使用
1 函数名的应用(第一类对象)
函数名的命名规范和变量是一样的
(1)由数字,下划线,字母组成
(2)不能使用python关键字
(3)不能由纯数字或数字开头
(4)要有意义
(5)不要太长
(6)不要使用中文
(7)推荐使用驼峰或下划线命名
闭包的好处,让变量常驻内存,看例子
def outer(): a=10 闭包中 这里最耗内存 用的时间长 def inner print(a) return inner outer()() 从头执行了一遍inner
outer()() 再次从头执行一遍inner 闭包的作用就没有用到 闭包的特点就是省内存
def outer():
a=10
def inner():
print(a)
return inner
ret=outer() 访问外部函数,获取到内部函数的函数地址
ret() 从头开始执行了一遍inner(内部函数)
ret() 再次访问inner 不从头执行 而是从def inner() 处执行 用到了闭包的效果 这样子就比较节省内存
两个函数中outer()()与ret=outer() ret()有什么区别:
第一个outer()()
outer()() 从头(从def outer())在从头开始执行了一遍inner后 没有用到闭包的功能
第二个ret=outer()
ret() 从头执行了一遍inner
ret() 在从def inner(): 处执行 不经过a=10(耗内存,耗时间) 用到了闭包中的节省内存
闭包的特点是:
1 保护你的变量不受外界影响
2 可以让变量常驻内存
可以作为列表中的元素进行存储
def func1(): pass def func2(): pass lst=[func1,func2] for el in lst: el()
可以作为参数传递给函数
def func(): def proxy(fn): fn() proxy(func)
可以作为函数的返回值
def func(): def inner(): pass return inner func()()
2闭包
闭包:在内层函数中访问外层函数的局部变量
好处:
1 保护你的变量不受外界影响
2 可以让变量常驻内存
写法:
def outer(): a=10 def inner(): print(a) return inner
3 迭代器
使用dir来查看该数据包含了那些方法,可迭代对象可以使用_iter_()来获取到迭代器,可迭代器里面有_next_()
用来遍历列表,字符串 元组......... 可迭代对象
可迭代对象:lterable,里面有_iter_()可以获取迭代器,没有_next_()
迭代器:lteraor 里面有_iter_()可以获取迭代器 还有_next_()
迭代器的特点:
1 只能向前
2 惰性机制
3 省内存
for 循环的内部机制
for i in [1,2,3]: print(i) 结果: 1 2 3
1 首先获取到迭代器
2 使用while循环获取数据
lst=[1,2,3] lst_iter=lst.__iter__() while: try: i=lst_iter.__next__() 来获取值 print(i) except StopIteration: brerak
try: except StopIteration 捕获错误 自己承担 (当执行完最后一个时 在使用__next__就会报错 因为没有下一个元素)
3 it._next_()来获取数据
4处理异常try: except Stoplteration
lst =["章子怡","王力宏","马勇","张韶涵","茉莉花"] it = lst._iter_() while 1: try: data=it._next_() for el in lst: print(el) except Stoplteration break
结果:章子怡
王力宏
马勇
张韶涵
茉莉花