zoukankan      html  css  js  c++  java
  • 流畅的python第五章一等函数学习记录

    在python中,函数是一等对象,一等对象是满足以下条件的程序实体

    1在运行时创建

    2能复制给变量或数据结构的元素

    3能作为参数传给函数

    4能作为函数的返回结果

    高阶函数(接受函数作为参数或者把函数作为结果返回的函数),如map和sorted函数

    最为人熟知的高阶函数有map,filter,reduce和apply,apply在python3中移除了

    map,filter和reduce的替代品

    map和filter现在可以使用列表推导来替代

    reduce在python2是内置函数,python3中放到functools模块里了。最常用于求和,现在最好使用内置sum函数,可读性和性能更高。

    匿名函数

    lambda关键字在python表达式内创建匿名函数

    除了作为参数传给高阶函数,python很少使用匿名函数,由于句法的限制,非平凡的lambda表达式要么难以阅读要么无法写出

    如果lambda表达式导致一段代码难以理解,建议进行以下重构

    1编写注释,说明lambda表达式的作用

    2研究注释,找出一个名称来概括注释

    3把lambda表达式转换成def语句,使用那个名称来定义函数

    4删除注释

    可调用对象

    如果想判断对象能否调用,可以使用内置的callable()函数,python数据模型文档列出了7种可调用对象

    1用户定义的函数(使用def语句或lambda表达式创建)

    2内置函数(使用c语言或者CPython实现的函数,如len或time.strftime)

    3内置方法(使用c语言实现的方法,如dict.get)

    4方法(在类的定义体中定义的函数)

    5类

    6类的实例(如果类定义了__call__方法,那么它的实例可以作为函数调用)

    7生成器函数(使用yield关键字的函数或方法,调用生成器函数返回的是生成器对象)

    用户定义的可调用类型

    只需实现实例方法__call__,任何python对象都可以表现的像函数

    函数自省

    用dir函数可以查看函数对象有哪些属性或者方法

    从定位参数到仅限关键词参数

     

    获取关于参数的信息

    函数对象有个__defaults__属性,它的值是一个元组,里面保存着定位参数和关键字参数的默认值。仅限关键字参数的默认值在__kwdefaults__属性中。然而,参数的名称在__code__属性中,它的值是一个code对象引用,自身也有很多属性。

    参数名称在__code__.co_varnames中,里面还有函数定义体中创建的局部变量,因此,参数名称是前N个字符串,N的值由__code__.co_argcount确定。顺便说一下,这里不包含前缀为*或** 的变长参数。参数的默认值只能通过他们在__defaults__元组的位置确定,因此要从后向前扫描才能把参数和默认值对应起来

    更好的方式

    函数注解

    这个函数注解目前看来没什么用

    支持函数式编程的包

    operator模块

    operator模块中定义的部分函数

    使用functools.partical冻结参数

  • 相关阅读:
    Thrift --- 支持双向通信
    Go -- 配置监控系统
    Go -- RPC 之 Thrift
    Go -- 一致性哈希算法
    Go -- runtime.Gosched()的作用分析
    Go -- import使用及. _的作用解析
    BNF 和 ABNF 扩充巴科斯范式 了解
    转 HTTP.SYS 详解
    转 HTTP/2: The Long-Awaited Sequel
    网站分析
  • 原文地址:https://www.cnblogs.com/lgh344902118/p/8349918.html
Copyright © 2011-2022 走看看