python进阶一:高阶函数

原创 2015年07月08日 15:51:42

1、函数式编程:

      python特点:不是纯函数式编程(允许变量存在);

                              支持高阶函数(可以传入函数作为变量);

                              支持闭包(可以返回函数);

                              有限度的支持匿名函数;

       高阶函数:变量可以指向函数;

                           函数的参数可以接收变量;

                           一个函数可以接收另一个函数作为参数;

def add(x,y,f):
	return f(x)+f(y)

add(-5,9,abs)

14
       内置高阶函数map():map函数有两个参数,一个是函数,另一个是列表,返回值为对传入的列表每一个元素执行传入的函数操作得到的列表;

def format_name(s):
    return s.title();
        

print map(format_name, ['adam', 'LISA', 'barT'])

      内置高阶函数reduce():reduce函数也有两个参数,一个是函数,另一个是列表,返回值为对list的每一个元素反复调用函数f,得到最终结果,以下函数为连乘;

def prod(x, y):
    return x*y;

print reduce(prod, [2, 4, 5, 7, 12])
     内置高阶函数filter():filter函数接受函数参数f和列表参数lst,f对lst元素进行判断,返回lst的元素中调用f函数结果为true的元素组成的列表(将不满足f函数条件的元素过滤掉);
import math

def is_sqr(x):
    return int(math.sqrt(x))*int(math.sqrt(x))==x

print filter(is_sqr, range(1, 101))

     自定义排序函数sorted():sorted函数接受一个列表lst和一个函数参数f,f为自定义的比较lst元素大小的函数,返回值为lst中元素按f函数排列的列表;

def cmp_ignore_case(s1, s2):
    return cmp(s1.lower(),s2.lower())

print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)
     返回函数:

def calc_prod(lst):
    def prod(x,y):
        return x*y;
    def g():
        return reduce(prod,lst)
    return g;

f = calc_prod([1, 2, 3, 4])
print f()
      闭包:内层函数使用外层函数的参数,然后返回内层函数;

def count():
    fs = []
    for i in range(1, 4):
        def f(j):
            def g():
              return j*j;
            return g
        fs.append(f(i))
    return fs

f1, f2, f3 = count()
print f1(), f2(), f3()
       匿名函数:传入函数参数不需要显式定义函数,可以用lambda x:statement     x为参数,statement为对参数执行的语句;

def is_not_empty(s):
    return s and len(s.strip()) > 0

print filter(lambda s:s and len(s.strip())>0, ['test', None, '', 'str', '  ', 'END'])
       装饰器:给函数添加新功能,并简化该函数调用;

无参数装饰器示例:

def log(f):
    def fn(*args, **kw): #*args,**kw保证对任意个数参数都能正常调用
        print 'call ' + f.__name__ + '()...'
        return f(*args, **kw)
    return fn

@log   #调用日志装饰器
def factorial(n):
    return reduce(lambda x,y: x*y, range(1, n+1))
print factorial(10)

call factorial()...
3628800

带参数装饰器示例:

def log(prefix):
    def log_decorator(f):
        def wrapper(*args, **kw):
            print '[%s] %s()...' % (prefix, f.__name__)
            return f(*args, **kw)
        return wrapper
    return log_decorator

@log('DEBUG')#DEBUG为给装饰器传入的参数
def test():
    pass
print test()

执行结果
[DEBUG] test()...
None
利用functool.wraps作用在返回的新函数上,使得调用装饰器以后不改变原函数的信息

import time, functools
def performance(unit):
    def perf_decorator(f):
        @functools.wraps(f)
        def wrapper(*args, **kw):
            t1 = time.time()
            r = f(*args, **kw)
            t2 = time.time()
            t = (t2 - t1) * 1000 if unit=='ms' else (t2 - t1)
            print 'call %s() in %f %s' % (f.__name__, t, unit)
            return r
        return wrapper
    return perf_decorator

@performance('ms')
def factorial(n):
    return reduce(lambda x,y: x*y, range(1, n+1))
print factorial.__name__

偏函数:

functools.partial(f,f的默认参数)  减少需要提供给f的参数

import functools
int2 = functools.partial(int, base=2)
int2('1000000')
64










python内置的高阶函数

一、什么是高阶函数 (1)、变量可以指向函数,对变量和函数的调用效果是一样的。   函数也是一个对象,在python中一切都是对象。        abs函数实现了__call__方法,所以 f...

Python学习十二:高阶函数

在学习高阶函数之前需要搞清一个概念:变量可以指向函数意思就是:把函数名赋值给另一个变量,然后使用这个变量完成跟函数一样的功能。如下代码所示:将求绝对值函数abs赋值给f,然后调用f完成跟abs一样的功...

Python3 基础:高阶函数和map/reduce

高阶函数变量可以指向函数我们可以把函数赋值给变量,这样的效果就是,这个变量就相当于这个函数.>>> f = abs >>> f(-10) 10 结论:函数本身也可以赋值给变量,即:变量可以指向函数。函...

python3 中的 map,reduce,filter函数

在python2 中直接打印map,filter函数会直接输出结果。但在python3中做了些修改,输出前需要使用list()进行显示转换,而reduce函数则被放到了functools包中,代码如下...
  • frone
  • frone
  • 2015年05月07日 14:53
  • 1606

Python之高级函数

1、map简介:map 函数一次接收两个参数,一个是函数一个是Iterable,并将传入的函数作用于Iterable,由于结果是一个Iterator,我们直接用list()返回整个序列为list。#先...

python(七)高阶函数,匿名函数

摘要 此部分内容作为函数知识的扩展,重点在装饰器的理解和学习,为后续的面向对象编程打一个基础 1,高阶函数 还记得第一篇中我这么说:python中的对象不是以变量为准,而是以“字符串”...

ARMLink使用方法详解

 一、基本术语在介绍armlink的使用方法之前,先介绍要涉及到的一些术语。 1) 映像文件(image):    是指一个可执行文件,在执行的时候被加载到处理器中。一个映像文件有多个线程。它是ELF...

Python进阶笔记1-高阶函数

1、        函数式编程:变量可以指向函数,即f=abs,f(-10)=10; 高阶函数 指能接收函数作为参数的函数; map(function,list):将函数function依次作用在l...

Python进阶(十四)- 基础课程结课总结:高阶函数

Python进阶(十四)- 基础课程结课总结:高阶函数  在慕课网完成了廖雪峰老师的《Python入门》与《Python进阶》两门基础课程。在此做一下简单的知识点小结。函数式编程  Python特点:...

python进阶学习笔记(一)——高阶函数

filter() filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python进阶一:高阶函数
举报原因:
原因补充:

(最多只允许输入30个字)