当前位置:  编程技术>python

python进阶教程之函数对象(函数也是对象)

    来源: 互联网  发布时间:2014-10-11

    本文导语:  秉承着一切皆对象的理念,我们再次回头来看函数(function)。函数也是一个对象,具有属性(可以使用dir()查询)。作为对象,它还可以赋值给其它对象名,或者作为参数传递。 lambda函数 在展开之前,我们先提一下lambda函数。...

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

lambda函数

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

代码如下:

func = lambda x,y: x + y
print 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 True
    else:
        return False

print 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类的构造函数,析构函数以及垃圾回收机制详细介绍及代码举例
  • python中去空格函数的用法
  • Python函数默认参数和字典参数及可变参数(带星号参数)
  • 哪位大侠有python的win32com的api函数说明?
  • Python数组条件过滤filter函数使用示例
  • Python过滤函数filter()使用自定义函数过滤序列实例
  • Python使用函数默认值实现函数静态变量的方法
  • python回调函数的使用方法
  • Python的函数嵌套的使用方法
  • python中的一些类型转换函数小结
  • Python中apply函数的用法实例教程
  • python del()函数用法
  • python中使用enumerate函数遍历元素实例
  • 使用python实现strcmp函数功能示例
  • Python def函数的定义、使用及参数传递实现代码
  • python函数返回多个值的示例方法
  • Python 执行字符串表达式函数(eval exec execfile)
  • Python获取远程文件大小的函数代码分享
  • Python help()函数用法详解
  • python strip()函数 介绍
  • python的id()函数解密过程
  • python进阶教程之文本文件的读取和写入
  • python进阶教程之模块(module)介绍
  • python进阶教程之循环相关函数range、enumerate、zip
  • python进阶教程之词典、字典、dict
  • python进阶教程之循环对象
  • python进阶教程之异常处理
  • python进阶教程之函数参数的多种传递方法
  • Python入门及进阶笔记 Python 内置函数小结
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Python namedtuple对象json序列化/反序列化及对象恢复
  • Python的对象XML序列化扩展 pyxser
  • Python 面向对象 成员的访问约束
  • Python isinstance判断对象类型
  • python 判断自定义对象类型
  • python创建只读属性对象的方法(ReadOnlyObject)
  • python中的对象拷贝示例 python引用传递
  • 从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
  • Python 不同对象比较大小示例探讨
  • python使用内存zipfile对象在内存中打包文件示例
  • python基础教程之对象和类的实际运用
  • python基础教程之面向对象的一些概念
  • Python对象的深拷贝和浅拷贝详解
  • Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
  • Python GUI编程:tkinter实现一个窗口并居中代码
  • 让python同时兼容python2和python3的8个技巧分享
  • Python不使用print而直接输出二进制字符串
  • 使用setup.py安装python包和卸载python包的方法
  • Python中实现json字符串和dict类型的互转
  • 不小心把linux自带的python卸载了,导致安装一个依赖原python的软件不能安装,请问该怎么办?
  • python异常信息堆栈输出到日志文件
  • Python开发者社区整站源码 Pythoner
  • python下用os.execl执行centos下的系统时间同步命令ntpdate
  • python读取csv文件示例(python操作csv)
  • Python获取网页编码的方法及示例代码
  • python基础教程之python消息摘要算法使用示例
  • Python异常模块traceback用法举例
  • 新手该如何学python怎么学好python?
  • python之平台独立的调试工具winpdb介绍
  • 使用python删除nginx缓存文件示例(python文件操作)
  • 基于Python的Html/xml解析库Beautiful Soup 4.2.1发布


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3