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冻结参数

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

               

  • 相关阅读:
    WPF DelegateCommand 出现Specified cast is not valid
    WPF DelegateCommand 出现Specified cast is not valid
    WPF DelegateCommand 出现Specified cast is not valid
    win10 sdk 是否向下兼容
    win10 sdk 是否向下兼容
    win10 sdk 是否向下兼容
    PHP extract() 函数
    PHP end() 函数
    PHP each() 函数
    PHP current() 函数
  • 原文地址:https://www.cnblogs.com/573177885qq/p/9909112.html
Copyright © 2011-2022 走看看