python葵花宝典第12式–函数名、闭包、迭代器
12.1 函数名的应用
- 函数名就是一个变量
- 函数名可以作为参数传递给函数
招式1:
def fun1():
print("我是fun1")
def fun2(fn):
print("我是fun2")
fun2(fun1)
- 函数名可以作为函数的返回值
招式2:
def fun():
print("我是fun")
a = 10
def inner():
print("我是inner")
return inner
ret = fun()
ret()
fun()()
- 可以作为列表中的元素进行存储
招式3:
def fun1():
pass
def fun2():
pass
lst = [fun1,fun2]
for fun in lst:
fun()
12.2闭包:在内层函数中访问外层函数的变量
作用:
- (1)可以保证你的变量不受侵害
- (2)可以让一个变量常驻内存
招式4:
def outer():
a = 10 #对外界是不开放的
def inner():
print(a)
inner()
outer()
招式5:
查看爬虫程序是否是闭包:
- 如果打印的是None,不是闭包
- 如果打印的是地址,是闭包
#简易爬虫
from urllib.request import urlopen
def outer():
s = urlopen("http://www.xiaomi.com/").read()
def getContent():
return s
return getContent
pa = outer()
ret = pa()
print(ret)
12.3迭代器
特点:
(1)只能向前下一个
(2)几乎不占用内存,节约内存
(3)for循环
(4)惰性机制(面试题,难度高)
- 所有带__iter__可以使用for循环的,可迭代对象
- 可迭代对象可以使用__iter__()来获取到迭代器
- 迭代器里面有__next__(),可以获取内容
招式6
s = "小可爱"
it = s.__iter__()
print(dir(it))
print(it.__next__())
print(it.__next__())
print(it.__next__())
结果:
小
可
爱