秉承着一切皆对象的理念,我们再次回头来看函数(function)。函数也是一个对象,具有属性(可以使用dir()查询)。作为对象,它还可以赋值给其它对象名,或者作为参数传递。

lambda函数

在展开之前,我们先提一下lambda函数。可以利用lambda函数的语法,定义函数。lambda例子如下:

func = lambda x,y: x + yprint func(3,4)

lambda生成一个函数对象。该函数参数为x,y,返回值为x+y。函数对象赋给func。func的调用与正常函数无异。

以上定义可以写成以下形式:

def func(x, y):return x + y

函数作为参数传递

函数可以作为一个对象,进行参数传递。函数名(比如func)即该对象。比如说:

def test(f, a, b):print 'test'print f(a, b)test(func, 3, 5)

test函数的第一个参数f就是一个函数对象。将func传递给f,test中的f()就拥有了func()的功能。

我们因此可以提高程序的灵活性。可以使用上面的test函数,带入不同的函数参数。比如:

test((lambda x,y: x**2 + y), 6, 9)

map()函数

map()是Python的内置函数。它的第一个参数是一个函数对象。

re = map((lambda x: x+3),[1,3,5,6])

这里,map()有两个参数,一个是lambda所定义的函数对象,一个是包含有多个元素的表。map()的功能是将函数对象依次作用于表的每一个元素,每次作用的结果储存于返回的表re中。map通过读入的函数(这里是lambda函数)来操作数据(这里“数据”是表中的每一个元素,“操作”是对每个数据加3)。

在Python 3.X中,map()的返回值是一个循环对象。可以利用list()函数,将该循环对象转换成表。

如果作为参数的函数对象有多个参数,可使用下面的方式,向map()传递函数参数的多个参数:

re = map((lambda x,y: x+y),[1,2,3],[6,7,9])

map()将每次从两个表中分别取出一个元素,带入lambda所定义的函数。

filter()函数

filter函数的第一个参数也是一个函数对象。它也是将作为参数的函数对象作用于多个元素。如果函数对象返回的是True,则该次的元素被储存于返回的表中。filter通过读入的函数来筛选数据。同样,在Python 3.X中,filter返回的不是表,而是循环对象。

filter函数的使用如下例:

def func(a):if a > 100:return Trueelse:return Falseprint filter(func,[10,56,101,500])

reduce()函数

reduce函数的第一个参数也是函数,但有一个要求,就是这个函数自身能接收两个参数。reduce可以累进地将函数作用于各个参数。如下例:

print reduce((lambda x,y: x+y),[1,2,5,7,9])

reduce的第一个参数是lambda函数,它接收两个参数x,y, 返回x+y。

reduce将表中的前两个元素(1和2)传递给lambda函数,得到3。该返回值(3)将作为lambda函数的第一个参数,而表中的下一个元素(5)作为lambda函数的第二个参数,进行下一次的对lambda函数的调用,得到8。依次调用lambda函数,每次lambda函数的第一个参数是上一次运算结果,而第二个参数为表中的下一个元素,直到表中没有剩余元素。

上面例子,相当于(((1+2)+5)+7)+9

根据mmufhy的提醒: reduce()函数在3.0里面不能直接用的,它被定义在了functools包里面,需要引入包,见评论区。

总结

函数是一个对象

用lambda定义函数

map()

filter()

reduce()

Python进阶07 函数对象相关推荐

  1. Python进阶06 循环对象

    Python进阶06 循环对象 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 这一讲的主要目的是为了大家在读Python程序的时 ...

  2. python进阶07 MySQL

    python进阶07 MySQL 一.MySQL基本结构 1.认识MySQL #MySQL不是数据库,它是数据库管理软件 #MySQL如何组织数据 #如何进入MySQL数据库 #其他注意事项#以表格的 ...

  3. python进阶07并发之三其他问题

    原创博客地址:python进阶07并发之三其他问题 何时使用多进程(线程) 使用多进程or线程,对于python,考虑到GIL锁,基本上默认使用多进程就对了. 除此之外,线程共享全局变量,进程全局变量 ...

  4. Python学习笔记(12)-Python进阶12-类和对象

    Python进阶12-类和对象 1 面向对象概述 1.1 对象 1.2 类 1.2.1 面向对象程序设计的特点 2 类的定义和使用 2.1 定义类 2.2 创建类的实例 2.3 "魔术方法& ...

  5. 7.1.3 Python进阶 《函数》定义、调用,参数,返回值《面向对象》概念,类,实例,对象,属性,方法《模块、包》导入,自定义,常用内置:datatime,time,random,os,sys

    目录 ======== 第四部分 Python进阶 ======== 第一节 函数 4.1.1 函数定义及调用 4.1.2 函数的参数 4.1.3 函数的返回值 第二节 面向对象 4.2.1 面向对象 ...

  6. Python基础day4 函数对象、生成器 、装饰器、迭代器、闭包函数

    一.函数对象 正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松 ...

  7. Python教程:函数对象与函数嵌套

    一:函数对象 精髓:可以把函数当成变量去用 1.可以赋值 # func=内存地址 def func():print('from func')f=func # 函数func赋值给变量f print(f, ...

  8. Python进阶-----类、对象的相关知识

    一.声明类 class 类名: #一般类名的首字母大写 '类的文档字符串' 类体 例如创建一个中国人的类: 1 class Chinese: 2 '这是一个中国人的类' #类的文档字符串 3 name ...

  9. Python进阶06 循环对象与迭代

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 这一讲的主要目的是为了大家在读Python程序的时候对循环对象有一个基本概念. 循 ...

最新文章

  1. pandas一维度数据操作
  2. IDEA破解 2017 IDEA license server 激活(可用)
  3. 【“互联网+”大赛华为云赛道】API命题攻略:厘清三步解题思路,用好开发工具
  4. 微信小程序UI------实现携程首页顶部的界面(弹性布局)
  5. 放射性核废料处理matlab模型,放射性废物处理问题
  6. w2金融股票分析— matplotlib库
  7. Android Studio实现记事本项目
  8. jboss7学习2-jboss7入门(端口和访问的ip问题)
  9. 10款精美的web前端源码的特效
  10. 自己开发的一套实用故障报修管理系统【分享推荐大家】
  11. 动态规划——01背包——精卫填海
  12. 北航基物1101英文波尔共振实验
  13. 财帮子基金理财社区上线
  14. 二维码如何制作?简单的制作方法介绍
  15. 移动应用程序设计基础——数据库实践——简单日记本
  16. excel引用其他表数据
  17. Android联网失败报错:java.io.IOException: Cleartext HTTP traffic to xxx.xxx.xxx.xxx not permitted
  18. C#实现物体尺寸测量(利用坐标转换)
  19. Declaration of Interest Statement
  20. 能够走到聚光灯下的“码师”,都做对了什么

热门文章

  1. 奥比中光大白(3D结构光)摄像头测试发现对着灯光过曝问题
  2. Android LK Bootlaoder启动概览
  3. WINCE viewbin命令
  4. JNDI学习总结(1)——JNDI入门简介
  5. python编程规范
  6. 做不背锅的运维(文末有彩蛋!)
  7. python线程,进程,协程
  8. Python 自带IDLE中调试程序
  9. LeetCode:Minimum Depth of Binary Tree,Maximum Depth of Binary Tree
  10. [美文欣赏]清华胡宇迪教授谈