在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. C入门之一

    1.stdio.h不要写错成studio.h 2. #include <stdio.h> int main() { /* 我的第一个 C 程序 */ printf("Hello, ...

  2. 接口测试Session/Cookie笔记(二)

    Windows系统运行计算器命令:calc python显示上一步操作命令:Alt+p python显示上一步操作结果:_(英文下划线) Session是存放在服务器的键值对 ,用于保存客户端的某个特 ...

  3. C#取出字符串中的数字或字母

    string str20 = "ABC123"; string strSplit1,strSplit2; //取出字符串中所有的英文字母 strSplit1 = Regex.Rep ...

  4. 深度学习方法:受限玻尔兹曼机RBM(四)对比散度contrastive divergence,CD

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入 上篇讲到,如果用Gibbs Sa ...

  5. win10更换登陆背景和关闭锁屏

    更换登陆背景图 用国外一个hacker写的工具,可在github上下载,或者下载我上传到百度网盘的备份.win10默认的登陆背景太难看了. 去掉锁屏图片 登陆界面其实本身就是一种锁屏,为什么还要单独搞 ...

  6. [前端随笔][JavaScript][自制数据可视化] “中国地图”

    说在前面 想自己实现一个可视化的中国地图(可以实现如用户来源省份数据统计功能),网上搜了一下,翻了几页几乎都是第三方库(如echarts.js)实现的,简直不能忍. 不是第三方库不好,只是要花时间去适 ...

  7. OFBIZ 10.04 开发环境搭建(ofbiz+mysql+eclipse)

    1.下载安装 JDK1.6,并设置环境变量 在“我的电脑”上点右键—>“属性”—>“高级”—> “环境变量(N)”.    新建系统变量JAVA_HOME:C:Program Fil ...

  8. Notepad++7.4.2的配置使用详情

    之前有写过一篇notepad的使用说明,没想到稀里糊涂更新了几次之后,我以前的配置什么的全干掉了,而且我打开新版后,发现和以前还有点不一样了.那就继续这个高级版本再来一边吧. 1.Zen Coding ...

  9. python学习第一天_环境的搭建

    Python linux环境的安装: 1.https://www.python.org/ftp/python/ 大家可以在这里下载自己所需的linux下的版本 ,这里我下载的2.6.6版本: 2.在C ...

  10. 【ModelMap】jsp中显示springmvc modelmap传递的对象

    最近在做一个小网站,功能非常基础,决定用springmvc搭建. 遇到一个问题,在controller向前端传值时,比如使用ModelMap传了一个字符串,modelmap.addattribute( ...