Python高级特性与几种函数的讲解
切片
从list或tuple中取部分元素。
list=[1,2,3,4] list[0:3]#[1,2,3] list[-2:-1]#-1表示最后一个,[3,4] list[1::2]#index=1开始,每两个取一个[2,4] list[:]#复制list,[1,2,3,4] #针对tuple,切片同样适用
iterable、iterator
可迭代,迭代器,集合类型数据可迭代但不是迭代器,可通过iter()转变为迭代器。
可迭代对象可使用for-in语句遍历,判断x是否可迭代:isinstance(x,Iterable)。
列表生产式
高效创建列表,见代码示例:
#range转list list(range(1,5))#[1,2,3,4] [x*xforxinrange(1,5)]#[1,4,9,16] [x*xforxinrange(1,5)ifx%2==0]#[4,16] [m+nformin'ABC'fornin'XYZ']#['AX','AY','AZ','BX','BY','BZ','CX','CY','CZ'] [s.lower()forsin['Hello','World','IBM','Apple']]#likemap
generator
isinstance(generator,Iterable)=True,可使用for-in语句,或者使用next方法。
g=(x*xforxinrange(10)) next(g)#0 next(g)#1 next(g)#4 foriteming: print(item)#916...81
generator函数
generator函数本质是一个有状态的函数,遇到yield语句时会暂时返回。
#有yield语句,表明时generator函数 defgen_fn(): init=0 whileinit<10: yieldinit init+=1 return'done' call=gen_fn()#获得可迭代对象call next(call)#0 next(call)#1 #每次调用generator函数,得到的是一个新的generator #for-in无法获得generator的返回值'done' foritemingen_fn(): print(item)#01...9
高阶函数
参数是函数的函数即是高阶函数,可对比数学概念:g(x)=f(x)+1,g(x)即高阶函数。
- map
#map(func,*iterables,...) i=map(lambdax:x*x,[1,2,3])#返回Iterator list(i)#[1,4,9]
- reduce
fromfunctoolsimportreduce reduce(lambdaprevious,x:previous+x,[1,2,3,4])#10
- filter
i=filter(lambdax:x%2==True,[1,2,3,4]) list(i)#[1,3]
- sorted默认升序,通过key参数决定排序规则。
sorted([1,3,2],key=lambdax:-x)#[3,2,1]
返回函数做回函数返回值
闭包概念:包含环境成分(自由变量)和控制成分的实体(lambda表达式,函数)。
deflazy_sum(*args): ax=0 defsum(): nonlocalax forninargs: ax=ax+n returnax returnsum fn=lazy_sum(1,2,3)#ax+sum构成了闭包 fn()#6 fn()#12
匿名函数
即lambda表达式。
装饰器
函数包函数的语法糖?
deflog(fn): defcall(*args,**kw): print('call%s():'%fn.__name__) returnfn(*args,**kw) returncall #@log的作用等同now=log(now) @log defnow(): print('2018-03-18') now()#callnow():2018-03-18
偏函数
把一个函数的某些参数给固定住,返回一个新的函数。类似柯里化,但更强大?
fromfunctoolsimportpartial binary_int=partial(int,base=2) binary_int('1000000')#64
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接