函数复习
带参装饰器?
作用:关闭装饰器
实例
# 带参数的装饰器:(相当于开关)为了给装饰器传参 # F=True#为True时就把装饰器给加上了 F=False#为False时就把装饰器给去掉了 def outer(flag): def wrapper(func): def inner(*args,**kwargs): if flag: print('before') ret=func(*args,**kwargs) print('after') else: ret = func(*args, **kwargs) return ret return inner return wrapper @outer(F)#@wrapper def hahaha(): print('hahaha') @outer(F) def shuangwaiwai(): print('shuangwaiwai') hahaha() shuangwaiwai()
可迭代对象?
可以被for循环的都是可迭代的,要想可迭代,内部必须有一个__iter__方法。
有哪些:字符串、列表、元组、字典、集合
迭代器
必须拥有__iter__方法和__next__方法。
迭代器优点
1 节省内存,同一时刻只出现一条数据,节省内存空间
2 取值过程单向不可逆
for循环,能遍历一个可迭代对象,他的内部到底进行了什么?
- 将可迭代对象转化成迭代器。(可迭代对象.__iter__())
- 内部使用__next__方法,一个一个取值。
- 加了异常处理功能,取值到底后自动停止。
用while循环模拟for循环:
l = [1,2,3,4] l_iter = l.__iter__() while True: try: item = l_iter.__next__() print(item) except StopIteration: break
将可迭代的转化成迭代器 迭代器 = 迭代器.__iter__()
为什么使用迭代器:方便我们遍历可迭代对象中的元素,获取每一个元素
判断迭代器,还是可迭代对象?
print('__next__' in dir(s))
应用模块 collections
from collections import Iterable 可迭代对象 from collections import Iterator 迭代器 print(isinstance('',Iterable)) 判断是否是可迭代对象 print(isinstance('',Iterator)) 判断收费是迭代器
生成器
本质上是一个迭代器,
内置函数
python提供给你直接可以拿来使用的所有函数。
dir() 查询内部方法
enumertae:枚举,返回索引与值的元组
zip:拉链函数,接收多个可迭代对象,将对象相同索引位置放在一个元组中,返回一个迭代器,返回迭代器中元素个数由最短的可迭代对象决定
filter:过滤函数,接收一个函数和一个可迭代对象,生成一个迭代器.将可迭代对象的每一个元素带入函数中,如果返回结果为True,则把元素添加入迭代器中
map:处理函数,接收一个函数和一个可迭代对象,生成一个迭代器,将可迭代对象的每一个元素带入函数中,把返回值添加入迭代器中
callble:判断参数是不是可调用的
dir:查看内置属性和方法的字符串
super:根据__mro__属性去查找方法
isinstance:判断一个对象是不是这个类实例化出来的
iscubclass:判断一个类是不是另一个类的子类,也可以判断两个类是不是相同的类