第一类对象

函数名的使用及第一类对象:
查看函数的内存地址   print(函数名)
函数可以当做值,赋值给变量
函数可以参数,传递个函数的形参 函数当参数的时候不能加括号
函数可以当返回值 当返回值的时候不括号
函数名可以元素存在容器里
 1 def func1():
 2     print("念阳枭")
 3 def func2():
 4     print("李星云")
 5 def func3():
 6     print("百里登风")
 7 def func4():
 8     print("李大白")
 9 lst=[func1,func2,func3,func4]
10 #lst[0]()
11 for el in lst: # el是裂变中的每一项
12     el()        # 拿到函数,执行函数

   可以把函数放到容器里:

 1 def func1():
 2     print("念阳枭")
 3 def func2():
 4     print("李星云")
 5 def func3():
 6     print("百里登风")
 7 def func4():
 8     print("李大白")
 9 lst=[func1(),func2(),func3(),func4()]  # 函数加上()就是调用函数,由于之前的函数没有return值,所以打印列表中,装的是None,这样没有任何作用!
10 print(lst)
函数名可以像返回值一样返回:
1 def wrapper():
2     def inner():
3         print("锅包肉")
4     return inner  # 函数名可以像返回值一样返回
5 ret=wrapper()
6 ret()             # 在函数外面访问了函数内部的函数
函数可以传参:
 1 def func1():
 2     print("念阳枭")
 3 def func2():
 4     print("李星云")
 5 def func3():
 6     print("百里登风")
 7 def func4():
 8     print("李大白")
 9 # 代理,装饰器的雏形
10 def proxy(a):    # a就是变量,形参       函数可以传参
11     print("我是代理")
12     a()
13     print("代理执行完毕")
14 proxy(func1)
15 proxy(func2)
16 proxy(func3)

闭包:
嵌套函数,在嵌套函数内,内部函数使用外部变量(非全局变量) 就是一个闭包 闭包可以多层
好处,
保护变量不会被外界修改
函数内使用到的变量会生命周期延长
节省开辟空间和销毁空间的时间

迭代器:
可迭代对象:  遵守可迭代对象的协议  具有__iter__()方法
除去整型和布尔值剩下现已知都是
迭代器: 遵守迭代器的协议  具有__iter__()方法和__next__()方法
创建一个迭代器 == 可迭代对象.__iter__()
使用迭代器 == 迭代器.__next__()

1 lst=["张飞","亚索","吕布","雅典娜"]
2 it=lst.__iter__()       #拿到的是迭代器
3 print(it.__next__())    #下一个
4 print(it.__next__())    #下一个
5 print(it.__next__())    #下一个
6 print(it.__next__())    #下一个
7 
8 it=lst.__iter__()       # 用此语句重新获取迭代器,迭代器只能一次过
只能向下执行,不能反复
结束的时候会给我们扔出来一个错误, StopIteration

用while模拟for循环 for el in lst:
1 lst=["王者荣耀","英雄联盟","QQ飞车","穿越火线"]
2 it=lst.__iter__()               # 获取迭代器0
3 while 1:                        #循环
4     try:                        #尝试
5         el=it.__next__()        # 拿数据
6         print(el)
7     except StopIteration:       # 出了错误,except解决,数据拿完
8         break                   # 结束循环

 

 
迭代器机制:
不能回退
惰性机制
一次性的
查看是迭代器是否是可迭代对象:
from collections import Iterator,Iterable
print(isinstance('查看的内容',Iterable)) # 查看是否是可迭代的
print(isinstance('查看的内容',Iterator)) # 查看是否是迭代器
迭代器一定是可迭代的,但是可迭代的不一定是迭代器
 
 
 
 
 
posted @ 2019-01-10 19:15  53Dawns  阅读(113)  评论(0编辑  收藏  举报