迭代器
哈赛
经典时刻
昨日内容回顾
1 形参的第三种,动态传参
1 位置参数的动态传数 *args
2 关键字的动态传数 **kwargs
Def fun(*args,**wkargs)
Pass
*和 ** 在函数声明的位置,表示聚合
*和** 在函数调用的时候,表示打散,传参
2命名空间
1 内置命名空间
2全局命名空间
3局部命名空间
3作用域:
1,全局作用域:内置+全局,globals()
2,局部作用域:局部(函数内部)locals()
\
4 global和nonlocal
Global 在函数内部(局部)调用全局中的函数
Nonlocal 在局部函数访问外层函数中离他最近的那一层的那个变量
三 今日主要内容
1,函数名的应用(第一类对象)
函数名的命名规范和变量是一样的
函数名其实就是变量名,
可以作为列表中的元素进行存储
Def fun1()
Pass
def fun2()
Pass
Lst =[func1,func2]
For e1 in lst:
E1()
可以作为参数 传递给函数
Def func():
Pass
Def func():
Pass
Def proxy(fn)
Fn()
Proxy(func)
可以作为函数的返回值
Def func()
Def inner()
Return inner
Func()()
2,闭包
闭包,在内层函数中访问外层的局部变量
好处:
- 可以保护你的变量不收外界影响
- 可以让变量常驻内存
写法:
Def under()
A=10
Def inner():
Print(a)
Return inner
3 迭代器
使用dir 来查看该数据包含了哪些方法
用来遍历列表,字符串,元祖...可迭代对象
可迭代对象:iterable,里面有_intr_()可以获取迭代器,没有_next_()
迭代器: itertor,里面有_liter_()可以获取迭代器,还有_next_()
迭代器的特点:
1,只能向前
2,惰性机制
3,省内容(生成器)
For 循环的内部机制,
1,首先获取到迭代器,
2使用while循环来获取数据
3,it,_next_()来获取数据
4处理异常 try :xxx except StopIteration:
It =xx.iter_()
While 1:
Try :
Data= it._next_()
Xxxx
Except StopIterration
Break
def func():
a = 10
def inner():
print(a)
print(inner.__closure__) # 如果打印的是None. 不是闭包. 如果不是None, 就是闭包
func()