流畅的Python读书笔记 --- 第五章 一等函数

近期在读“流畅的Python”这本书,想把本身的读书笔记分享给你们,但愿能帮到也对这本书感兴趣可是没时间看的各位。(文章中大部分的话和图片摘录总结自“流畅的Python”一书,以及python官方网站)python

章节概述:Python中函数是一等对象,本章从函数为何是一等对象的角度来介绍Python函数。
章节结构:编程

  • 什么是一等对象
  • 为何函数是一等对象
  • 函数式编程风格,高阶函数
  • 使用高阶函数时,一次性的小型函数,匿名函数
  • 可调用对象

具体内容:数据结构

  • 什么是一等对象

一等对象是知足下述条件的程序实体:在运行时建立,能赋值给变量或者数据结构中的元素,能做为参数传给函数,能做为函数的返回结果。app

  • 函数是对象

咱们能够在控制台中def function_example(n): 建立一个函数,因此函数知足运行时建立。
咱们查看type(function_name),返回<class, 'function'>,说明function_example是function类的实例
咱们也能够将function_example这个对象赋值给一个变量,好比variable_example = function_example函数式编程

  • 函数式编程风格,高阶函数

接收函数为参数,或者把函数做为结果返回的函数就是高阶函数(higher-order function)。好比map,filter,reduce,apply,sorted
例:sorted(list_example, key=len)
几个高阶函数的说明:
sun和reduce的通用思想是把某个操做连续应用到序列的元素上,累计以前的结果,把序列值归约成一个值。
all和any是内置的归约函数
map和filter返回生成器,所以他们的替代品是生成器表达式函数

  • 使用高阶函数时,一次性的小型函数,匿名函数

匿名函数,lambda。匿名函数的定义体只能使用纯表达式,lambda定义体中不能赋值,也不能使用while,try等等
例:sorted(list_example,key=lambda word:word[::-1])网站

  • 可调用对象

如何判断一个对象是否可调用,能够用内置的callable()函数判断。
可调用对象:
用户定义的函数:def/lambda
内置函数:len等
内置方法:dict.get等
方法:在类的定义体中定义的函数
类:调用类会先运行__new__建立一个实例,而后运行__init__初始化实例,而后把实例返回给调用方
类的实例:若是定义了__call__
生成器函数:使用yield关键字的函数或方法
如何把类的实例变成可调用的对象?实现call方法spa

  • 函数内省:函数的属性

Function.png

  • Python的参数处理机制

位置参数:位置参数是按位置顺序传参的。
关键字参数:函数定义时,若是有参数,则全部的形参名都是一个关键字,若是想经过关键字的方式传参,可使用关键字=值得方式传参。
默认参数:在函数定义时就给参数传入了一个默认的参数值,若是函数调用时没有给这个参数传值,就使用默认值, 若是显式的传参了,就使用新传入的值代替默认值。
仅限关键字参数(Keyword-only argument):仅限关键字参数就是只能传入关键字参数,不能经过其余方式传参。仅限关键字参数不可缺省(除非有默认值),且只能强制性经过关键字传参。
可变参数:可变参数是一个形参能够接受多个实参,可变参数的传入数是不决定的,一般由函数调用方决定。
可变关键字参数:可变关键字参数 用 双星号+参数名表示, 可变关键字参数接收零个或多个关键字参数,并以字典的形式传入函数体,关键字为此字典的key,关键字绑定的值为value。若是可变关键字没有接收到任何参数, 则传入函数体一个空字典{}。~~~~
获取参数信息:函数__default__属性,这个元组中保存着定位参数和关键字参数的默认值,仅限关键字参数的默认值在__kwdefaults__里。对象

  • 支持函数式编程的包

operator模块:位多个算术运算符提供了对应的函数
functools模块:提供了一系列高阶函数,好比reduceblog

相关文章
相关标签/搜索