闭包
写法:在外层函数声明一个变量
在内层函数使用或者返回这个变量
如果不用这个变量就不是闭包
1.可以保护我的变量
2.可以让一个变量常驻内层(但不是全局变量)
这个执行时间不确定 所以你必须给我留着
3.查看是否有闭包
ret.__closure__
4.闭包应用:
保护变量 常驻内层
====>网络爬虫 应对带宽不稳定情况
1 import urllib.request 2 def outer(): 3 content = urllib.request.urlopen("http://www.luffycity.com").read().decode("utf-8") 4 5 def inner(): 6 print(content) 7 return inner 8 outer()()
迭代器
可迭代的:str/list/tuple/dict/set/open()/range()
# dir() 可以查看某数据类型中可以执行的方法
在字符串里面发现了__iter__,没有__next__
在int里面没有__iter__,没有__next__
在list里面也有__iter__
# 所有包含了__iter__的东西都可以使用for循环
都可以进行迭代
1 # coding:utf-8 2 # 迭代器 for循环的本质 3 lst = [1, 2, 3, 4, 5, 6] 4 it = lst.__iter__() 5 6 while 1: 7 try: 8 print(it.__next__()) 9 except StopIteration: 10 print("结束了") 11 break