本文目录一览:
Python学习之惰性求值
惰性求值,也就是延迟求值,表达式不会在它被绑定到变量之后就立即求值,而是等用到时再求值。这个特性可以解决一些巨大甚至无限的集合列表,如菲波那切数列、几十G的文件等等。延迟求值的一个好处是能够建立可计算的无限列表而没有妨碍计算的无限循环或大小问题。
Python 中的很多方法没有直接返回列表,而是返回了一个可迭代的generator
(生成器)对象,这便是python的惰性求值,因为在创建一个很大的列表时,对内存的开销非常大,太大时python会直接报错,举个:chestnut::range()方法是产生一个指定范围列表,在Python3之前,该方法直接产生一个列表,xrange() 产生一个生成器:
xrange(100)
xrange(100)
range(100)
[0, 1, 2, 3,
4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
当参数里面的值足够大时,range()产生了一个巨大的列表,这是内存会吃不消,等待一段时间后程序会直接被Kill掉:
for i in range(999999999999):
...
print i
...
Killed:
9
占满内存
用xrange() 方法就不回出现这种问题,并且可以一直运行:
for i in xrange(999999999999):
...
print i
...
1
2
3
4
5
6
7
8
9
10...
在Python3中range已经被改为了xrange,所以在python3中可以放心使用range().
惰性求值不要求你事先准备好整个迭代过程中所有的元素。迭代器仅仅在迭代至某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁
还有前文所说的list comprehension语句,在两边放上[],会产生别表,如果数据源很长则会报内存错误:
print [i for i in range(9999999999999999)]
Python(1627,0x7fffe5b713c0)
malloc: *** mach_vm_map(size=80000000000000000) failed
(error code=3)
*** error:
can't allocate region
*** set a
breakpoint in malloc_error_break to debug
Traceback
(most recent call last):
File "",
line 1, in /spanmodule
MemoryError
这样直接产生列表没有效率,为了创建生成器对象,可以在list
comprehension两边放上(),这样它就有了惰性求值的特性。
print((i for i
in range(99999999999999)))
使用next()内建函数访问生成器里的元素:
num =
(i for i in range(5))
num
next(num)
next(num)
1
for j in range(4):
...
print(next(num))
...
2
3
4
Traceback
(most recent call last):
File "",
line 2, in /spanmodule
StopIteration
当访问到最后元素时,再调用next(),Python将会抛出StopIteration异常。Python正是根据是否检查到这个异常来决定是否停止迭代。
step1 =
someLongOperation1()step2 = someLongOperation2()step3 =
concatenate(step1, step2)
以上代码需要分别执行一二两步操作,第三步用到一二两步的结果,在Pyhton中会有序的执行这些函数:首先是 someLongOperation1,然后 someLongOperation2,最后 concatenate,如果确保没有函数修改或依赖于全局变量,第一二步可以被并行执行。假设我们不想并行运行这两个函数,我们只在其他函数依赖于 step1 和 step2 时才需要执行这两个函数。我们甚至在concatenate 调用之前都不必执行他们,可以把他们的求值延迟到 concatenate 函数内实际用到他们的位置。如果函数中用到了if分支语句,条件无关step1和step2则可以尽量将判断条件放前面以减少不必要的计算:
step1 =
someLongOperation1()
step2 =
someLongOperation2()if condition:
step3 =
concatenate(step1, step2)
换为:if condition:
step1 =
someLongOperation1()
step2 =
someLongOperation2()
step3 =
concatenate(step1, step2)
如果 concatenate 是一个带有条件分支的函数并且有的分支中只用了两个参数中的一个,另一个参数就永远没有必要被求值。
Python札记44_模块(sys、copy)
模块的自信来自于,模块是拿来即用的,不用自己编写
模块在Python中就是一个.py的程序。同样是一个py的程序既可以当做程序来执行,也可以当做模块来引入。
比如现在有有个文件 mokuai.py 在 D:\Python\datalearning\mokuai.py 中,模块中有个函数可以说是方法 lang
查看模块 mokuai 的具体特殊属性:
为了能够让Python器知道我们写的模块在什么位置,需要用sys.path.append("绝对路径")。在Python中将所有可饮用的模块加入到sys.path里面。
模块文件可以放置到任意指定的位置,只需要添加到环境变量即可。
定义两个变量和两个函数(方法),其中一个 带上 双下划线 的是私有变量 :
被视为私有的变量、函数或者类没有访问权限。改进方法:使用 __all__
解决办法 :在目录中放置一个 init .py文件。 init .py文件是一个空文件,这样目录中的其他py文件就可以当做模块引用。比如Peter目录下面有两个模块:.py1和.py2
pprint :让字典格式化输出
查看模块的信息,以pprint为例
copy模块中最重要的就是 copy 和 deepcopy 。
结果
花了2万多买的Python70个项目,现在分享给大家,练手进厂靠它了
前言:
不管学习哪门语言都希望能做出实际的东西来,这个实际的东西当然就是项目啦,不用多说大家都知道学编程语言一定要做项目才行。
这里整理了70个Python实战项目列表,都有完整且详细的教程,你可以从中选择自己想做的项目进行参考学习练手,你也可以从中寻找灵感去做自己的项目。
1、【Python 图片转字符画】
2、【200行Python代码实现2048】
3、【Python3 实现火车票查询工具】
4、【高德API+Python解决租房问题 】
5、【Python3 色情图片识别】
6、【Python 破解验证码】
7、【Python实现简单的Web服务器】
8、【pygame开发打飞机 游戏 】
9、【Django 搭建简易博客】
10、【Python基于共现提取《釜山行》人物关系】
11、【基于scrapy爬虫的天气数据采集(python)】
12、【Flask 开发轻博客】
13、【Python3 图片隐写术】
14、【Python 实现简易 Shell】
15、【使用 Python 解数学方程】
16、【PyQt 实现简易浏览器】
17、【神经网络实现手写字符识别系统 】
18、【Python 实现简单画板】
19、【Python实现3D建模工具】
20、【NBA常规赛结果预测——利用Python进行比赛数据分析】
21、【神经网络实现人脸识别任务】
22、【Python文本解析器】
23、【Python3 OpenCV 视频转字符动画】
24、【Python3 实现淘女郎照片爬虫 】
25、【Python3实现简单的FTP认证服务器】
26、【基于 Flask 与 MySQL 实现番剧推荐系统】
27、【Python 实现端口扫描器】
28、【使用 Python 3 编写系列实用脚本】
29、【Python 实现康威生命 游戏 】
30、【川普撞脸希拉里(基于 OpenCV 的面部特征交换) 】
31、【Python 3 实现 Markdown 解析器】
32、【Python 气象数据分析 -- 《Python 数据分析实战》】
33、【Python实现键值数据库】
34、【k-近邻算法实现手写数字识别系统】
35、【ebay在线拍卖数据分析】
36、【Python 实现英文新闻摘要自动提取 】
37、【Python实现简易局域网视频聊天工具】
38、【基于 Flask 及爬虫实现微信 娱乐 机器人】
39、【Python实现Python解释器】
40、【Python3基于Scapy实现DDos】
41、【Python 实现密码强度检测器】
42、【使用 Python 实现深度神经网络】
43、【Python实现从excel读取数据并绘制成精美图像】
44、【人机对战初体验:Python基于Pygame实现四子棋 游戏 】
45、【Python3 实现可控制肉鸡的反向Shell】
46、【Python打造漏洞扫描器 】
47、【Python应用马尔可夫链算法实现随机文本生成】
48、【数独 游戏 的Python实现与破解】
49、【使用Python定制词云】
50、【Python开发简单计算器】
51、【Python 实现 FTP 弱口令扫描器】
52、【Python实现Huffman编码解压缩文件】
53、【Python实现Zip文件的暴力破解 】
54、【Python3 智能裁切图片】
55、【Python实现网站模拟登陆】
56、【给Python3爬虫做一个界面.妹子图网实战】
57、【Python 3 实现图片转彩色字符】
58、【自联想器的 Python 实现】
59、【Python 实现简单滤镜】
60、【Flask 实现简单聊天室】
61、【基于PyQt5 实现地图中定位相片拍摄位置】
62、【Python实现模板引擎】
63、【Python实现遗传算法求解n-queens问题】
64、【Python3 实现命令行动态进度条】
65、【Python 获取挂号信息并邮件通知】
66、【Python实现java web项目远端自动化更新部署】
67、【使用 Python3 编写 Github 自动周报生成器】
68、【使用 Python 生成分形图片】
69、【Python 实现 Redis 异步客户端】
70、【Python 实现中文错别字高亮系统】
最后:
以上项目列表希望可以给你在Python学习中带来帮助~
获取方式:转发 私信“1”