函数的闭包 迭代器的使用

1 函数名的应用(第一类对象)

函数名的命名规范和变量是一样的

(1)由数字,下划线,字母组成

(2)不能使用python关键字

(3)不能由纯数字或数字开头

(4)要有意义

(5)不要太长

(6)不要使用中文

(7)推荐使用驼峰或下划线命名

闭包的好处,让变量常驻内存,看例子 

def outer():
  a=10      闭包中 这里最耗内存  用的时间长
  def inner
  print(a)
  return inner
outer()()  从头执行了一遍inner
outer()()  再次从头执行一遍inner 闭包的作用就没有用到 闭包的特点就是省内存

def outer():
a=10
def inner():
print(a)
return inner
ret=outer()  访问外部函数,获取到内部函数的函数地址
ret()  从头开始执行了一遍inner(内部函数)
ret()   再次访问inner 不从头执行 而是从def inner() 处执行  用到了闭包的效果 这样子就比较节省内存 

两个函数中outer()()与ret=outer() ret()有什么区别:
第一个outer()()
outer()() 从头(从def outer())在从头开始执行了一遍inner后 没有用到闭包的功能
第二个ret=outer()
ret()  从头执行了一遍inner
ret()  在从def inner(): 处执行 不经过a=10(耗内存,耗时间) 用到了闭包中的节省内存
闭包的特点是:
1 保护你的变量不受外界影响
2 可以让变量常驻内存

 

可以作为列表中的元素进行存储

def func1():
pass
def func2():
pass
lst=[func1,func2]
for el in lst:
el()

 可以作为参数传递给函数

def func():
def proxy(fn):
fn()
proxy(func)

 可以作为函数的返回值

def func():
  def inner():
pass
  return inner
func()()

 

2闭包

闭包:在内层函数中访问外层函数的局部变量

好处:
1 保护你的变量不受外界影响

2 可以让变量常驻内存

写法:

def outer():
a=10
def inner():
print(a)
return inner

 3 迭代器

使用dir来查看该数据包含了那些方法,可迭代对象可以使用_iter_()来获取到迭代器,可迭代器里面有_next_()

用来遍历列表,字符串 元组......... 可迭代对象

可迭代对象:lterable,里面有_iter_()可以获取迭代器,没有_next_()

迭代器:lteraor 里面有_iter_()可以获取迭代器 还有_next_()

 

迭代器的特点:

1 只能向前

2 惰性机制

3 省内存

 

for 循环的内部机制

for i in [1,2,3]:
print(i)

结果:
   1
   2
   3

 

1 首先获取到迭代器

2 使用while循环获取数据

lst=[1,2,3]
lst_iter=lst.__iter__()
while:
try:
i=lst_iter.__next__()   来获取值
print(i)
except StopIteration:
brerak

try: except StopIteration  捕获错误 自己承担 (当执行完最后一个时 在使用__next__就会报错 因为没有下一个元素)

 

3 it._next_()来获取数据

4处理异常try:     except Stoplteration

lst =["章子怡","王力宏","马勇","张韶涵","茉莉花"]
it = lst._iter_()
while 1:
try:
data=it._next_()
for el in lst:
print(el)
except Stoplteration
break


结果:章子怡
 王力宏
 马勇
 张韶涵
 茉莉花

 

posted @ 2018-08-10 15:56  茉莉花M  阅读(123)  评论(0编辑  收藏  举报