python中基本简洁函数笔记
来源:互联网 发布:java判断白天还是晚上 编辑:程序博客网 时间:2024/06/16 18:01
2017年9月13日
MIL day 65
高阶函数
变量可以指向函数,变量可以作为函数的参数传入,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次方*016>>> int('100',base=8) #权为8,8的2次方*1+8的1次方*0+8的0次方*064>>> int('100',base=16) #权为16,16的2次方*1+16的1次方*0+16的0次方*0256>>> int('100',base=10) #权为10,10的2次方*1+10的1次方*0+10的0次方*0100>>> import functools >>> a = functools.partial(int,base=16)>>> a('100') """此时相当于默认值base=16"""256
总结
一下午系统学习这些函数其实感觉没有太大作用,一般情况这些函数还是很少接触,权当作为学习python过程的必要吧!有时候很多东西只有接触了才知道这个东西好不好哪里好需要花多少时间。听别人说什么什么好什么什么不好,自己永远抓不住关键点。这也就是实践与理论最大的区别啊!学习python的一点感悟。
python学习来自廖雪峰老师 >>>这里
- python中基本简洁函数笔记
- python中函数基本用法
- 【Python_OpenCv】笔记3:基于python,OPenCv中基本的绘图函数
- Python中,函数定义的基本形式
- python 中一些基本函数的用法
- Python中函数定义及基本操作
- python中zip()函数基本用法
- python入门笔记--函数中参数传递
- python 基本输入输出函数
- Python函数基本用法
- Python基本函数
- python基本函数
- python基本数据类型笔记
- Python基本语法笔记
- python基本语法笔记
- Python基本语法笔记
- Python基本语法笔记
- Python中list数据类型的基本函数方法
- 一个故事告诉你比特币的原理及运作机制
- 数据库杂谈
- os_mbox.c
- 点击选项卡后页面标题切换的实现
- STM32 DMA1和DMA2各通道一览表
- python中基本简洁函数笔记
- sonar问题修改
- No qualifying bean of type 'org.apache.catalina.User' available
- python2基础学习
- Android中获取颜色的几种方法
- 阿里云企业邮箱的POP3、SMTP、IMAP地址是什么?
- JS内置对象5:正则RegExp
- Java多线程:线程状态
- 头文件为什么只声明而不定义,而类定义又可以在头文件中那