当前位置: 首页 > 科技观察

Python中有几个有趣的函数

时间:2023-03-14 11:02:27 科技观察

众所周知,python拥有强大的功能和灵活的语法,这要归功于其丰富而强大的库。除了很多第三方库和方法函数,python自带的很多函数也很好用,也很优雅。今天主要分享5个python内置的小函数,都是我个人感受的强大而细腻的函数。这不是高深的知识,只是因为它易于使用而被分享。01使用一次:lambda很多语言都有匿名函数。Python的匿名函数写成lambda。当你需要实现某个功能,又不想“幻想”地定义一个功能时,lambda是最好的选择。它的语法格式一般是这样的:lambdax:x**2#(x)>也可以赋值给一个变量。由于python中的一切都是对象,所以在后续的程序中可以通过变量调用这个匿名函数。f=lambdax:x**2f(2)#4当然这里其实不需要用lambda来实现,因为既然需要显式调用,不如干脆写个clearfunction。lambda函数更广泛的应用场景是当匿名函数作为另一个函数的参数传递时,更适合应用。例如,使用lambda作为sort()函数的关键参数,可以实现特定函数的排序。dyct={'a':2,'b':1,'c':5}sorted(dyct.items(),key=lambdax:x[1])#[('b',1),('a',2),('c',5)]02智能解压:zipzip函数,顾名思义,就是一个打包或解包的函数,接受2个以上的可迭代变量,输出相应迭代后的迭代position形成一个元组类型。例如:a=['a','b','c']b=(4,5,6)zip(a,b)#list(zip(a,b))#[('a',4),('b',5),('c',6)]tuple(zip(a,b))#(('a',4),('b',5),('c',6))也可以接受2个以上的输入迭代变量,如果迭代变量长度不一致也不会报错,但是返回的迭代变量取决于总输入最短的那个长度。例如:a=['a','b','c','d','e']b=(4,5,6,7)c=[True,False,True]list(zip(a,b,c))#(('a',4,True),('b',5,False),('c',6,True))zippacking对应的用法是拆包,即Sequentially解压缩打包表单的元素并返回多个新列表。例如:aZip=(('a',4,True),('b',5,False),('c',6,True))a,b,c=zip(*aZip)#a:('a','b','c')#b:(4,5,6)#c:(True,False,True)03一对一映射:mapmap函数就像它的名字一样,它是一个函数,会将接受的迭代变量依次进行某种映射,并输出映射后的迭代变量。例如,如果顺序评估列表中的变量并返回一个新列表,则可以应用映射:a=[1,2,3,4]map(str,a)#list(map(str,a))#['1','2','3','4']这是map函数的典型用法:它接受2个参数,第一个参数(在上面的例子中是str()function)是要作用的函数,第二个参数是可迭代变量。当第一个函数参数是多元函数时,map还可以接受更多参数。示例:a=[1,2,3,4]b=[2,2,3,3]list(map(lambdax,y:x**y,a,b))#[1,4,27,64]与zip函数类似,当map中的函数参数长度不匹配时,不会报错,但输出结果会以最短的为准:a=[1,2,3,4]b=[2,2]list(map(lambdax,y:x**y,a,b))#[1,4]04一人负责:filter类似于map函数,filter函数也接受一个函数和它的变量作为参数,只是要求这个函数的返回结果是bool类型,这个bool的结果用来决定输出的选择。例如,你需要过滤一个输入列表,你需要保留3的倍数:a=range(10)filter(lambdax:x%3==0,a)#list(filter(lambdax:x%3==0,a))#[0,3,6,9]这里需要注意的是,当filter第一个函数的返回值不是bool类型时,不会报错,但是会转成bool类型的判断。如果判断结果不为False(python中会判断为False的变量包括0、None、[]等),则输出,否则过滤掉:a=range(10)list(filter(lambdax:x%3,a))#[1,2,4,5,7,8]05万间归宗:reducemap和filter函数都是多输入多输出类型,基本完成特定的转化或筛选。reduce是一个归约函数,将一系列的输入变量经过特定的函数后,转化为一个结果输出。不过可能是因为应用场景有限。reduce在python3中不再是全局调用函数,必须从functools包中导入才能使用:fromfunctoolsimportreducea=range(5)reduce(lambdax,y:x+y,a)#10的reduce函数也可以接受一个可选的初始值作为参数。应用reduce函数可以实现很多小技巧,看你能不能想到:fromfunctoolsimportreduce='abcdefg'reduce(lambdax,y:y+x,s,'AA')#'gfedcbaAA'06最后,当然,几个函数的用法虽然可以用漂亮和强大来形容,但并不是必须的,甚至可以在一定程度上用其他形式代替。比如map和filter函数可以用listcomprehension实现起来很简单,reduce函数的功能最多用一次for循环迭代就可以解决。但是在让python程序更加简洁、优雅甚至华丽的路上,这些函数确实有它们的用处,值得一试!