您的位置:首页 > 编程语言 > Python开发

python学习-高阶函数

2014-08-02 17:48 176 查看
#-*- 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,'12345'))

def str2int(s):
def fn(x,y):
return x*10+y
return reduce(fn,map(int,s))

print str2int('123456')
'''
上面函数的调用步骤是:
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('1234567')

#排序
print sorted('313568')
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: