python基础3
一.函数进阶 闭包&装饰器
今晚记住两个关键词 《直接》 和《间接》
demo:
1 | 我的电脑硬盘内存不足了, 现在有什么解决办法? |
闭包函数
到底是个什么
是个 函数
闭: 封闭 >> 嵌套 该函数是个内部函数 在外部的函数体里面定义的函数
包: 内部函数包含外部函数作用域中的 变量的使用 (不是指全局作用域)总结:
1. 它必须是个函数
2. 并且它必须是嵌套函数
3. 内部函数必须使用了外部函数的作用域中的变量
4. 还得把内部函数 return 出去
包: 空间 >> 局部名称空间 >> 局部作用域
1 | def fun(): |
小结:
闭包:
1
2
3 1. 首先得是个嵌套函数
2. 内部函数用了外部函数的变量
3. return了 内部函数闭包 掌握了一个技能
1
2
3 给函数传参
1. 直接传参
2. 利用闭包传参 间接传参
装饰器
主要涉及的就是
1.闭包
2. 函数对象 把 函数作为参数来传递
用处 ——–> 在不修改我们的源码和调用方式的情况下,给函数添加功能
1 |
|
直接 >> 追女孩
间接 >> 你能做我的女朋友
直接修改 ——> 整容
间接修改 ——> 化妆
开发潜规则:
代码扩展 –>> 开放 —>可 添加功能
源码修改 –>> 封闭 —> 不能够修改源码
为什么不能够修改源码 ???
如果修改了之后,改出了一堆bug很麻烦
要拓展功能,但是要通过别的函数来实现 “ 间接修改”
函数的使用分为两个阶段:
1.定义(装饰器)函数
2.调用(装饰器)函数
装饰器: 在’不修改函数源码’ ,和 ‘函数调用方式的情况‘ 给函数添加功能
普通:写好了一个装饰器,要给函数添加功能
函数 = 装饰器(函数) # rest = func1(test) 给函数增加新功能,并且重新赋值
函数() # rest() 现在再调用函数就是已经增加了新功能
简便语法:直接给函数添加新功能,这样调用时,就是默认把装饰器上的功能加上
语法糖
@装饰器名 ——> @func1
def 函数名()——>def test()
demo:
1 |
|
总结:
- 什么情况下会用到装饰器: 一个功能很多时候都会使用,就可以把这个功能写成装饰器,给需要的函数添加
- 比如: 认证登录,输入验证码 相当于生活中的化妆 –> 在不改变你脸的情况下让你更好看 在不修改源代码的情况下,给函数添加功能
作业
1 | 请实现一个装饰器,把函数的返回值+100然后返回 |
巩固拓展博客:
装饰器拓展 https://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html
[装饰器拓展2](https://www.cnblogs.com/Jerry-Chou/archive/2012/05/23/python-decorator-explain.html https://www.cnblogs.com/cotyb/p/5243252.html) https://www.cnblogs.com/Jerry-Chou/archive/2012/05/23/python-decorator-explain.html https://www.cnblogs.com/cotyb/p/5243252.html
装饰器拓展3 https://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html
记得预习生成器 &迭代器
c语言中文网
菜鸟教程
二.递归&生成器&迭代器
上节回顾
1 | 闭包: |
递归
递归也是一种函数,在这个函数中不断的重复调用自己完成一些操作,但是这个调用它可以结束,
也就是,在一个函数中,自己调用了自己那就是递归
递归写起来方便,但是性能不是很好,对资源消耗很大,在正式开发,算法比赛不推荐的
1 | def test(num): |
迭代器
迭代,更新换代?
这是指对数据的一些操作,更新,输出,升级
比如软件的 版本1,版本2,版本3
华为手机 p30 p40 p50 等等
迭代器
iter —–> 可迭代对象 能够被循环的对象就是可迭代对象(面试题)
但是可迭代对象并不一定是被循环的对象
1 | iter -----> 可迭代对象 能够被循环的对象就是可迭代对象(面试题) |
生成器
1 | 本质: 自定义的迭代器(迭代器的变体) |
三元表达式
1 | # 三元表达式是python为我们提供的一种简化代码的解决方案 |
列表表达式
1 | 列表生成式 |
生成器表达式
1 | 生成器表达式 |
作业
1 | # 编写一个生成器,将一个二维的列表elist 转化为一维的列表。 |
复习博客
http://c.biancheng.net/view/5419.html –> 迭代器
http://c.biancheng.net/view/2393.html –> 生成器
http://c.biancheng.net/view/2270.html –> 装饰器
https://blog.csdn.net/zhengyajun_email/article/details/86715467 –> 装饰器嵌套
提前预习 文件操作
三.文件处理与内存管理
上节回顾
1 | 递归 |
高阶函数 map reduce filter
1 | # 情景一 对列表中的数据进行平方处理 |
与运行程序相关的三大核心硬件
1 | 我们编写的程序 一定要运行在计算机硬件之上,而站在硬件的角度,与运行程序有关的三大核心 |
文件操作
1 | 用Python来操作文件(doc, bat, exe, py, mp3, jpg, html) |
绝对路径和相对路径
1 | ``文件路径 = 文件存储的位置 |
1 | ``绝对路径: 广东广州市天河区车陂大岗路2号联合社区西区1C栋2楼全层 |
1 | ``计算机中的路径: |
拓展博客
四.模块与包
上节回顾
1 | li = [123,343,52] |
初识模块
1 | 什么是模块??? |
pip Python包管理工具
1 | pip --> python自带的下载工具 |
模块的使用
1 | ##模块的使用 |
模块进阶使用
1 | ##模块进阶使用 |
模块与包
1 | 包是模块的一种变异体,本质上也是模块的一种 |
拓展博客
1 |
|
五.常用模块
上节回顾
周末 —》复习 —》 明天也是我们 复习课
- 过老师的课件,把知识点 梳理
- 根据自己的不足 ,在进行 代码 实操,拿 作业看看 是否现在有根会更好的解决方式
1 | 模块的本质其实就是一个Python文件 |
time – 时间模块
1 | # 时间模块的学习 |
random – 随机数模块
1 | import random |
sys – 系统模块
1 |
|
OS – 操作系统模块
1 | # 操作系统模块 os |
json – 序列化模块
1 | """ |
hashlib – 哈希模块
1 | ''' |
re模块
1 |
|
pathlib模块
1 | from pathlib import Path # Python3.7 之后推荐的,他比os模块更好 |
拓展分享
1 | MVC开发模式 --> 开发时的一种设计理念 |