简单了解Python中的几种函数
几个特殊的函数(待补充)
python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数:filter、map、reduce、lambda、yield
lambda
>>>g=lambdax,y:x+y#x+y,并返回结果 >>>g(3,4) 7 >>>(lambdax:x**2)(4)#返回4的平方 16
lambda函数的使用方法:
在lambda后面直接跟变量
变量后面是冒号
冒号后面是表达式,表达式计算结果就是本函数的返回值
冒号后面是表达式,表达式计算结果就是本函数的返回值
比如,要打印一个list,里面依次是某个数字的1次方,二次方,三次方,四次方。用lambda可以这样做:
>>>lamb=[lambdax:x,lambdax:x**2,lambdax:x**3,lambdax:x**4] >>>foriinlamb: ...printi(3), ... 392781
map
map()是python的一个内置函数,它的基本样式是:
map(func,seq)
func是一个函数,seq是一个序列对象。在执行的时候,序列对象中的每个元素,按照从左到右的顺序,依次被取出来,并放入
到func那个函数里面,并将func的返回值依次存到一个list中。如
>>>items=[1,2,3,4,5] >>>squared=[] >>>foriinitems: ...squared.append(i**2) ... >>>squared [1,4,9,16,25] >>>defsqr(x):returnx**2 ... >>>map(sqr,items) [1,4,9,16,25] >>>map(lambdax:x**2,items) [1,4,9,16,25] >>>[x**2forxinitems]#这个我最喜欢了,一般情况下速度足够快,而且可读性强 [1,4,9,16,25]
要点:
对iterable中的每个元素,依次应用function的方法(本质上就是一个for循环)
将所有结果返回一个list
如果参数很多,则对那些参数并行执行function
继续下面两个例子:
>>>lst1=[1,2,3,4,5] >>>lst2=[6,7,8,9,0] >>>map(lambdax,y:x+y,lst1,lst2)#将两个列表中的对应项加起来,并返回一个结果列表 [7,9,11,13,5]
>>>lst1=[1,2,3,4,5] >>>lst2=[6,7,8,9,0] >>>lst3=[7,8,9,2,1] >>>map(lambdax,y,z:x+y+z,lst1,lst2,lst3) [14,17,20,15,6]
可以看到map函数的强大和简洁。如果使用for循环将会很繁琐
reduce
直接看例子:
>>>reduce(lambdax,y:x+y,[1,2,3,4,5]) 15
reduce函数的计算方式是将列表中的元素累加,((((1+2)+3)+4)+5)=15与map函数相比较就可以看出两者之间的区别。map是上下运算,reduce是横着逐个元素进行运算。
reduce含可以接受第三个值作为初始值:例如
>>>reduce(lambdax,y:x+y,[1,2,3,4,5],100) 115
上述列表中计算将以100为初始值执行累加计算,先计算100+1
filter
filter的中文含义是“过滤器”,在python中,它就是起到了过滤器的作用.
通过下面代码体会:
>>>numbers=range(-5,5) >>>numbers [-5,-4,-3,-2,-1,0,1,2,3,4] >>>filter(lambdax:x>0,numbers) [1,2,3,4] >>>[xforxinnumbersifx>0]#与上面那句等效 [1,2,3,4] >>>filter(lambdax:x>3,[1,2,3,4,5]) [4,5]
拜读下filter的官方文档解释:
filter(...) filter(functionorNone,sequence)->list,tuple,orstring Returnthoseitemsofsequenceforwhichfunction(item)istrue.If functionisNone,returntheitemsthataretrue.Ifsequenceisatuple orstring,returnthesametype,elsereturnalist.
总结
以上就是本文关于简单了解Python中的几种函数的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Python算法输出1-9数组形成的结果为100的所有运算式、Python生成数字图片代码分享等,有什么问题可以随时留言,小编会及时回复大家的。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。