IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【黑马-python进阶】---学习笔记(9)---高级语法(装饰器,GIL锁,拆包、继承、miniWeb) -> 正文阅读

[Python知识库]【黑马-python进阶】---学习笔记(9)---高级语法(装饰器,GIL锁,拆包、继承、miniWeb)

11 Python装饰器基础

11.4 闭包

11.4.1 闭包概念及其基本使用

  • 学习目标
    • 说出函数名赋值给一个变量的作用;
    • 说出闭包的特点;
  • 1、函数概念及引用

  • 函数名是一个特殊变量,存储函数存储地址
    image-20220606164249938
    image-20220606164557487

  • 和变量名一样,函数名只是函数代码空间的引用,当函数名赋值给一个对象的时候,就是引用传递;

  • 2、闭包
    image-20220606170200336
    image-20220606164700269
    image-20220606164715122
    image-20220606171123944
    image-20220606171325167
    image-20220606164728544

  • 小结
    image-20220606171359490

11.4.2 闭包中的变量问题-nonlocal

  • 1、闭包中使用外部变量
    image-20220606193328682
  • 2、修改外部函数中的变量
    image-20220606194101644
    image-20220606193525402
  • 小结
    image-20220606194156997

11.5 装饰器

11.5.1 装饰器基础

  • 学习目标
    • 装饰器的应用场景;
    • 装饰器函数较之于闭包的明显特点;
    • 使用装饰器的语法格式;
  • 1、装饰器引入
    image-20220606194744598
    image-20220606194802399
  • 2、装饰器概念
    image-20220606194858453
  • 例子:
    image-20220606195914307
    image-20220606195753132
    image-20220606195803341
    image-20220606200540731
    image-20220606200611516
    image-20220606200638530
  • 小结:装饰器就是在不修改源代码的基础上,给函数增加新的功能;

image-20220606200806471
image-20220606200820256

11.5.2 装饰有参数的函数

image-20220606202016035
image-20220606202025260
image-20220606202034210

  • 注意:func( * args, * * kwargs)而不是func(args,kwargs),需要进行参数拆包,
    image-20220606202040477
  • 错误输出分析;func(args,kwargs)
    image-20220606203502874
  • 小结
    image-20220606203557409
    image-20220606203619278

11.5.3装饰的函数有返回值

image-20220606202108176
image-20220606202116759
image-20220606202122809
image-20220606202128457

  • 小结
    image-20220606205014682

11.6 主从配置

  • 学习目标
    • 说出主从配置的应用场景;
  • 1、主从配置
    image-20220606205435924
    image-20220606205455313
    image-20220606205518915
    image-20220606205525638

12 Python高级语法专题1

12.1 装饰器(进阶)

12.1.1 在原装饰器上设置外部变量

image-20220607120912789
image-20220607120919384
image-20220607121948536

  • 当@test(参数),首先执行test(参数),不执行def函数定义,直接返回function_out,然后就是@function_out,跟之前一样;

  • 当@function_out没有参数时,就直接返回function_in,然后执行function_in函数,就相当于

    • “@function_out” == “login=function_out(login)”
  • 可以通过这种方式,向装饰其内部传递参数;

  • 小结
    image-20220607122738516

12.1.2 多重装饰器

image-20220607120936067
image-20220607120955745

  • 分析多重装饰器
    • @makeItalic在上面,下面还有一个@,这个时候会先暂停,先执行下面的@makeBold装饰器,@makeBold翻译为test3=makeBold(test3);开始执行;
      image-20220607140747474
  • 小结
    image-20220607141236117

12.1.3 类装饰器–使用一个类为函数做装饰

  • 就之前是用一个闭包装饰函数
    image-20220607141323321
    image-20220607141330225
  • 分析
    • 类中定义__ call __函数,test()会执行call函数;
    • @Test,相当于test=Test(test),类中的func就是test,而test接着类()就是一个对象,对象()就调用call函
  • 小结
    image-20220607145527700

12.3 GIL锁

12.3.1 GIL锁的引入

