11.Python初窥门径(函数名,可迭代对象,迭代器)
程序员文章站
2022-04-10 20:57:09
Python(函数名,可迭代对象,迭代器) 一、默认参数的坑 二、函数名的应用 1. 函数名指向的是函数的内存地址,加上()就执行这个函数 2. 函数名是一个变量 3. 函数名可以作为容器类类型的元素 4. 函数名可以作为函数的实参进行传参 5. 函数名可以作为函数的返回值 三、可迭代对象 1. 字 ......
python(函数名,可迭代对象,迭代器)
一、默认参数的坑
# 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是. def func(a,l=[]): l.append(a) return l print(func(1)) # [1] print(func(2)) # [1,2] print(func(3)) # [1,2,3]
二、函数名的应用
-
函数名指向的是函数的内存地址,加上()就执行这个函数
def func(args): return args print(func) # <function func at 0x00000000024656a8> print(func(1)) # 1
-
函数名是一个变量
def age1(a): return a age2=age1 age3=age2 print(age3(1)) # 1
-
函数名可以作为容器类类型的元素
def func1(): print("in func1") def func2(): print("in func2") def func3(): print("in func3") l=[func1,func2,func3] print(l) # [<function func1 at 0x00000000024956a8>, <function func2 at 0x0000000002495730>, <function func3 at 0x00000000024957b8>] for i in l: i() # in func1 # in func2 # in func3
-
函数名可以作为函数的实参进行传参
def func(argv): print(argv) def func1(): print("in func1") def func2(argv): argv() print("in func2") a=1 func(a) # 1 func2(func1) # in func1 # in func2
-
函数名可以作为函数的返回值
def func1(): print("in func1") def func2(argv): print("in func2") return argv ret=func2(func1) print(ret) # in func2 # <function func1 at 0x0000000001df56a8>
三、可迭代对象
字面意思分析 : 可以重复迭代的实实在在的东西,list,dict,keys(),values(),tuple,str,set,range,文件句柄这些都属于可迭代对象
-
专业角度分析 : 内部含有'_ iter _'方法的对象,就是可迭代对象
内置函数 : dir()用来获取对象内部属性的方法,可用来判断对象是否符合可迭代要求.
- 优点 : 直观,操作方法较多
缺点 : 占用内存(字典除外),不能迭代取值,索引,字典key
四、迭代器
字面意思分析 : 可以重复迭代的工具
-
专业角度分析 : 内部含有'_ iter_ '并且含有'_ next _'方法的对象,就是迭代器
可迭代对象转化成迭代器用iter(),迭代器可以迭代取值,利用next()进行取值,迭代器一条路走到底,不走回头路
优点 : 非常节省内存,惰性机制
-
缺点 : 不直观,操作不灵活,效率相对低
l1=[1,2,3,4,5] obj=iter(l1) print(next(obj)) # 1 print(next(obj)) # 2 print(next(obj)) # 3 print(next(obj)) # 4 print(next(obj)) # 5 print(next(obj)) # 报错
利用while循环,模拟for循环内部循环可迭代对象机制
先要将可迭代对象转化成迭代器
利用next()对迭代器进行取值
-
利用异常处理try,处理报错
l1=[1,2,3,4,5] l2=iter(l1) while 1: try: print(next(l2)) except stopiteration: pass
五、可迭代对象与迭代器对比
- 可迭代对象是一个操作比较灵活,直观,效率相对较高,但是比较占用内存的数据集
- 迭代器是一个非常节省内存,满足惰性机制,但是效率相对较低,操作不灵活的数据集
上一篇: app测试点归纳
下一篇: opencv读取mp4或者摄像头