zoukankan      html  css  js  c++  java
  • python 理解高阶函数

    高阶函数

    高阶函数英文叫Higher-order function。什么是高阶函数?

    变量可以指向函数

    以Python内置的求绝对值的函数abs()为例,调用abs():

    >>> abs(-10)
    10
    

      

    如果直接调用abs():

    >>> abs
    <built-in function abs>    #内置的函数ABS 
    

    这样abs(-10)为abs()函数的调用,而abs是函数本身。

    要获得函数调用结果,可以把结果赋值给变

    >>> x=abs(-10)
    >>> x
    10
    

    但是如果把函数赋给变量

    >>> x=abs
    >>> x
    <built-in function abs>
    

     这样abs()函数就赋值给了x

    >>> x(-10)
    10
    

    这样abs()函数就赋值给了x,说明变量x现在已经指向了abs函数本身。直接调用abs()函数和调用变量x()完全相同。

    函数名也是变量

    那么函数名是什么呢?函数名其实就是指向函数的变量!对于abs()这个函数,完全可以把函数名abs看成变量,它指向一个可以计算绝对值的函数!

    把abs()指向其他对象的话:

    >>> abs = -10
    >>> abs(-10)
    Traceback (most recent call last):
      File "<pyshell#1>", line 1, in <module>
        abs(-10)
    TypeError: 'int' object is not callable
    

      把abs指向10之后,就无法通过abs(-10)调用该函数了,以为abs已经改变不指向python计算绝对值的函数,而是指向一个-10。说明函数名也是变量。

    >>> abs
    -10
    

      所以代码不能这样写。

    注:由于abs函数实际上是定义在import builtins模块中的,所以要让修改abs变量的指向在其它模块也生效,要用import builtins; builtins.abs = 10

    传入函数

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

    简单的高阶函数:

    def add(x,y,z):
        return print(z(x)+z(y))
    

    调用函数add:

    >>>add(10,-10,abs)
    >>>20

    这样调用add(10,-10,abs)的时候,参数(x,y,z)分别接收(10,-10,abs)

    推断出计算过程:

    (z(x)+z(y)) = abs(-10)+abs(10) = 20
    

      

    高阶函数,就是让函数的参数能够接收别的函数。

  • 相关阅读:
    mysql的多表查询join
    JMeter源码集成到Eclipse
    jmeter关联 正则表达式提取器
    JMeter结果树响应数据中文乱码解决办法
    BZOJ 2080: [Poi2010]Railway 双栈排序
    BZOJ 4384: [POI2015]Trzy wieże
    BZOJ 4325: NOIP2015 斗地主
    BZOJ 1142: [POI2009]Tab
    第10章 内核同步方法
    第1章 Linux内核简介
  • 原文地址:https://www.cnblogs.com/Tsukasa/p/6592267.html
Copyright © 2011-2022 走看看