image-20220607145631481
image-20220607145640630
image-20220607145649021

  • 多线程是伪多线程,并没有把cpu资源沾满,因为全局GIL锁,一个时刻只能让一个线程使用cpu;
    image-20220608151757956
  • 小结
  • image-20220608151340742

12.3.2 GIL锁概念及影响

  • 学习目标
    • 知道GIL的作用
    • 知道GIL对多线程执行的影响
      image-20220607145839564
      image-20220607145850819
      image-20220607145857214
  • 小结
    • 多进程是可以利用多核CPU的,只是多线程不可以,GIL是在多线程中的全局解释锁
      image-20220608152116212

12.3.2 GIL解决方案

image-20220607145926495
image-20220607145937048
image-20220608153609589
image-20220608153553691

  • 小结–通过胶水c语言,绕过cpython的GIL锁,解决历史遗留问题(单核)
    image-20220608153632716

12.4 深浅拷贝

12.4.1 可变与不可变

  • 当发现目前分配空间不足储存,是可以拓展(可变),还是需要另找一块地方存储(不可变
    • 字典和列表都可以往里追加新内容,是可变类型
    • 不可变:数字、字符串、元组
      image-20220608154134414
      image-20220608154158798
      image-20220608154208334

12.4.2 简单可变类型深、浅拷贝

为保证数据的独立性,在开发中,我们希望两个变量值一样,而且互不影响,使用拷贝技术;

  • 1、python中深浅拷贝

python中的copy模块,可以实现拷贝功能;

  • 2、浅拷贝

    • 引用(地址)拷贝,并没有产生新的空间,如果拷贝的是对象,原对象和copy对象都指向同一个内存空间,只拷贝父对象,不会拷贝对象的内部的子对象;

    • 用法:copy.copy(变量)会进行拷贝

  • 3、深拷贝

    • 会产生新的空间,如果拷贝的是对象,原对象和copy对象都指向不同的内存空间,会拷贝对象及其子对象(会产生新的空间);

    • 用法:copy.deepcopy(变量名)

  • 4、作用

    • 减少内存使用;
    • 数据清洗、修改或者入库的时候,对原数据进行复制一份,以防数据修改之后,找不到原数据;
      image-20220608160936900
      image-20220608160944747
  • 小结
    image-20220608162550474

12.4.3 复杂可变类型深、浅拷贝

image-20220608161001817
image-20220608161014412
image-20220608161025778

  • 小结
    image-20220608162610584

12.4.4 简单不可变类型深、浅拷贝

image-20220608164650969
image-20220608164704152

  • 小结

    • 不管深浅拷贝,都是引用,都是浅拷贝

12.4.5 复杂不可变类型深、浅拷贝

image-20220608164717329
image-20220608164730577
image-20220608164741383
image-20220608164751144

  • 小结–深拷贝取决于绿色框的类型,可变就会深拷贝
    image-20220608165620909

12.4.4 切片拷贝、字典拷贝

  • 1、切片拷贝
    • 简单可变是深拷贝
      image-20220609120632713
  • 2、字典拷贝
    • 字典自带一个copy是浅拷贝;
  • image-20220609121615841
    image-20220609120654587
    image-20220609120700600
  • 小结
    image-20220609120949427

总结:

1)切片拷贝,本身为浅拷贝,但如果是简单可变,就会开辟新空间,与深拷贝行为一样;

2)字典拷贝,自带的copy,均为浅拷贝;

3)简单可变类型:深,浅拷贝都是深拷贝;

4)复杂可变类型:浅拷贝底层数据不变;深拷贝,会执行深拷贝;

5)简单不可变类型:深、浅拷贝都是浅拷贝;

6)复杂不可变类型:浅拷贝取决于外层不可变,就是浅拷贝,深拷贝取决嵌套类型,嵌套可变就是深拷贝;

13 Python高级语法专题2

13.1 import

13.1.1 import导入模块路径

知道如何导入指定目录下的模块

  • 1、import搜索路径
    image-20220610134050055
  • 2 程序执行时添加新的模块路径
    image-20220610134137424
    image-20220610134143570
  • 小结
    image-20220610135534524

