在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. AC日记——[POI2014]KUR-Couriers 洛谷 P3567

    [POI2014]KUR-Couriers 思路: 卡空间,sb题: 代码: #include <bits/stdc++.h> using namespace std; #define m ...

  2. oracle 11g安装教程

    oracle 11g安装教程 第1步 第2步 第3步 第4步 第5步 第6步 第7步 第8步 第9步 第10步 第11步 第12步 第13步 第14步 第15步 第16步 第17步 第18步 第19步 ...

  3. LeetCode 344. Reverse String(反转字符串)

    题目描述 LeetCode 344. 反转字符串 请编写一个函数,其功能是将输入的字符串反转过来. 示例 输入: s = "hello" 返回: "olleh" ...

  4. jquery canvas 用户点击记录

    <div style="width:200px; height:20px; position:fixed; top:0; left:0; background-color:blue;& ...

  5. websocket初步了解

    https://www.cnblogs.com/fuqiang88/p/5956363.html websocket是一种新型的协议,协议标识符为ws,加密即为wss 简单说来就是一种持续的http服 ...

  6. 洛谷——P4018 Roy&October之取石子

    P4018 Roy&October之取石子 题目背景 Roy和October两人在玩一个取石子的游戏. 题目描述 游戏规则是这样的:共有n个石子,两人每次都只能取p^kpk个(p为质数,k为自 ...

  7. poj 1298(水题)

    The Hardest Problem Ever Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24241   Accept ...

  8. HDU 6044 Limited Permutation(搜索+读入优化)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6044 [题目大意] 给出两个序列li,ri,现在要求构造排列p,使得对于区间[li,ri]来说, ...

  9. BZOJ 1305 [CQOI2009]dance跳舞(二分+网络流)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1305 [题目大意] 一次舞会有n个男孩和n个女孩. 每首曲子开始时,所有男孩和女孩恰好 ...

  10. [UOJ347]通道

    锟题x1 以下用$d_k(x,y)$表示$x,y$在第树$k$上的距离,$h_k(x)$表示$x$在树$k$上的深度 先做两棵树,即最大化$d_1(x,y)+d_2(x,y)=h_1(x)+h_1(y ...