当前位置: 首页 > 后端技术 > Python

Python三大活跃工具

时间:2023-03-26 16:27:01 Python

1、迭代器是可迭代的:可以通过for循环迭代,如:list、tuple、collection、dictionary、string等fromcollectionsimportIterablel=[1,2,3,4]t=(1,2,3,4)d={1:2,3:4}s={1,2,3,4}print(isinstance(l,Iterable))print(isinstance(t,Iterable))print(isinstance(d,Iterable))print(isinstance(s,Iterable))//输出结果:TrueTrueTrueTrue可迭代协议:__iter__方法内部实现print("__iter__"indir(l))print("__iter__"indir(t))print("__iter__"indir(d))print("__iter__"indir(s))//输出结果:TrueTrueTrueTrue迭代器:是访问集合的方法,有_inter_和_next_Methoda=iter(l)#iter()方法生成迭代器,参数必须是可迭代对象;iter()方法等价于"__iter__()"print(a)whiletrue:try:print(next(a))#next()方法取迭代器的值,等价于"__next__()"exceptStopInteration:break//Outputresult:#Listiterator内存地址1234特点:1.访问者不需要关心迭代器内部结构只需要使用next()方法即可连续取下一个内容2.集合中某个值不能随机访问,只能从头到尾顺序访问,不能回滚3.方便循环比较大的数据集合,节省内存总结:Iterablefor可以循环的对象一定是可迭代对象,但不一定是迭代器变成迭代器,然后使用迭代器协议实现循环访问2.生成器本质:迭代器定义:调用时返回一个迭代器的函数,那么这个function是发电机;如果函数包含yield语法,那么这个函数会变成generatorfunctiongeneratorfunction:包含yield语法的函数,yield可以从函数返回一个值,不同于return(程序结束),调用generator函数会得到一个可迭代对象,并得到这个可迭代对象每次函数的值都可以促进函数的执行并获得新的返回值,直到函数结束(与send()方法相同,传递给前面的yield)列表理解:list1=['student%s'%iforiinrange(10)]生成器表达式:list1=('student%s'%iforiinrange(10)])1.用()得到生成器表达式2.列表理解和生成器表达式都是方便的编程方式,但是生成器表达式更节省内存扩展闭包:在外层函数中定义一个内层函数,内层函数引用外层函数的临时变量,和返回值theouterfunctionistheinnerfunctionclosurefunction:innerfunctionreferencestheouterscopeinsteadoftheglobalscope,internalfunctioncalledaclosurefunction闭包的好处:可以读取函数内部的变量,以及这些变量的值一直保存在内存中,调用外部函数后不会回收装饰器格式:fromfunctoolsimportwrapsdefdecorator(func):@wraps(func)#帮助查看函数信息的方法definner(*args,**kargs):print("before...")res=func(*args,**kargs)print("after...")returnresreturninnerdefsum(a,b):returna+b#使用句法糖:@decorator==>sum=decorator(sum)=innerres_sum=sum(1,2)==>res_sum=inner(1,2)多个装饰器:defwrapper1(func):definner():print('wrapper1,func'之前)func()print('wrapper1,func'之后)re转innerdefwrapper2(func):definner():print('wrapper2,beforefunc')func()print('wrapper2,afterfunc')returninner@wrapper2@wrapper1deff():print('inf')f()//输出结果:按照语法糖顺序优先执行before内容,然后执行after内容wrapper2,funcwrapper1之前,funcinfwrapper1之前,funcwrapper2之后,fun之后