2021黑马python大数据吾爱破解黑马python5.0资料解压密码
下载地址 https://share.weiyun.com/dHvWwF1o
资料目录 黑马程序员python入门教程19天(美女讲师版) 包含:视频课程-python从0开始学编程(day1-day19) 课件+代码资料-python从0开始学编程(day1-day19) 黑马python基础班代码和课件资料 黑马python就业班代码和课件资料 黑马python基础班视频课程 包含:1-1 Linux基础(119个视频) 1-2 python基础(234个视频) 1-3 面向对象(91个视频) 1-4 项目飞机大战(42个视频) 黑马python就业班视频课程 包含:01 网络编程 02 多任务 03 web服务器v3.1 04 Python高级语法v3.1 05 MySQL数据库v3.1 06 mini-web框架v3.1 07 HTML和CSS 08 首页布局案例和移动布局 09 JavaScriptv 10 jQuery和js库 11 Django框架 12 git版本管理 13 redis数据库 14 天天生鲜Django项目 15 flask框架 16 微信公众号 17 爱家租房项目 18 通用爬虫模块使用 19 MongoDB数据库 20 爬虫scrapy框架及案例 21 数据分析 22 机器学习 23 深度学习 24 数据结构和算法 25 Python网络爬虫 26 机器学习入门篇 27 机器学习入门篇2 28 机器学习提升篇 29 数据挖掘篇 30 深度学习必备原理与实战 31 深度学习必备原理与实战2 32 深度学习必备原理与实战3 33 深度学习必备原理与实战4 34 深度学习项目实战 35 深度学习项目实战2 36 深度学习项目实战3 举例 __iter__() 类型是list、tuple、file、dict的对象有__iter__()方法,标志着它们能够迭代。这些类型都是Python中固有的,我们能不能自己写一个对象,让它能够迭代呢? 当然可以。 #!/usr/bin/env python # coding=utf-8 class MyRange(object): def __init__(self, n): self.i = 0 self.n = n def __iter__(self): return self def next(self): if self.i < self.n: i = self.i self.i += 1 return i else: raise StopIteration() if __name__ == "__main__": x = MyRange(7) print "x.next()==>", x.next() print "x.next()==>", x.next() print "------for loop--------" for i in x: print i 将代码保存并运行,结果是: $ python 21401.py x.next()==> 0 x.next()==> 1 ------for loop-------- 2 3 4 5 6 以上代码的含义,是自己仿写了拥有range()的对象,这个对象是可迭代的,分析如下。 (1)__iter__()是类中的核心,它返回了迭代器本身,实现了__iter__()方法的对象,即意味着其可迭代。 (2)含有next()的对象就是迭代器,并且在这个方法中,在没有元素的时候要发起StopIteration()异常。 对以上类的调用换一种方式: if __name__ == "__main__": x = MyRange(7) print list(x) print "x.next()==>", x.next() 运行后会出现如下结果: $ python 21401.py [0, 1, 2, 3, 4, 5, 6] x.next()==> Traceback (most recent call last): File "21401.py", line 26, in <module> print "x.next()==>", x.next() File "21401.py", line 21, in next raise StopIteration() StopIteration 说明什么呢?print list(x)将对象返回值都装进了列表中并打印出来,这个正常运行了。最终,指针移动到了迭代对象的最后一个,next()方法没有检测,也不知道是不是要停止了,它还要继续下去,当继续下一个的时候,才发现没有元素了,于是返回了StopIteration()。 为什么要用这种可迭代的对象呢?就像上面的例子一样,列表不是挺好的吗? 列表的确非常好,在很多时候效率很高,并且能够解决很多普遍的问题。但是,不要忘记,在某些时候,列表可能会给你带来灾难。因为在你使用列表的时候,需要将列表内容一次性都读入到内存中,这样就增加了内存的负担。如果列表太大,就有内存溢出的危险了,这时候就需要迭代对象。比如斐波那契数列: #!/usr/bin/env python # coding=utf-8 __metaclass__ = type class Fibs: def __init__(self, max): self.max = max self.a = 0 self.b = 1 def __iter__(self): return self def next(self): fib = self.a if fib > self.max: raise StopIteration self.a, self.b = self.b, self.a + self.b return fib if __name__ == "__main__": fibs = Fibs(5) print list(fibs) 运行结果是: $ python 21402.py [0, 1, 1, 2, 3, 5] 给读者一个思考问题:要在斐波那契数列中找出大于1000的最小的数,能不能在上述代码的基础上改造得出呢?
|