zoukankan      html  css  js  c++  java
  • Python进阶07 函数对象

    秉承着一切皆对象的理念,我们再次回头来看函数(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,2,3,6])

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

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

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

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

    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,2333])

    reduce()函数

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

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

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

    reduce将表中的前两个元素(1和2)传递给lambda函数,得到3.该返回值(3)将作为lambda函数的第一个参数,

    而表中的下一个元素(5) 作为lambda函数的第二个参数,进行下一次的对lamdba函数的调用,得到8.  .....

  • 相关阅读:
    UVALive 7509 Dome and Steles
    HDU 5884 Sort
    Gym 101194H Great Cells
    HDU 5451 Best Solver
    HDU 5883 The Best Path
    HDU 5875 Function
    卡特兰数
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    Spark Scala Flink版本对应关系
  • 原文地址:https://www.cnblogs.com/simadongyang/p/8251642.html
Copyright © 2011-2022 走看看