python学习之路(十三)[闭包,装饰器,函数式编程,生成器]

一,闭包

闭包从表现形式上的定义就是,在一个内部函数里面,对在外部作用域但不是在全局作用域的变量进行引用,那么这个内部函数就是闭包,例如:

def func (x):

def fund(y):

return x*y

temp = func(8)

那么temp(3)=24,由上可知我们闭包的概念是由内部函数而来的,所以说我们不能再外部函数意外的地方对内部函数进行调用,并且内部函数只能对外部函数的变量进行访问,而不能修改。

这里我们给一个简单的例子从而帮助理解:

二,装饰器

具体的定义,我也口述不出来(感觉装饰器和闭包都是比较抽象的东西),我们来看我甲哥给的定义:装饰器的功能就是将被装饰函数当作参数传递给与装饰器对应的函数,并返回包装后的被装饰的函数。这里给出代码帮助理解:

什么是语法糖?

说的直白一点,语法糖没有任何功能性的作用,它是用于让整个代码看上去更加美观和便于理解的。上述代码我i们使用语法糖之后就会变成这样:(虽然感觉并没有便于理解)

三,函数编程式

我们这里学习三个:lambda, filter, map

1.lambda

lambda是用于创建匿名函数的关键词。在使用的时候给它临时给他取一个名字就行了。

创建时的模型就是这样的:

复制代码
lambda 参数1, 参数2, ... : 表达式

举个例子:

2.filter

形式:filter(function, iterable)

他的第一个参数可以是函数也可以是none,在第一个参数是函数的情况下,我们将第二个参数里面的数做为参数带入到函数中进行计算,然后返回返回值是True的玩意,如果第一个参数是none,那么就直接返回值是true的参数。

我们来举个例子:

3.map

它的原型是这样的:map(function, iterable, ...)

第一个参数是规则,第二个是而迭代对象

map 是 Python 内置的高阶函数,用于对可迭代对象中的每个元素执行同一操作,返回一个惰性迭代器(可以和lambda搭配使用)

如果在传入第二个参数的时候有多个可迭代对象,那么会从左到右依次进行计算,一段的那个为基准,短的那个到头以后,长的那个的后边部分就会被忽略。

举个例子:

四,生成器

创建方式:把函数里的 return 换成 yield 就变成"生成器函数",调用时并不执行,而是返回一个"可迭代对象"; 列表推导式外面套 () 就是"生成器表达式"。

运行机理:每次遇到 yield 先"交值"再"暂停",记住现场,下一次 next() 从暂停处继续,直到函数跑完抛出 StopIteration------小甲鱼把它比作"能续杯的奶茶机",一次只倒一口,喝完再按开关。

内置高阶搭档:用 for i in generator: 可自动触发 next()enumerate()zip() 同样支持生成器,节省内存,适合"大文件逐行读取""无限斐波那契"等场景。

五,高阶函数

概念:函数当"一等公民"------既能赋给变量,也能当参数或返回值,满足其一就叫高阶函数。

课程重点练的三件套

-- map():把函数映射到可迭代对象每个元素,返回迭代器;例:将全班英语成绩 *1.5 换算成 150 分制。

-- filter():按真值条件筛元素;例:筛出数学、物理均 ≥85 的竞赛候选人。

-- sorted():通过 key= 自定义排序;例:按"物理+化学"总分给学生排名。

进阶玩法:把 lambda、偏函数 functools.partial、甚至自定义高阶函数(参数里再传函数)串成"函数流水线",实现"成绩转换→筛选→排序"一条龙。

六,函数文档、类型注释、内省

  1. 写法:在 def 下方第一行用三引号写 """说明""",标准顺序"功能→参数→返回值→异常"。

    查看:运行阶段用 help()函数名.__doc__ 就能把说明调出来,达到"代码即文档"的效果;课程强调"写给人看,不要吝啬打字"。

  2. 类型注释 & 内省

    小甲鱼把类型注释叫"给变量贴便签":def add(x: int, y: int) -> int:,解释器不强制,但 IDE 与 mypy 可静态检查,减少"传错类型"的低级 bug。

  3. 内省( introspection )常用接口:-- type() / isinstance() 看"我是谁";-- hasattr() / getattr() 动态探属性;-- callable() 判断能否"加括号";课程用"查户口"类比,演示在交互环境实时查看对象信息,方便调试与写通用装饰器。

相关推荐
丝斯20112 小时前
AI学习笔记整理(26)—— 计算机视觉之目标追踪‌
人工智能·笔记·学习
m0_689618282 小时前
会“变形”的软3D电磁结构,让4D电子、柔性机器人迎来新可能
笔记·学习·机器人
柒柒钏3 小时前
PyTorch学习总结(一)
人工智能·pytorch·学习
一条破秋裤5 小时前
零样本学习指标
深度学习·学习·机器学习
喜欢踢足球的老罗5 小时前
Qoder AI IDE深度体验:用Repo Wiki与AskModel重塑开源库学习范式
人工智能·学习·qoder
可可苏饼干6 小时前
NoSQL 与 Redis
数据库·redis·笔记·学习·nosql
重生之我在番茄自学网安拯救世界6 小时前
网络安全中级阶段学习笔记(一):DVWA靶场安装配置教程与网络空间搜索语法
笔记·学习·网络安全·靶场·dvwa·fofa·google hack
源代码•宸6 小时前
GoLang并发简单例子(goroutine + channel + WaitGroup)
开发语言·经验分享·后端·学习·golang
TL滕6 小时前
从0开始学算法——第五天(初级排序算法)
数据结构·笔记·学习·算法·排序算法