函数名的使用、闭包、生成器

一、函数名的使用

1、函数名可以当成迭代元素

1 def func1():
2     pass
3 def func2():
4     pass
5 lst=[1,2,func1,func2]

2、函数名可以当成参数传递

1 def func():
2     print("11111")
3 def proxy(fn):
4     fn()
5 proxy(func)

3、函数名可以当成返回值

1 def func()
2     def func1()
3         print("222222")   
4     return func1
5 f=func()                            #函数返回的是func1加上()调用
6 f()

# 注:只要记住函数名可以被当作变量使用

二、闭包

1、含义:可以在函数的内部访问函数外层的局部变量

2、优点:可以保护内部变量不收侵害、可以是变量常驻内存

3、简单的闭包

1 def func():
2     a=10
3     def func1()
4         print(a)
5     return func1
7 f=func
8 f()

三、迭代器

1、用dir()来查看可以执行哪些方法

2、可迭代数据可以使用__iter()__获取迭代器,获取之后可使用__next()__方法

3、迭代器模拟for循环

1 lst=[1,2,3,4]
2 it=lst.__iter__() #获取迭代器
3 def func():
4     try:
5         el=it.__next__()
6         print(el)
7     except StopIteration:
8         break
9 func()

4、判断数据是否可迭代、以及数据是否是迭代器的方法

 1 from collections import Iterable
 2 from collections import Iterator
 3 
 4 lst=[1,2,3]
 5 it=lst.__iter__()
 6 
 7 print(isinstance(lst,Iterable)) #可迭代对象
 8 print(isinstance(lst,Iterator)) #迭代器
 9 
10 print(isinstance(it,Iterable))
11 print(isinstance(it,Iterator))

 

posted @ 2018-08-10 17:10  神神气气  阅读(231)  评论(0编辑  收藏  举报