13.1.2 reload加载问题

说出reload作用

  • 1、重新导入模块
    image-20220610134326734
    image-20220610140842677
  • 尝试再次导入模块,发现依然无法正确获得修改后的模块内容;
  • 原因:
    • 第一次import模块后,模块被导入到当前文件,第二次再使用import导入同一个模块,第二次导入将不会起作用,这是Python解释器的规则,避免重复导入一个模块带来的其它问题。
  • 解法方案;
    • 想办法重新加载一次模块
      image-20220610141134653
  • 小结
    image-20220610141810910

13.1.3 from import的私有化问题

image-20220610142217901
image-20220610142236489

  • 小结
    image-20220610142538490

13.1.4 import和from import的区别

image-20220610142646947
image-20220610142723536
image-20220610142733871
image-20220610142741142

  • from girl import * 其实是将其拷贝了一份变量

  • 小结
    image-20220610150058227

13.2 拆包与继承

13.2.1 拆包

  • 1、拆包引入

拆包:对于函数中的多个返回数据,去掉元组,列表或者字典,直接获取里面数据的过程;
image-20220611121801920
image-20220611142922977

  • *因为传过来的就是,两个复杂数据类型,没有字典做对应的key值,a=100,b=200这种形式,所以需要改为func01(args, * *kwargs);

image-20220611121816638

  • 小结
    • 可变参数*args, * * kwargs默认会有封包过程;
    • 如果想要继续以单数传递到下一个函数,传递的过程必须集上* * *,func( * args, * * kwargs);

13.2.2 单继承中的super()

单继承中super()使用注意

  • 1、单继承中super
    image-20220611143449933
    image-20220611144956274
  • 小结
    image-20220611145011744

13.2.3 多继承以及MRO顺序

  • 学习目标
    • 多继承特征;
    • MRO顺序的作用;
    • super的作用;
  • 1、单独调用父类的方法
    image-20220611145309432
    image-20220611145359217
    image-20220611145408297
  • 2、使用super()调用父类方法
    image-20220611145431133
  • super()调用一次就可以了,会自动执行父类的Init()
  • 注意,因为不同的多父类继承,每个父类的Init()参数不一样,就需要*args,和 * * kwargs了
  • 使用super()可以避免父类被多次调用初始化,万一是文件被多次打开,造成资源泄露问题;
    image-20220611145445244
    image-20220611145454331
    image-20220611145504083
  • 补充题:
    image-20220611153546977
  • 小结
    image-20220611153612913

13.3 property

13.3.1 property基本使用

之前定义类属性,一般会定义另外的类方法用于修改属性,不会直接暴露属性,是通过方法调用,而property就是将这一过程简化一些

property是一个特殊的装饰器,像使用属性一样使用方法

  • 1、property属性
    image-20220611153917568
    image-20220611153925148
  • 2、简单实例
    image-20220611153943071
    image-20220611153950978
  • 小结
    image-20220612171056245

13.3.2 property其他使用方式

  • 学习目标
    • 知道@xxx.setter的作用;
    • 知道@xxx.deleter的作用;
  • 1、装饰器方式
    image-20220611154127764
    image-20220611154136307
  • 小结
    image-20220612173224326

13.3.3 property作为类属性

  • 1、类属性方式,创建值为property对象的类属性
    image-20220611154206835

BAR=property(get_bar)是创建了一个property对象给BAR
image-20220612174217281
image-20220612174309637

  • 小结
    image-20220612174525543

13.4 魔法属性与方法

  • 学习目标
    • 知道__ doc __魔法方法的作用;
    • 知道__ module __、 _ _class _ _魔法方法的作用;
    • 知道 __ init __魔法方法的作用;
    • 知道 __ del __ 魔法方法的作用
    • 知道 __ call __魔术方法的作用;
    • 知道 __ dict _ _魔术方法的作用;
    • 知道 __ str __魔术方法的作用;
    • 知道__ getitem __、 _ _setitem _ _、 _ _ delitem _ _ 魔法方法的作用;
  • 1、魔法属性和方法概览
    image-20220612192155051
    image-20220612192206660
    image-20220612193955597
    image-20220612192221489

