一、可迭代对象、迭代器对象和生成器

像list, tuple等这些序列是可以使用for...in ...语句来进行遍历输出的。这是为什么呢?这就需要知道可迭代对象(Iterable)、迭代器对象(Iterator)和生成器对象(Generator)了。

1.什么可迭代对象?

把可以通过for...in...这类语句迭代读取一条数据供我们使用的对象。

2. 可迭代对象的本质?

可迭代对象通过__iter__方法向我们提供一个迭代器,我们在迭代一个可迭代对象的时候,实际上就是先获取该对象提供的一个迭代器,然后通过这个迭代器来依次获取对象中的每一个数据。

也就是说可迭代对象必须要有__iter__()方法

3.iter()函数与next()函数的作用是什么?

通过iter()函数获取可迭代对象的迭代器。

然后我们可以对获取到的迭代器不断使用next()函数来获取下一条数据。当我们已经迭代完最后一个数据之后,再次调用next()函数会抛出StopIteration异常,

来告诉我们所有数据都已迭代完成,不用再执行next()函数了。

4.什么是迭代器对象?

一个实现了__iter__方法和__next__方法的对象,就是迭代器。

5. 什么是生成器?

简单来说:只要在def中有yield关键字的 就称为生成器

6.yield的作用是什么?

yield关键字有两点作用:

(1).保存当前运行状态(断点),然后暂停执行,即将生成器(函数)挂起

(2).将yield关键字后面表达式的值作为返回值返回,此时可以理解为起到了return的作用

Python2中的原生协程就是使用yield关键字,但在Python3中是使用了yield from。

7.如果启动生成器?

send():除了能唤醒生成器外,还可以给生成器传递值;

next():单纯的获取生成器中的一个值。

二、GIL

前言:了解Python的都知道,在Python中多线程并不是真正意义上的多线程。那为什么在Python中多线程的威力没有像其他语言那样大呢?

1.GIL全称是全局解释器锁,保证了同一时刻只有一个线程在执行。

2.作用:在单核的情况下实现多任务!这在当时非常厉害的技术。

3.产生问题的原因:一个CPU分配给一个进程,进程的线程使用GIL进行资源抢夺。在多核情况下,会使其他核空闲,CPU的利用率不高。

4.解决方案:

1). 使用其他解释器,如JPython(但是太慢了,不好!)。因为只有在CPython中才存在GIL。

2). 使用其他语言(C/Java)来写多线程这部分代码

3). 使用多进程+协程的方式。(推荐的方式,很高效)!

三、浅拷贝VS深拷贝

深拷贝(deepcopy):它是一种递归的方式拷贝某个对象,单独形成一个新对象。这种方式很浪费资源。使用from some_moudle import xx 就是一种深拷贝的方式!

浅拷贝(copy):它支复制一层信息,占用的资源少!而且大部分的形式都是一浅拷贝的方式!

深拷贝示意图:

浅拷贝示意图:

四、面向对象总结:

1.私有化

(1).x:公有变量;

(2)._x:单个前置下划线,私有化方法或属性,from some_module import *是不能导入的,只有类和对象可以访问;

(3).__x:双前置下划线,避免与子类中的属性命名冲突,外部无法访问,但是可以通过特殊的方式(obj._类名__xx)访问到

(4).__x__:双前后下划线,用户名字空间的魔法方法后属性。最好不要用这种命名方式!

(5).x_:单后置下划线,用于避免与Python关键词冲突!不要使用哦!

2.封装

一个功能一个函数,把相关函数封装成一个类对象。好处是代码可以复用,让代码更加清爽!

3.继承:

多个子类拥有相同的功能,然后把相同的函数放到父类中,通过子类的方式继承下来。好处是代码复用。

4.多态:

(1).必须要有继承;

(2).不同对象调用同一个函数,会有不同的表现形式;

(3).Python中的多态并不是严谨的多态,因为没有做类型检查!

5.类与实例对象之间的关系:

6.面向函数编程 VS 面向对象编程:

面向函数编程:一个功能,一个函数。

面向对象编程:把相关函数封装成一个类对象。

五、模块导入与路径搜索

1.动态导入:

(1). import module;

(2). __import__("some_module")

这两种方式是一样的!

2.路径搜索:

在导入某个模块时,会在sys.path()中搜索目标模块。如果找到了,那么就停止搜索,否则一直找到最后!

3.重新加载模块

from imp import reload,reload函数的好处是当导入的某个模块做了修改时,又不想通过关机来重新导入,而是进行热更新,就能获取到修改后的值!

六、类中方法总结

1.魔法方法

(1). __init__:用于初始化对象

(2). __new__:用于创建对象

(3).__call_:使对象变得可调用

(4). __dict__:把类中的属性组成一个字典,属性名作为key, 属性值作为value

(5).__class__:用于查看对象是由哪个类创建的

2.super():

当有多个类发生继承关系时,Python内部会维护着一张继承表(通过__mro__可以查看)。super()在当前继承表中找到自己的位置,然后执行下一个类的__init__方法。

七、上下文管理器(ContextManager)

在很多时候,我们都会看到with open(filename, 'w') as f:pass,这种操作文件的方式。这种操作的好处就是我们不需要手动调用f.close()来关闭我们打开的文件。这是为什么呢?

