zoukankan      html  css  js  c++  java
  • (四)一等函数

    一等对象满足以下条件:运行时创建、能赋值给变量或数据结构中的元素、能作为参数传给函数、能作为函数的返回结果。 整数、字符串、字典以及函数,都是一等对象。

    一、把函数视作对象

      可以把函数进行赋值调用

           

    二、高阶函数  

      1、接受函数为参数,或者把函数作为返回结果的函数是高阶函数(high-order)。

      如上例的map,以及内置函数sorted,key参数用于提供一个函数,filter以及reduce也是,不过多数场景下都有更好的替代品。

      

      2、map、filter和reduce的现代替代品

        列表推导或生成器表达式具有map和filter功能,而且更易于阅读。

        在python3中,map和filter返回生成器(一种迭代器),因此直接替代的产品是生成器表达式。

       在python2中,这两个函数返回列表,因此直接替代的是列表推导

      reduce通常用于求和(此时可直接用sum替代),此外all(iterable), iterable所以元素为真,返回True。any(iterable)一个元素为真,返回True

    三、匿名函数

      匿名函数通常用作高阶函数的参数。lambda表达式会创建函数对象(可调用对象的一种)。

    四、可调用对象

      1、可以使用()的对象。通过调用callable()函数可判断对象能否调用;

      2、python数据类型中,七种可调用对象:使用def语句或者lambda表达式创建、内置函数(如len)、内置方法(如dic.get)、方法(类中定义的函数)、

    类、类的实例(需定义__call__方法)、生成器函数(yield)

    五、用户定义的可调用类型

      不仅python函数是对象,对象也可以表现得像函数(实现__call__方法)。

      

    六、函数参数:从定位参数到仅限关键字参数

      name: 定位参数       *content:第一个参数后任意个参数由其捕获,并存入元组      

      cls: 关键字参数   **attrs:捕获没有明确指定名称的关键字参数,并存入字典   

        定义函数时,若想指定仅限关键字参数,要把它们放到前面有*参数的后面。如果不想支持数量不定的定位参数,可在签名中放一个*

      此时调用f(1,3,b=2)会报错。

        

    七、支持函数式编程的包

      1、operator模块

        operator中,为多个运算符提供了对应的函数;

         

          还有itemgetter和attrigetter,从序列中取出元素或读取对象属性,避免使用lambda表达式。

      

      2、使用functools.partial冻结参数

        这个高阶函数用于部分应用一个函数:基于一个函数创建一个新的可调用对象,把原函数的某些参数固定

               

  • 相关阅读:
    一个简单的反反爬~
    查缺补漏 -- python 之 and or的优先级
    从今天开始看《Redis深度历险》--HyperLogLog
    从今天开始看《Redis深度历险》--位图
    从今天开始看《Redis深度历险》--延时队列
    从今天开始看《Redis深度历险》--分布式锁
    redis之set【官方文档搬运+翻译】
    从今天开始看《Redis深度历险》--基础
    collections模块学习之namedtuple
    元组赋值谜题
  • 原文地址:https://www.cnblogs.com/573177885qq/p/9909112.html
Copyright © 2011-2022 走看看