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

像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__():在操作完成之后,进行清除工作。如关闭文件

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

第一种方式:

from pymysql import connectclass DBHelper: def __init__(self): self.conn = connect(host='localhost', port=3306, user='user', password='password', database='database', charset='utf8') self.csr = self.conn.cursor() def __enter__(self): return self.csr def __exit__(self, exc_type, exc_val, exc_tb): self.csr.close() self.conn.close()with DBHelper() as csr: sql = """select * from table;""" csr.execute(sql) all_datas = csr.fetchall()for item in all_datas: print(item)

第二种方式:

@contextmanagerdef conn_db(): conn = connect(host='localhost', port=3306, user='user', password='password', database='database', charset='utf8') csr = conn.cursor() yield csr csr.close() conn.close()with conn_db() as csr: sql = """select * from table""" csr.execute(sql) all_datas = csr.fetchall()for item in all_datas: print(item)

*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

觉得不错,点个“在看”然后转发出去

黑马程序员python笔记_三年Python程序员平时学习笔记总结,对于学习Python非常有帮助...相关推荐

  1. 在线python视频教程_【好程序员】2019 Python全套视频教程2

    2019千锋好程序员全新Python教程,深入浅出的讲解Python语言的基础语法,注重基本编程能力训练,深入解析面向对象思想,数据类型和变量.运算符.流程控制.函数.面向对象.模块和包.生成器和迭代 ...

  2. 怎样保存python源程序_五分钟教会你如何编写、保存与运行 Python 程序

    第一步 接下来我们将看见如何在 Python 中运行一个传统的"Hello World"程序.Python教程本章将会教你如何编写.保存与运行 Python 程序. 通过 Pyth ...

  3. 掷骰子python代码_通过构建一个简单的掷骰子游戏去学习怎么用 Python 编程

    不论是经验丰富的老程序员,还是没有经验的新手,Python 都是一个非常好的编程语言. Image by : opensource.com Python 是一个非常流行的编程语言,它可以用于创建桌面应 ...

  4. python代码_抢球鞋?预测股市走势?淘宝秒杀?Python表示要啥有啥 - 街角的守望。...

    球鞋那么难抢,有没有抢限量版球鞋的神器? 每当限量版球鞋开售的时候,几十万人一拥而入,能抽中的却是少数. 朋友圈刷到别人中标的消息,心里又羡慕又有点酸......这种时候只能去找黄牛了. 黄牛党都是靠 ...

  5. 计算机语言python发音_最难学的七大编程语言,VB 第一,Python垫底,看你学的排第几...

    原标题:最难学的七大编程语言,VB 第一,Python垫底,看你学的排第几 在很多人眼里程序员的标配就是黑框眼镜+格子衫+双肩包+牛仔裤+运动鞋,拥有了这些可能就被判定为一个程序员. 而如何判定一个程 ...

  6. python箴言_字字箴言:为什么我劝你别盲目追风 Python?

    Python的火不容置疑! 2018年起,凭借应用广效率高的特点,Python将 Java 和 C++甩出身后,很多人开始学习Python,那么你跟风了吗? 笔者整理一些内容,希望能帮你有效辨别,你是 ...

  7. 机器人编程python代码_自己动手开发智能聊天机器人完全指南(附python完整源码)...

    一.前言 人工智能时代,开发一款自己的智能问答机器人,一方面提升自己的AI能力,另一方面作为转型AI的实战练习.在此把学习过程记录下来,算是自己的笔记. 二.正文 2.1 下载pyaiml 下载pya ...

  8. 高一信息技术课件python编程_教科版高中信息技术选修第一章第三节Python入门--奇妙曲线的绘制 课件(22张ppt) 教案 (2份打包)...

    ID:10986924 资源大小:11671KB 资料简介: 教学设计 [课程标准要求] 体验算法思想,了解算法和程序设计在解决问题过程中的地位及作用:能从简单的问题出发,设计解决问题的算法,并能初步 ...

  9. 风变编程python助教_花30天时间,学完了风变编程Python基础语法课

    原标题:花30天时间,学完了风变编程Python基础语法课 20节实打实的课程,1个月时间,我终于学完了风变编程的Python基础语法课.刚开始学的时候,就有人问我感受怎么样,当时本着未知全貌不予置评 ...

  10. jp摩根的人都在学python么_摩根大通已要求所有资管部门员工必须学习编程

    当代最具竞争力的技能是什么?摩根大通CEO告诉你---编程.今年新加入摩根大通的全部资产管理分析师必须强制学习编程语言,Python. 摩根大通资管经理Mary Callahan Erodes表示&q ...

最新文章

  1. centos7 设置中文
  2. 如何使用NAnt 自动打包DNN模块 之二
  3. string转object对象_025:听闻你精通面向对象,来解决一下
  4. Windows10安装并使用Unity3D项目AirSim教程(附问题解决方案及相关库下载)
  5. CSS3菜单栏透明兼容问题
  6. U-Boot 之五 详解 U-Boot 及 SPL 的启动流程
  7. 查找二叉树(信息学奥赛一本通-T1367)
  8. lambda方法引用总结——烧脑吃透
  9. Error:express-session deprecated undefined resave option; provide resave option app.js:17:10
  10. 站内搜索(ELK)之数据表字典类型字段的索引思路
  11. Android中将EditText里面的内容设置成任意想要的状
  12. Android之BInder分析
  13. IOCP中多次投递WSASend
  14. ipv6转ipv4 NAT64与DNS64基本原理概述
  15. 数字基础设施可视化管理,任重而道远
  16. yum报Exiting on user cancel
  17. 信号积分变换的公式推导以及几个例子
  18. Design a Facebook NewsFeed
  19. 用 GTK 来写 Hello World
  20. java游戏项目分享,适合的零基础java项目,提高你的代码能力

热门文章

  1. C++基础02-C++对c的拓展
  2. 【Linux】linux服务器下包管理器
  3. 【文章】人的好运从哪里来?
  4. python中对文件进行读和写
  5. Centos6.6升级python2到python3
  6. 【WS-Federation】到底有多少公司在用WS-Federation
  7. 上周热点回顾(5.26-6.1)
  8. iOS定位服务与地图开发(3)---地理信息编码查询
  9. springcloud不使用数据库微服务启动异常解决
  10. 10 3 java_10.3 UiPath如何调用Java