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

下面是小编为大家整理的Python进阶(十四)-,基础课程结课总结:高阶函数.docx,供大家参考。

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

 

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

  在慕课网完成了廖雪峰老师的《Python 入门》与《Python 进阶》两门基础课程。在此做一下简单的知识点小结。

 函数式编程

  Python 特点:

 不是纯函数式编程(允许变量存在); 高阶函数(可以传入函数作为变量); 支持闭包(可以返回函数); • 有限度的支持匿名函数;

  高阶函数:

 变量可以指向函数; 函数的参数可以接收变量; • 一个函数可以接收另一个函数作为参数; def add(x,y,f):

  return f(x)+f(y)

  #14

 add(-5,9,abs)

  内置高阶函数 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))

  #call factorial()...

  #3628800

  print factorial(10)

  带参数装饰器 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

  #[DEBUG] test()...

 #None

  print test()

  利用 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总结心得体会 Python进阶(十四)- 进阶 高阶 函数