码迷,mamicode.com
首页 > 编程语言 > 详细

python-高阶函数

时间:2018-01-15 10:58:41      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:spn   title   rar   seh   gpl   cdt   20px   ase   auc   


*************************高阶特性********************

一、*)变量可以指向函数

在python中函数名实质上是指向函数体的内容;
函数本身也可以赋值给变量,即:变量可以指向函数。

In [2]: max(12,23)
Out[2]: 23

In [3]: lh = max     #函数名其实就是指向函数的变量!


二、*)高阶函数

变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另
一个函数作为参数,这种函数就称之为高阶函数。

技术分享图片

技术分享图片


三、*)内置高阶函数

  1. map函数

寻找帮助: help(map)
map(...)
    map(function, sequence[, sequence, ...]) -> list

map() 函数接收两个参数,一个是函数,一个是序列, map 将传入的函数依
次作用到序列的每个元素,并把结果作为新的 list 返回。

技术分享图片


技术分享图片

练习: 把这list列表中的所有数字转为字符串;([1,2,3]---['1','2','3'])


技术分享图片


练习:In [30]: l = '1 2 3 5' 转为整数


技术分享图片


2.reduce函数

寻找帮助 help(reduce)

reduce(...)
    reduce(function, sequence[, initial]) -> value

eg:reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates
    ((((1+2)+3)+4)+5).

对于序列中的每个元素迭代调用function函数;
reduce 把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接
收两个参数,reduce 把结果继续和序列的下一个元素做累积计算。

技术分享图片


3.filter函数

filter(...)
    filter(function or None, sequence) -> list, tuple, or string
注意:function函数返回值为bool类型

filter() 也接收一个函数和一个序列。和 map() 不同的时,
filter() 把传入的函数依次作用于每个元素,然后根据返回值是 True
还是 False 决定保留还是丢弃该元素。

技术分享图片

技术分享图片


练习: 把一个序列中的空字符串删请尝试用 filter() ;


技术分享图片


练习:

- 题目描述:

给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输
入值小于1000。
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))

技术分享图片


技术分享图片


技术分享图片

技术分享图片


4.sorted函数


sorted(...)
    sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
            迭代对象         函数                                     (逆序)
                      cmp=用于比较的参数,返回值一定和cmp函数的返回值对应(1 -1 0);
sorted返回一个新的对象,可以对任意可迭代的对象进行排序;
li.sort()作用于列表本身;只能用于列表排序;

? 排序也是在程序中经常用到的算法。 无论使用冒泡排序还是快速
排序,排序的核心是比较两个元素的大小。


技术分享图片


--逆序排序

技术分享图片

--忽略大小写


技术分享图片

四、*)匿名函数

lambda 参数名:函数返回值
参数名:支持可变参数,**kwargs.....

?当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。
?关键字 lambda 表示匿名函数,冒号前面的 x 表示函数参数


技术分享图片

技术分享图片

练习:找出货物中价格最低的货物和数量最多货物。


技术分享图片

技术分享图片


五、闭包


技术分享图片技术分享图片

技术分享图片


六、*)装饰器

?装饰器就是用来装饰函数。
? 想要增强原有函数的功能;
? 但不希望修改now()函数的定义;
? 在代码运行期间动态增加功能的方式;

练习:

  1. ATM

技术分享图片

技术分享图片


2.*记时器


技术分享图片

技术分享图片


3.万能记时器

技术分享图片

技术分享图片


练习:
   编写Logger装饰器,实现被装饰的函数运行结束后,打印日志信息;
   要求:
   日志格式内容:时间 函数名 运行使用时间[x]
   被装饰的函数可以接受任意个参数;
   装饰器可以传参数,并将装饰器的参数打印出来;显示为‘装饰器所传参数为:xxx’

技术分享图片

技术分享图片



python-高阶函数

标签:spn   title   rar   seh   gpl   cdt   20px   ase   auc   

原文地址:http://blog.51cto.com/13362895/2060918

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!