函数名的应用,闭包,迭代器

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

函数名的命名规范和变量差不多

1 def func():
2     print("吃了么")
3 def func2(fn):
4     print("我是finc2")
5     fn()
6     print("我是func3")
7 func2(func)

首先理解print(func) 这里输出的是一个func的内存地址,只有后面有括号的时候才是调用函数

这道题先是走7 前面是这个func的循环体,循环func2 这里的fn=func 内存地址相同 然后输出"我是func2',再走fn=fnc走1,输出:\"吃了么",最后走"我是fun3",结束这个循环

 

函数可以作为函数的返回值

 

1 def fun_1():
2     print("这里是函数1")
3     def func2():
4         print("这里是函数二")
5     print("这里是函数一")
6     return  func2
7 fn=fun_1()
8 fn()

这里fun_1的返回值又通过fn()的形式继续输入

 首先执行fun_1 输出"这里是函数1",  继续往下走,输出"这里是函数一"  然后输出返回值 func2 注意 这里输出的是一个内存地址 然后走 8 fn() 继续循环fn=func2这个函数输出"这里是函数二"

 

2.闭包

:定义:在内层函数访问外层函数的变量

作用: 1.保护变量不受侵害

2.可以让一个变量常驻内存(函数里面a=10)

1 def func():
2     name="alex"
3     def fun2():
4         print(name)
5     fun2()
6 func()

这里的name="alex" 就是一个闭包  因为这里 alex 是内层函数对外层函数变量的引用  ,就叫闭包  外层没有函数所以要引用

1 def func():
2     name="alex"
3     def fun2():
4         print(name)
5     return  fun2
6 fn=func()
7 fn()

6.访问外部函数,获取内部函数的地址

7.返回内部函数

 

3.迭代器

1 s = "HAHAHAHA"
2 print(dir(s))
3 print(dir(str))

这里 dir2 指的是输出的打印对象的方法和类 

dir 3 指的是打印类的方法和类

所有的 __iter___ 是可以迭代的意思

s="            "

it = s .__iter___  #获取迭代器

print(it)

print(it__next__)  一个一个数下去

特点: 1.只能向前

2.几乎不占内存,节省内存

3. for 循环

4.惰性机制

1 lst=[1,2,3]
2 lis_iter = lst.__iter__()
3 while 1:
4     try:
5         i=lis_iter.__next__()
6         print(i)
7     except StopIteration:
8         break

2. #获取迭代器

try ecprct  只是预防

StopIteration 这一个错误
5#获取下一个元素
1 lst=["我是神"]
2 from collections import  Iterable
3 from collections import  Iterator
4 print(isinstance(lst,Iterable))
5 print(isinstance(lst,Iterator))

 

ITERABLE  # 可迭代对象 没有__next__

ITERATOR  # 迭代器 

这里lst 只是一个对象 并不能进行下一项迭代

 

posted @ 2018-08-10 17:06  逆欢  阅读(103)  评论(0编辑  收藏  举报