一.什么是生成器? 生成器可以理解成是一种数据类型,特殊地是生成器可以自动实现迭代器协议其他的数据类型需要调用自己内置的__iter__方法所以换种说法,生成器就是可迭代对象 !回忆:很重要的迭代器协议 对象必须提供一个 next 方法,执行该方法要么返回迭代中的下一项,要么就引起一个Stoplteration异常,以终止迭代(只能往后走不能往前退) 二.生成器的分类(两类) python中生成器的表现形式 python中提供生成器的方式 一类是生成器函数:另一类是生成器表达式 第一类:关于生成…
打开文件的模式(二) 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码.图片文件的jgp格式.视频文件的avi格式) rb:   以字节方式读文件 wb: 以字节方式写文件ab: 以字节方式追加文件 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,所以不能指定编码 1. rb #错误举例 f = open ('test1.py', 'rb', encoding = 'utf…
规则一: 一个python文件中,只写一些可以运行的功能测试代码写在这句代码下面 if __name__ =='__main__': 在讲这边的时候,我不是很懂参考了一篇博客,地址如下:http://blog.konghy.cn/2017/04/24/python-entry-program/ 简单来理解,可以把    if __name__ =='__main__':     理解为python程序的入口 对于很多编程语言来说,程序都必须要有一个入口,比如 C,C++,以及完全面向对象的编程语…
装饰器 一.装饰器的本质 装饰器的本质就是函数,功能就是为其他函数添加附加功能. 利用装饰器给其他函数添加附加功能时的原则: 1.不能修改被修饰函数的源代码        2.不能修改被修饰函数的调用方式 举例:计算以下一段程序执行时间 #程序:计算0—19的和 def cal(l): res = 0 for i in l: res += i return res print(cal(range(20))) #给上述程度增加时间模块 import time def cal(l): start_t…
通过一个任务来加深对装饰器的理解和应用 回顾:装饰器的框架 def timmer(func): def wrapper(): func() return wrapper 任务:给以下正在运行的程序加一个验证功能的装饰器正在运行的程序加一个验证功能的装饰器 def index(): print('欢迎来到京东主页') def home(name): print('欢迎回家%s' %name) def shopping_car(name): print('%购物车里有[%s,%s,%s]' %(na…
写在前面: 第二天的学习,感觉比昨天学习相对轻松一些,但是对于我这个编程语言功底很弱的人来说,还是稍稍微有些.....哈尔滨的天气一天天冷了下来,还飘着小雨,不过还是挺有意境的.充实而又忙碌的生活,让我觉得幸福感十足.每天上午看视频学习,下午总结.自己练习.今日份的鸡汤,所有看上去厉害的事情都是由一件件不起眼的小事构成的呢!加油啦 一.Python 学习及开发环境(pycharm)安装与配置 视频讲课老师说这个很好用,至于安装很简单,就是去 http://www.jetbrains.com/py…
迭代器 1.迭代器协议 对象必须提供一个 next 方法,执行该方法要么返回迭代中的下一项,要么就引起一个Stoplteration异常,以终止迭代(只能往后走不能往前退) 2.可迭代对象 实现了迭代器协议的对象(如何实现:对象内部定义一个_iter_()方法) 协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如 for循环,sum,min,max函数等)使用迭代器协议访问对象 3.关于for循环机制 for循环的本质:循环所有对象,全都是使用迭代器协议 思考:for 循环的…
生成器的一些补充 接着下鸡蛋和吃包子! 补充一:生成器只能遍历一次 (总是把生成器比喻成母鸡下鸡蛋,需要一个下一个,首先是下出来的鸡蛋不能塞回母鸡肚子里,其次是一个母鸡一生只能下一定数量的鸡蛋,下完了就死掉了) #通过程序来理解什么意思 #程序一: def test(): for i in range(2): yield i t = test() for i in t: print(i) t1 =(i for i in t) print(list(t1)) #执行结果 0 1 [] #程序分析…
前向引用 风湿理论(函数即变量) 理论总是很抽象,我个人理解: 代码从上到下执行,一旦遇到定义的函数体,内存便为其开辟空间,并用该函数的名字作为一个标识但是该函数体内具体是什么内容,这个时候并不着急去读取而是在程序中需要调用执行该函数时,去执行该函数内的具体内容如果一个函数还未开辟内存空间就先调用,就会报错这也很好理解,因为程序都不知道这个函数放在哪里,也不知道该函数的标识是什么,自然也不知道去哪里找它啊 我们来通过分析一个程序来看看具体含义吧 name = 'xhg' def name1():…
写在前面: 昨天早睡之后,感觉今天已经恢复了百分之八十的样子 又是活力满满的小伙郭 今日份鸡汤: 我始终相信,在这个世界上,一定有另一个自己,在做着我不敢做的事,在过着我想过的生活.-------宫崎骏 函数 一.函数出现的背景 在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复制到现需功能处,如下: while True: if cpu利用率 > 90%: #发送邮件提醒 连…