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

初学 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,'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

 

posted @ 2016-11-13 17:29  Coffee_zq  阅读(272)  评论(0编辑  收藏  举报