__ dict __返回实例属性(init里的)的信息,返回一个字典

类调用就是返回类属性信息,对象调用就返回实例属性,对象信息
image-20220612192235325
image-20220612192242878

  • 小结
    image-20220612194216919

13.5 with上下文管理器

  • 学习目标
    • 说出使用with的好处;
    • 能够自定义符合with规范的上下文管理类;
  • 1、使用with的作用
    image-20220612201621202
    image-20220612201634050
    image-20220612201642656
    image-20220612203212312
    image-20220612203445334
    image-20220612201738605
    image-20220612201747920
    image-20220612204526979
  • 小结
    image-20220612204216928
    image-20220612205125349

14 miniWeb框架

14.1 框架概念

  • 学习目标
    • 知道静态资源和动态资源;
    • 说出web服务器的作用
  • 1、框架和web服务器的关系

web服务器主要是接收用户浏览器的请求,根据用户的资源请求返回不同的资源;
image-20220613155041142

  • 2、重要概念
    image-20220613155110099
    image-20220613155117443

14.2 minWeb基础框架构建

  • 学习目标
    • 说出如何实现访问.py和访问.html访问不同的内容
      image-20220613155240200
  • 1、Web服务器基础代码
    image-20220613155325821
    image-20220613155337324
    image-20220613200303897
    image-20220613155357007
  • 小结
    image-20220613200049562

14.3 minWeb框架构建-动态显示

  • 学习目标
    • 根据客户端不同的动态页面请求,做不同的内容响应
      image-20220613200159740
  • 1、代码实现
    image-20220613200225938
    image-20220613200236454
    image-20220613200324347
    image-20220613204001275
    image-20220613200340083

14.4 路由(列表django,装饰器flask)

14.4.1 路由列表(django)

  • 学习目标
    • 说出路由的作用
  • 1、概念
    image-20220613204114195
    image-20220613204128893
    image-20220613204137030
    image-20220613204149801
    image-20220613204203052
    image-20220613204215103
    image-20220613204223684

  • 存放的是函数引用,函数引用=字典【key】,再调用

  • 小结
    image-20220613210541634
    image-20220613210559319

14.4.2 路由装饰器(flask)

  • 学习目标
    • 使用装饰器路由自动添加路径数据
  • 1、装饰器路由

    • 使用装饰器工厂函数接收路径参数,进而实现装饰器路由
  • 2、代码实现
    image-20220613211329759

image-20220613211341138
image-20220613211351547
image-20220613211400393
image-20220613211408082
image-20220614115940013

  • 小结
    image-20220614121911364

14.5 选股系统

14.5.1模板替换

  • 1、代码实现
    image-20220614135345285
    image-20220614135358025
    image-20220614135406316
  • 小结
    image-20220614135431107

14.5.2 股票信息-数据加载1

  • 学习目标
    • 创建数据库、导入数据
    • 使用pymysql模块操作数据库
  • 1、核心思路

    • 使用pymysql模块连接数据库,并查询数据库中的数据,显示到页面上

    • 1、准备数据库;

      2、改进index()函数,连接数据库;

      3、把数据库中的数据显示到网页中;

  • 2、准备案例所需数据

image-20220614140117360
image-20220614140128763
image-20220614140147059
image-20220614140153501

  • 小结

image-20220614140216262

  • 小结
    在这里插入图片描述

14.5.3 股票信息-数据加载2

  • 学习目标
    • 优化显示效果
  • 1、代码实现
    image-20220614140249443
    image-20220614140259049
  • 小结
    在这里插入图片描述

14.5.4 个人中心-数据加载

  • 学习目标
    • 利用多表关联查询,获取数据并且显示出来
      image-20220614140338979
      image-20220614140350183
      image-20220614140357493
      image-20220614140409322
  • 小结
    在这里插入图片描述
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-06-20 22:59:42  更:2022-06-20 23:00:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 14:08:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码