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

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

章节概述:Python中函数是一等对象,本章从函数为什么是一等对象的角度来介绍Python函数。

章节结构:

什么是一等对象

为什么函数是一等对象

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

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

可调用对象

具体内容:

什么是一等对象

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

函数是对象

我们可以在控制台中def function_example(n): 创建一个函数,所以函数满足运行时创建。

我们查看type(function_name),返回,说明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方法

函数内省:函数的属性

bVbCPh1

Python的参数处理机制

位置参数:位置参数是按位置顺序传参的。

关键字参数:函数定义时,如果有参数,则所有的形参名都是一个关键字,如果想通过关键字的方式传参,可以使用关键字=值得方式传参。

默认参数:在函数定义时就给参数传入了一个默认的参数值,如果函数调用时没有给这个参数传值,就使用默认值, 如果显式的传参了,就使用新传入的值代替默认值。

仅限关键字参数(Keyword-only argument):仅限关键字参数就是只能传入关键字参数,不能通过其他方式传参。仅限关键字参数不可缺省(除非有默认值),且只能强制性通过关键字传参。

可变参数:可变参数是一个形参可以接受多个实参,可变参数的传入数是不决定的,通常由函数调用方决定。

可变关键字参数:可变关键字参数 用 双星号+参数名表示, 可变关键字参数接收零个或多个关键字参数,并以字典的形式传入函数体,关键字为此字典的key,关键字绑定的值为value。如果可变关键字没有接收到任何参数, 则传入函数体一个空字典{}。~~~~

获取参数信息:函数__default__属性,这个元组中保存着定位参数和关键字参数的默认值,仅限关键字参数的默认值在__kwdefaults__里。

支持函数式编程的包

operator模块:位多个算术运算符提供了对应的函数

functools模块:提供了一系列高阶函数,比如reduce

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值