迭代器
一.函数名的运用
函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量
1.函数名的内存地址
def func():
print("哈哈")
print(func)
结果是 : <function func at 0x1101e4ea0>
2.函数名可以赋值给其他变量
def func():
print("哈哈")
print(func)
a = func # 把函数当成一个变量赋值给另一个函数
a() # 函数调用 func()
3.函数名可以当成容器类的 元素
def func1():
print("哈哈")
def func2():
print("呵呵")
def func3()
print("嘻嘻")
lst = [func1, func2, func3]
for i in lst:
i()
4.函数名可以当成函数的参数
5.函数名可以作为函数的返回值
二. 闭包 就是内层函数对外层函数(非全局变量)的变量的应用
def func():
name = "alex"
def func1():
print(name) ### 闭包
func1()
func() # 结果是 闭包
我们可以使用 __closure__来检验函数是否是闭包,
使用函数名.__closure__返回cell就是闭包,返回None 就不是闭包
闭包的作用就是让一个变量能够常驻内存. 供后面的程序使用
三 迭代器
s = "我叫哈哈哥"
print(dir(s)) # 可以打印对象中的发放和函数
print(dir(str)) # 可以打印 类中声明的发放和函数
s = "我爱北京天安门"
c = s.__iter__() # 获取迭代器
print(c.__next__()) # 使用迭代器进行迭代. 获取一个元素 我
print(c.__next__()) # 爱
print(c.__next__()) # 北
print(c.__next__()) # 京
print(c.__next__()) # 天
print(c.__next__())
.
for 循环的 机制
for i in [1,2,3,4,5,6]
print(i)
## 试油wile 循环 + 迭代器 来 模拟 for 循环机制
lst = [1,2,3,5,6,9,8,7]
it = lst.__iter__() # 获取迭代器
while 1:
tey:
el = it.__next__()
print(i)
except StopIteration
break
总结: iterable:可迭代对象,内部包含__iter__()函数
iterator: 迭代器,内包含__iter__() 和__next__()
迭代器的特点:
1) 省内存
2)惰性机制,你问他要值他才给你,不要不给.
3)不能够反复,只能向下执行