python函数进阶小结_Python—函数进阶篇

lambda表达式(匿名函数表达式)

作用:创建一个匿名函数对象。同def类似,但不提供函数名。

语法:lambda [形参1,形参2,...] : 表达式

语法说明

lambda 只是一个表达式,它用来创建一个函数对象。

当lambda表达式调用时,先执行冒号后的表达式,并返回表达式的结果的引用。

lambda 表达式创建的函数只能包含一条表达式。

lambda 表达式比函数简单,且可以随时创建和销毁,有利于减少程序的偶合度。

把lambda函数赋值给一个变量

#定义一个加法函数,并把值赋给变量myadd,就可以执行myadd(5, 6);

myadd = lambda x, y: x+yprint myadd(5, 6) #结果:11

把lambda函数赋值给其他函数

importtime, datetime

time.sleep= lambda x: None #time 库的 sleep 函数不会执行原功能;

starttime =datetime.datetime.now()

time.sleep(3)

endtime=datetime.datetime.now()print endtime-starttime #结果:0:00:00

把lambda函数作为其他函数的返回值

defadd(n):return lambda x: x+n

myadd= add(5)print myadd(15) #结果:20

defadd(x):definner(y):return x+yreturninner

myadd= add(5)print myadd(15) #结果:20

把lambda函数做参数传给其它函数(map, filter, reduce)

#利用map映射函数输出序列加工后的新序列。

print map(lambda x: x ** 2, range(1, 3)) #结果:[1, 4] map返回类型:

defarr(x):return x ** 2

print map(arr, range(1, 3)) #结果:[1, 4] map返回类型:

#利用filter过滤函数输出0-9的奇数;返回False时将此数据丢弃,返回True,则保留此数据

print filter(lambda x: x % 2, range(10)) #结果:[1, 3, 5, 7, 9] filter返回类型:

defodd(x):return x % 2

print filter(odd, range(10)) #结果:[1, 3, 5, 7, 9] filter返回类型:

eval函数和exec函数

高阶函数

一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。

#参数为函数,函数bar作为foo的参数传入,函数foo()为高阶函数。

defbar():print("in the bar..")deffoo(func):

func()print("in the foo..")

foo(bar)#返回值为函数,函数bar作为foo的返回值,函数foo()为高阶函数。

defbar():print("in the bar..")deffoo(func):print("in the foo..")returnfunc

res=foo(bar)

res()

注:函数名(例如bar 、foo)-->其为该函数的内存地址;函数名+括号(例如 bar()、foo() )-->调用该函数。

python内置的高阶函数:map、filter、sorted、reduce等

map函数

map函数接收的是两个参数,一个函数,一个序列,其功能是将序列中的值处理再依次返回至列表内。其返回值为一个迭代器对象。

defpower(x):return x ** 2

#map函数模拟,功能与map函数一样

defmap_test(func,iter):

arr=[]for i initer:

ret=func(i)

arr.append(ret)return arr.__iter__() #将列表转为迭代器对象#map_test函数

print list(map_test(power,range(1,6))) #结果:[1, 4, 9, 16, 25]#map函数

print list(map(power,range(1,6))) #结果:[1, 4, 9, 16, 25]

print list(map(lambda x: x ** 2, range(1,6))) #结果:[1, 4, 9, 16, 25]

#map函数的参数1也可以是匿名函数、参数2也可以是字符串

print list(map_test(lambda x:x.upper(),"hello")) #结果:['H', 'E', 'L', 'L', 'O']

print list(map(lambda x:x.upper(),"hello")) #结果:['H', 'E', 'L', 'L', 'O']

#map函数的参数2也可以是多个可迭代对象

defpower2(x, y):return x **yprint list(map(power2,range(1,7),range(6,0,-1))) #结果:[1, 32, 81, 64, 25, 6]

filter函数

filter函数也是接收一个函数和一个序列的高阶函数,其主要功能是筛选过滤序列中的数据。其返回值也是迭代器对象。函数func将对iterable中的每个元素进行求值,返回False时将此数据丢弃,返回True,则保留此数据。

names=["Hello","hello","python"]#filter函数机制,功能与filter函数一样

deffilter_test(func,iter):

arr=[]for i initer:if func(i): #传入的func函数其结果必须为bool值,才有意义

arr.append(i)returnarr#filter_test函数

print filter_test(lambda x:x.islower(),names) #结果:['hello', 'python']#filter函数

print filter(lambda x:x.islower(),names) #结果:['hello', 'python']

defmynum(x):return x % 2 ==0

list= filter(mynum,range(10))print list #结果:[0, 2, 4, 6, 8]

sorted函数

作用:将原可迭代对象的数据进行排序,生成排序后的列表

格式:sorted(iterable, key = None, reverse = False)

说明:iterable:可迭代对象。key:绑定的函数,用来提供一个排序的依据。reverse 用来设置是否降序排序。默认False,从小到大。

#按照名字进行排序,

names = [{"score":90, 'age': 99, 'name': 'lisi'},

{"score":80, 'age': 45, 'name': 'wangwu'},

{"score":60, 'age': 42, 'name': 'ali'},

{"score":30, 'age': 67, 'name': 'zhaofang'}]defpaixu(dict):return dict["name"]

result= sorted(names,key=paixu) #方法一

result = sorted(names,key=lambda d:d["name"]) #方法二#sorted函数会把names里的值一一取出来,作为key后面的排序函数的参数。

reduce函数

reduce函数也是一个参数为函数,一个为可迭代对象的高阶函数,其返回值为一个值而不是迭代器对象,故其常用与叠加、叠乘等。

reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把参数计算结果继续和序列的下一个元素做累积计算,其效果就是:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)。比方说对一个序列求和,就可以用reduce实现。

#reduce函数不是内置函数,而是在模块functools中的函数,故需要导入

from functools importreduce

nums=[1,2,3,4,5,6]#reduce函数的机制

def reduce_test(func,array,ini=None): #ini作为基数

if ini ==None:

ret=array.pop(0)else:

ret=inifor i inarray:

ret=func(ret,i)returnret#reduce_test函数,叠乘

print reduce_test(lambda x,y:x*y,nums,100) #结果:72000#reduce函数,叠乘

print reduce(lambda x,y:x*y,nums,100) #结果:72000

defadd(x, y):return x +yprint reduce(add, [1, 3, 5, 7, 9]) #结果:25

print reduce(add, [1, 3, 5, 7, 9], 10) #结果:35

deffunc(x, y):return x *yprint reduce(func, [1, 3, 5]) #结果:15

print reduce(func, [1, 3], 5) #结果:15

print reduce(lambda x,y:x*y,range(1,3),5) #结果:10

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值