标签:stop 存储 生成 iter 没有 rabl 行存储 ble 常驻内存
函数名的命名规范和变量是一样的
函数名其实就是变量名
1.可以作为列表中的元素进行存储
1 def func1(): 2 pass 3 def func2(): 4 pass 5 lst = [func1,func2] 6 for el in lst: 7 el()
2.可以作为参数传递给函数
1 def fun(): 2 pass 3 def proxy(fn): 4 fn() 5 proxy(func)
3.可以作为函数的返回值
1 def fun(): 2 def inner(): 3 pass 4 return inner 5 fun()()
闭包:在内层函数中访问外层函数的局部变量
好处:
1.保护你的变量不受外界影响
2.可以让变量常驻内存
3.写法:
1 def outer(): 2 a = 10 3 def inner(): 4 print(a) 5 return inner
使用dir来查看该数据包含了哪些方法
1 print(dir(str))#有__iter__ 2 print(dir(int))#没有__iter__ 3 print(dir(list))#有__iter__
4 print(dir(tuple))#有__iter__
用来遍历字符串,列表,元组...等可迭代对象
可迭代对象:iterable,里面有__iter__()可以获取迭代器,没有__next__()
迭代器:iterator,里面有__iter__()可以获取迭代器,有__next__()
所有的带__iter__可以使用for循环,是可迭代对象
可迭代对象可以使用__iter__()来获取迭代器,迭代器里面有__next__()
迭代器的特点:
1.只能向前
2.惰性机制
3.省内存(生成器)
迭代器模拟for循环:
1 lst = [1,2,3,4,5] 2 for el in lst: 3 print(el) 4 5 lst = [1,2,3,4,5] 6 it = lst.__iter__()#获取迭代器 7 while 1: 8 try:#尝试执行 9 el = it.__next__() 10 print(el) 11 except StopIteration:#处理错误 12 break
通过dir来判断数据是否是可迭代的,以及数据是否是迭代器
1 print("__iter__" in dir(it)) 2 print("__next__" in dir(it))
通过isinstance()来判断
1 from collections inport Iterable#可迭代对象 2 from collections import Iterator#迭代器 3 4 5 print(isstance(lst,Iterable)) 6 print(isstance(lst,Iterator))
把参数放在list()里面进行迭代
1 lst = [1,2,3,4,5] 2 it = lst.__iter__() 3 s = list(it) 4 print(s)
结果为[1,2,3,4,5]
for 循环的内部机制:
1.首先获取到迭代器
2.使用while循环获取数据
3.it.__next__()来获取数据
4.处理异常 tyr:xxx except StopIteration:xxx
1 it = xx.__iter__() 2 while 1: 3 try: 4 data = it.__next__() 5 xxx 6 except StopIteration: 7 break
标签:stop 存储 生成 iter 没有 rabl 行存储 ble 常驻内存
原文地址:https://www.cnblogs.com/s593941/p/9455775.html