任何一个上下文管理器对象都可以使用with关键字来操作。什么是上下文管理器呢?

只要实现了__enter__()和__exit__()方法的类就是上下文管理器!

__enter__():返回资源对象。

__exit__():在操作完成之后,进行清除工作。如关闭文件

连接数据库的上下文管理器:

第一种方式:

第二种方式:

python知识点总结全_【转】Python高级知识点总结相关推荐

  1. 西安把python需要纳入课堂_西安Python测试开发全栈核心课程

    从初级的手工测试到.顶端的测试开发,大家都希望能不断的进行技术的提升,而就目前的现状而言,在企业内部不愿意花费成本去进行高级人才的培养,企业更愿意花高薪招聘高级技术人才,而我们希望能够在工作中不断提升 ...

  2. python 预编译加速_让Python代码运行更快的最佳方式

    Python因其强大.灵活且易于使用等特性,而赢得了声誉.这些优点使其在各种各样的应用程序.工作流程和领域中得到了广泛应用.但是就语言的设计,也就是它天然的解释能力还有它的运行时的动态性而言,Pyth ...

  3. python大数据免费_用python做大数据

    不学Python迟早会被淘汰?Python真有这么好的前景? 最近几年Python编程语言在国内引起不小的轰动,有超越Java之势,本来在美国这个编程语言就是最火的,应用的非常非常的广泛,而Pytho ...

  4. 以下选项中python用于异常处理结构_《Python 程序设计》复习题

    目录 填空题 一.基础知识 二.序列 三.选择结构与循环结构和函数及面向对象.文件 选择题 一.Python 基础语法 二.基本数据类型 三.程序的控制结构 四.函数和代码复用 五.组合数据类型 六. ...

  5. python如何办公自动化培训_用python进行办公自动化都需要学习什么知识呢?

    这可能是很多非IT职场人士面临的困惑,想把python用到工作中,却不知如何下手? python在自动化办公领域越来越受欢迎,批量处理简直是加班族的福音. 自动化办公无非是excel.ppt.word ...

  6. python简易计算器报告_用 Python 实现简易计算器 ( 下 )

    上一篇讲了 用 Python 实现一个计算器的前期准备,从新建项目到 PyQt5安装.配置和使用,最后完成了一个比较丑的计算器界面布局. 本篇文章开始详细讲解后续实现计算器功能的讲解. 主要涉及的知识 ...

  7. 如何用python编程机器人培训班_如何Python入门

    如何Python入门 来源:合肥童程童美少儿编程机器人培训学校时间:2020/10/30 17:22:49 学习编程没有捷径.在开始的时候,即使你打一个字,也比你什么都不做只看书要好. Python语 ...

  8. python制作软件界面_使用Python制作一个带GUI界面的词云自动生成工具(一)

    在现实生活中你可能会遇到这种情况:想知道一篇论文中哪个词语最多,哪些词语最少(以此判断文章的主要内容):想知道一部小说中哪一个人物出现的次数最多(当然,出现次数最多的那个人也不一定是主脚):想知道一部 ...

  9. python自动化测试教学反思_学习python自动化测试月半总结

    记得上月24号来培训班上课(不推荐培训班,只讲经历),感觉回到了上学的时代,我们一班一共17个人,来这里的原因都大抵相同,所以说也是一种缘分吧,我向来是个认人很慢的人,第一天连班里的同学名字都没记全. ...

最新文章

  1. JavaScript初学者编程题(23)
  2. 07-图6 旅游规划 (25 分)
  3. 关于table的中元素对齐方式的注意点
  4. ZooKeeper Programmer's Guide(3.4.6)英文快读
  5. 记一次ElasticSearch重启之后shard未分配问题的解决
  6. 官网Tensorflow 移动开发流程
  7. 关于html5音频如何应用及解决方法?
  8. No input file specified的解决方法
  9. Linux stat命令和AIX istat命令 (查看文件修改时间)
  10. 安徽蚌埠市国家计算机等级考试官网,2019年下半年安徽省蚌埠市全国计算机等级考试费用...
  11. 在Windows平台使用SSH连接Linux服务器
  12. Android基础篇1:Activity
  13. layui,返回的数据不符合规范,正确的成功状态码 (code) 应为:0
  14. ReactiveCocoa之UI篇
  15. eclipse重定向输入输出到文件
  16. excel index 函数
  17. rust使用vec在遍历时删除元素
  18. 微命令、微操作、微指令、微程序
  19. 中国石油大学(北京)-《 完井工程》第三阶段在线作业
  20. 获取webservice(wsdl)数据包

热门文章

  1. 每天读5分钟,受益匪浅、
  2. PHPsymfony
  3. 调查称HTML5获多数开发者支持 亚太最高
  4. Oracle存储过程中跳出循环的写法
  5. Flex与.NET互操作(十四):FluorineFx的AMF协议通信
  6. 四道微软面试经典算法题
  7. Repeater 操作HeaderTemplat或FooterTemplat模板中控件
  8. web计算机导论读书报告,计算机导论 读书报告.doc
  9. docker compose 停止_Docker-Compose 基础与实战,看这一篇就够啦
  10. php Xdebug的安装与使用详解