1.reduce()reduce()是functools模块下的一个函数,它接收两个参数,一个是函数对象,一个是可迭代对象(比如list)。这次会将可迭代对象中的下一个元素应用到函数中进行累加计算,最终得到一个值。看个例子你就明白了,[1,2,3,4])print("result:",result)输出1+2=33+3=66+4=10result:10执行过程:将list中的前两个数取出作为函数add的参数,第二次使用上一次函数add的返回值和列表的第三个数作为参数,以此类推,最终得到一个值。这就是reduce所做的。这有点像一种团结感。当然,如果只是计算list中元素的总和,就不需要用reduce来处理这么大的弯路了,直接用sum函数就可以解决。result=sum([1,2,3,4])如果是计算list中元素的乘积,python没有内置函数可以直接计算。这时候我们可以使用reduce来处理defmul(a,b):returna*bresult=reduce(mul,[1,2,3,4])print("Result:",result)输出结果:24或者使用lambda匿名函数result=reduce(lambdaa,b:a*b,[1,2,3,4])甚至可以直接使用operator模块下的乘法运算符函数fromoperatorimportmulresult=reduce(mul,[1,2,3,4])print("Result:",result)最后你会发现其实有很多解法,但是我们要记住Python之禅中的那句话:应该有一个——和最好只有一种——显而易见的方法。用最合适的方式做一件事2.split()split接收一个参数,将字符串拆分成列表。比如英文字符串按照空格拆分,就可以统计出单词的个数。words="pythonisthebestprogramminglanguage"words=words.split("")print(words)outputs['column1','column2','column3']3.enumerate()enumerate函数用于迭代列表等可迭代对象,它的使用场景一般出现在需要获取列表位置的下标时,我们知道直接使用for循环迭代列表时,是获取不到元素的下标位置的,但是enumerate就可以搞定,不然得自己定义一个索引变量。words=['python','is','the','best','programming','language']index=0forwinwords:print(index,w)index+=10python1is2the3best4programming5language使用enumerate函数,对于enumerate(words)中的index,w处理更优雅:print(index,w)0python1is2the3best4programming5language4.map()map是对应于reduce函数的一个函数,Google的map/reduce框架的思想其实就是借鉴了这两个函数。map函数用于通过函数处理一个列表,并将其映射成一个新的列表。例如,对列表的每个元素进行平方,将列表元素转换为字符串,得到一个新的列表。结果=地图(lambdax:str(x),[1,2,3,4])打印(列表(结果))结果=地图(lambdax:x*x,[1,2,3,4]))print(list(result))output:['1','2','3','4'][1,4,9,16]另外,map函数还可以接受多个list参数,使得multiple可以将两个列表合并为一个列表,例如将两个列表相同位置的元素相加得到一个新列表defmerge(x,y):returnx+yresult=map(merge,[1,2,3],[3,2,1])print(list(result))outputs[4,4,4]5.getattr()getattr()返回对象属性对应的值,接受两个参数,第一个是对象,第二个是属性名。这个函数通常是用户动态的或者某个对象下的某个属性的值。看例子:classFoo:def__init__(self):self.a=10foo=Foo()a=getattr(foo,"a")print(a)outputs10你可能会问,我可以得到a属性的值吗如果我直接去foo.a?正常的情况是这样的,是的,如果你不知道要获取什么属性值,那么getattr就可以派上用场了。初学者可能还无法体验。当您尝试编写一些框架级别的代码时,您只需要记住有这样的功能可用。6.sliceslice是一个切片函数,你可能用过切片操作,通过切片得到列表的一个子集,例如:s=[1,2,3,4]>>>s[1:3]#getlists由1st和3rd之间的元素组成的子列表“1:3”是slice(1:3)函数的缩写,前者就像语法糖s=[1,2,3,4]print(s[slice(1,3)])通常在实际应用中使用,可以直接使用语法糖,没必要使用slice函数来切片,但至少要知道slice的使用方法。7.sorted()sorted函数应该算是日常代码中的高频函数了。它用于对可迭代对象(如列表)进行排序。它不会改变原来列表的顺序,而是返回一个新的列表。默认情况下,nums是升序排列=[4,5,6,3,1]print(sorted(nums))outputs[1,3,4,5,6]如果你想降序排列,你需要指定第二个参数:reverse=Truenums=[4,5,6,3,1]print(sorted(nums,reverse=True))#[6,5,4,3,1]排序的幂功能远不止于此,因为你还可以自定义排序规则。比如参与比较的是一个自定义类Student。我需要根据学生的年龄进行排序。这时候我们需要自定义排序因子函数defmy_sort_key(s):returns.ageclassStudent:def__init__(self,age):self.age=agedef__str__(self):returnf"Student({self.age})"s1=Student(12)s2=Student(2)s3=Student(30)new_list=(sorted([s1,s2,s3],key=my_sort_key))foriinnew_list:print(i)输出:学生(2)学生(12)学生(30)8。formatformat函数用来格式化字符串最常用的函数,使用起来也很简单,但是自从f-strings出现之后,format这个函数就逐渐被替代了,但是在3.6之前还是可以看到这个函数的应用场景。s="{}isfirstname"print(s.format("liu"))如果你需要很多占位符,搞不清楚顺序,你可以给每个占位符一个名字,这样你就不会'不会错的位置是s="{first_name}isfirstname"print(s.format(first_name="liu"))9.join()join也是一个常用的内置函数,可以使用指定的字符作为列表对象元素之间的连接,转换为字符串。words=['python','is','the','best','programming','language']print("".join(words))#用空格连接python是最好的编程语言10.typetypeI被认为是python中最难的内置函数。新手可能会认为type是用来检查对象的类型,例如:print(type(10))#
