在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. Windows + IDEA 手动开发MapReduce程序

    参见马士兵老师的博文:map_reduce 环境配置 Windows本地解压Hadoop压缩包,然后像配置JDK环境变量一样在系统环境变量里配置HADOOP_HOME和path环境变量.注意:hado ...

  2. poj 1742(好题,楼天城男人八题,混合背包)

    Coins Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 33269   Accepted: 11295 Descripti ...

  3. linux下输入密码不回显

    这几天在做一个登陆的程序,需要将输入的密码屏蔽掉,自己百度,找到了两种方法,先贴下第一种方法, #include<stdio.h> #include<unistd.h> int ...

  4. [水煮 ASP.NET Web API2 方法论](12-4)OData 支持的 Function 和 Action

    问题 在 Web API 中使用 OData Function 和 Action. 解决方案 可以通过 ODataModelBuilder,使用 OData 构建 ASP.NET Web API, E ...

  5. div随意拖动,基于jquery。

    $("#box").mousedown(function (e) { //e鼠标事件 var offset = $(this).position();//DIV在页面的位置 使用p ...

  6. hdu 1698 Just a Hook(线段树区间修改)

    传送门:Just a Hook Problem Description In the game of DotA, Pudge’s meat hook is actually the most horr ...

  7. 论文笔记-RCNN

    CAFFE玩了也有段时间了,现在开始准备研究一下物体检测,现在知道的有RCNN.spp-net.Fast-RCNN和Faster-RCNN,作为菜鸟我还是从头学习,决定先看RCNN,因为有项目要做还要 ...

  8. 用python正则表达式提取网页的url

    import re import urllib url="http://www.itokit.com" s=urllib.urlopen(url).read() ss=s.repl ...

  9. 深入了解HTTP协议

    1.HTTP协议简介 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准. 1.1背景 设计HT ...

  10. Extjs MVC模式

    最近在学习Extjs,发现他可以使用MVC模式,不但可以组织代码,而且可以 减少实现的内容,模型(Models)和控制器(Controllers)也被引入其中. Model模型是字段和它们的数据的集合 ...