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

流畅的python第五章一等函数学习记录的更多相关文章

  1. 流畅的python第二十章属性描述符学习记录

    描述符是对多个属性运用相同存取逻辑的一种方式.例如,Django ORM 和 SQL Alchemy等 ORM 中的字段类型是描述符,把数据库记录中字段里的数据与 Python 对象的属性对应起来.描 ...

  2. 高性能MySQL之【第十五章 备份与恢复】学习记录

      我们不打算包括的话题:      安全(访问备份,恢复数据的权限,文件是否需要加密)      备份存储在哪里,包括他们应该离源数据多远,以及如何将数据从源头移动到目的地      保留策略.审计 ...

  3. python 教程 第五章、 函数

    第五章. 函数 定义语句后面要加冒号 1)    定义函数 def sayHello(): print 'Hello World!' sayHello() 2)    变量作用域 LEGB原则 L本地 ...

  4. Python第五章__模块介绍,常用内置模块

    Python第五章__模块介绍,常用内置模块 欢迎加入Linux_Python学习群  群号:478616847 目录: 模块与导入介绍 包的介绍 time &datetime模块 rando ...

  5. 简学Python第五章__模块介绍,常用内置模块

    Python第五章__模块介绍,常用内置模块 欢迎加入Linux_Python学习群  群号:478616847 目录: 模块与导入介绍 包的介绍 time &datetime模块 rando ...

  6. Python进阶(五)----内置函数Ⅱ 和 闭包

    Python进阶(五)----内置函数Ⅱ 和 闭包 一丶内置函数Ⅱ ####内置函数#### 特别重要,反复练习 ###print() 打印输入 #sep 设定分隔符 # end 默认是换行可以打印到 ...

  7. python第三章:函数

    在前面章节中,介绍了一些input(),print(),len()等内建函数,还有random,math等标准库相关函数,这些都是可以直接使用的,但是很多时候,我们也是可以编写自己的函数. 看个例子: ...

  8. Python标准库之核心模块学习记录

    内建函数和异常 包括__builtin__模块和exceptions模块 操作系统接口模块 包括提供文件和进程处理功能的os模块,提供平台独立的文件名处理(分拆目录名,文件名,后缀等)的os.path ...

  9. Python全栈工程师系列学习之学习记录

    @ 目录 前言 Day 01 一.python的历史和种类 二.安装python解释器以及配置环境变量 三.变量.常量和注释 Day 02 Day 03 Day 04 Day 05 Day 06 一. ...

随机推荐

  1. HUD-5379

    Mahjong tree Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  2. J2EE MySQL Date数据保持一致解决方案

    1.设置MySQL时区,明确指定 MySQL 数据库的时区,不使用引发误解的 CST show variables like '%time_zone%';set global time_zone = ...

  3. 追忆似水流年sed

    sed是一种非交互式的流编辑器,默认情况下并不会修改源文件内容,只是把命令的结果输出处理单位:行功能:查找替换.添加.插入.删除适用场景:常规编辑器难以胜任的文本:大文件(几百兆):有规律的文本修改操 ...

  4. 学习LoadRunner之C语言函数

    学习LoadRunner之C语言函数 Action() { /*strchr和strrchr的区别*/ /* char *strTest1="citms citms"; char ...

  5. java 中的try catch在文件相关操作的使用

    import java.io.CharConversionException; import java.io.FileNotFoundException; import java.io.FileRea ...

  6. sqlmap os shell解析

    0x00 Background 最近遇到测试环境,最后利用sqlmap的--os-shell参数取得shell.一直以来,对这个参数的工作原理不是十分的清晰.大致的思想应该是将脚本插入到数据库中,然后 ...

  7. 从Windows复制文件到Linux显示乱码问题

    (1).文件名乱码 这并不是所有人都会碰到的问题,一般常见于使用putty的用户.使用convmv命令可以解决这个问题. 我写详细一点还原真实场景,首先我来上传一个测试文件“a此文件在windows下 ...

  8. Xamarin.Forms教程Android SDK工具下载安装

    Xamarin.Form的Android SDK工具下载安装 本节将讲解如何下载Xamarin.Form的Android SDK工具,并使用其中的工具管理Android SDK,如何创建模拟器等内容. ...

  9. VB查询数据库之组合查询——机房收费总结(二)

    在机房收费系统中,组合查询用的还是挺多的,像上机状态查询窗体.学生上机统计信息窗体.操作员工记录窗体.基本信息维护窗体.这其中,学生基本信息维护窗体中的东西比较多,就以它为例子,说说组合查询吧! 学生 ...

  10. 【CodeVS 2845】排序的代价

    http://codevs.cn/problem/2845/ 好难的题啊qwq 没想到把排好序的数组的第i位和原数组的第i位的值看成一个单射函数,这样这是一个长度为n的置换. 对于置换的其中一个循环, ...