初学 Python(十二)——高阶函数

时间:2021-08-10 22:25:55

初学 Python(十二)——高阶函数

  初学 Python,主要整理一些学习到的知识点,这次是高阶函数。

#-*- coding:utf-8 -*-  

'''''
话说高阶函数:
能用函数作为参数的函数
称为高阶函数
'''
#函数作参
def f(x):
return x*x #map函数为内置函数,意思为将第二个参数的list作用到f函数中
#最后的结果为一个list
print map(f,[1,2,3,4,5])
#reduce函数为内置函数,意思将第二参数的序列作用到add函数值
#将结果做累加计算,最后的结果为一个数
def add(x,y):
return x+y
print reduce(add,[1,2,3,4,5,6])
#给出一个整数的每个位置上的数,得到该整数 def fn(x,y):
return x*10+y
print reduce(fn,[1,2,3,4,5]) #字符串转int print reduce(fn,map(int,'')) def str2int(s):
def fn(x,y):
return x*10+y
return reduce(fn,map(int,s)) print str2int('')
'''''
上面函数的调用步骤是:
1.得到reduce(fn,map(int,'123456'))
2.得到reduce(fn,[1,2,3,4,5,6])
3.得到reduce(x*10+y,[1,2,3,4,5,6])
4.得到123456
'''
def str2int2(s):
return reduce(lambda x,y:x*10+y,map(int,s))
print str2int2('') #排序
print sorted('')
print sorted((1,8,4,2,5))
print sorted([9,8,7,6,5,4,3])
print sorted(['name','Age','Sex','address'])
#sorted也是一个高阶函数,所以它也可以传函数来改变排序的算法
#倒序
def inverted_order(x,y):
if x>y:
return -1
elif x<y:
return 1
else:
return 0
print sorted((1,8,4,2,5),inverted_order) #改变字符串排序算法
#上面字符串排序是根据ascii码来判断大小
#由于大写字母都比小写字母的ascii码小,
#但是一般我们都是按照字母表的顺序排列
#下面来变换一下算法,忽略大小写 def alphabet(s1,s2):
l1 = s1.lower()
l2 = s2.lower()
if l1 < l2:
return -1
elif l2 < l1:
return 1
else:
return 0 print sorted(['name','Age','Sex','address'],alphabet) '''''
函数作为返回值
其实刚才在将字符串转int时就涉及到了
这种将函数作为返回值的形式
''' def sum(*args):
sum = 0
for n in args:
sum+=n
return sum
print sum(1,2,3,4,5) #改装成返回函数的形式 def sum_pack(*args):
def sum():
sum1 = 0
for n in args:
sum1+=n
return sum1
return sum g = sum_pack(1,2,3,4,5)
print g
#<function sum at 0x0134C0F0>
#g输出为函数,想打印结果要调用函数
print g() '''''
闭包的定义:
字函数自动获取父函数的变量和参数
进入我的地盘就是我的
而且每一次调用返回的函数
都不是同一个对象
''' g1 = sum_pack(1,2,3,4,5)
g2 = sum_pack(1,2,3,4,5)
print g1==g2