python中基本简洁函数笔记

高阶函数

变量可以指向函数,变量可以作为函数的参数传入,a=b,b=c,so a=c 因此,一个函数可以作为另一个函数的参数传入,这种函数就是高阶函数。

>>> def add(x,y,f):
... return f(x) + f(y)
...
>>> x = 5
>>> y = -3
>>> add(x,y,abs)
8

map函数

map()函数接收两个参数,第一个参数是函数,第二个参数是序列;执行操作是:将传入的函数应用于序列中每一个元素,结果返回一个list。

>>> test = [1,-2,3,-4,5,-6,7,-8,9,-10]
>>> map(abs,test)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

当需要对某一序列中所有元素进行遍历式的函数操作时,可以使用map()函数。当然也可以使用列表生成式操作:

>>> [abs(n) for n in test]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

reduce函数

reduce()函数和map()一样接收两个分别是函数和序列的参数;但reduce接收的函数需要序列中的两个元素,然后将结果和下一个元素再次作为参数传入函数中进行累积操作,直至元素遍历完。

>>> test = [4,3,2,1]
>>> reduce(pow,test)
4096
>>> pow(pow(pow(4,3),2),1)
4096

map()和reduce()都是为了方便快速而应运而生的,毕竟python追求代码简洁高效性;如果用for语句也不是不可以。

filter函数

filter()函数和map()一样接收两个参数,第一个为函数,第二个为序列,将函数应用至所有序列,如果返回值为False则删除该元素,返回值为True则保留。

>>> def pos(x):
... if x>0:
... return True
... else:
... return False
...
>>> test
[1, -2, 3, -4, 5, -6, 7, -8, 9, -10]
>>> filter(pos,test)
[1, 3, 5, 7, 9]

sorted函数

sorted()用于直接对序列进行排序;数字按照数字大小排序;字符串按照首字母的ASCII码大小排列;从小到大;当然,sorted可以传入函数用于更改排序方法;如从大到小或者忽略大小写。其中x.lower() 是将元素x的大写字符全部换为小写;x.upper() 则相反。

>>> x = ['a','A','bab','BAB']
>>> [n.lower() for n in x]#全部改变为小写
['a', 'a', 'bab', 'bab']
>>> [n.upper() for n in x]#全部改变为大写
['A', 'A', 'BAB', 'BAB']
>>>#以下为对字符串分别进行区分和不区分大小写排序
>>> x = ['a','Ba','cd','E']
>>> sorted(x)
['Ba', 'E', 'a', 'cd']
>>> def low(x,y):
... x1= x.lower()
... y1= y.lower()
... if x1 < y1:
... return -1
... elif x1 > y1:
... return 1
... else:
... return 0
...
>>> sorted(x,low)
['a', 'Ba', 'cd', 'E']
>>># 因为low函数没有改变输入的元素值,所以只在排序上方式有变化元素未改变

匿名函数lambda

lambda表示匿名函数,其实lambda还是python为了追求代码简洁性而出的关键字,通过一个关键字lambda,省去了函数定义时需要的函数名以及def和return关键字。不过尽管其简洁,但并不能定义过多表达式,只能定义一个表达式;如:

>>> def function(x):
... return x*x
...
>>> function(5)
25
>>> function = lambda x: x*x # 通过lambda定义一个函数,function变量指向该函数
>>> function(5)
25

偏函数functools.partial

偏函数实际上就是借助一个module,把某一函数的默认值更改后确定下来从而方便调用,举个例子就很清楚了:

>>> int('100',base=2) #权为2,2的2次方*1+2的1次方*0+2的0次方*0"""
4
>>> int('100',base=4) #权为4,4的2次方*1+4的1次方*0+4的0次方*0
16
>>> int('100',base=8) #权为8,8的2次方*1+8的1次方*0+8的0次方*0
64
>>> int('100',base=16) #权为16,16的2次方*1+16的1次方*0+16的0次方*0
256
>>> int('100',base=10) #权为10,10的2次方*1+10的1次方*0+10的0次方*0
100
>>> import functools
>>> a = functools.partial(int,base=16)
>>> a('100') """此时相当于默认值base=16"""
256

总结

一下午系统学习这些函数其实感觉没有太大作用,一般情况这些函数还是很少接触,权当作为学习python过程的必要吧!有时候很多东西只有接触了才知道这个东西好不好哪里好需要花多少时间。听别人说什么什么好什么什么不好,自己永远抓不住关键点。这也就是实践与理论最大的区别啊!学习python的一点感悟。

python学习来自廖雪峰老师 >>>这里