登录  | 加入社区

黑狼游客您好!登录后享受更多精彩

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

查看: 605|回复: 0

写给已有编程履历的​Python​初学者的总结

[复制链接]

12

主题

0

帖子

0

现金

黑狼菜鸟

Rank: 1

积分
20
发表于 2017-12-6 15:34:03 | 显示全部楼层 |阅读模式 来自 美国
ubM551YK94Dbb15g.jpg 当我开始学习Python的时间,有些事我盼望我一早就知道。我耗费了许多时间才学会这些东西。我想要把这些重点都编纂到一篇文章当中。这篇文章的目的读者,是刚刚开始学习Python语言的有履历的步伐员,想要跳过前几个月研究Python利用的那些他们已经在用的雷同工具。包管理和尺度工具这两节对于初学者来说同样很有资助。
我的履历重要基于Python 2.7,但是大多数的工具对任何版本都有用。
假如你从来没有利用过Python,我猛烈发起你阅读Python introduction,由于你必要知道根本的语法和范例。

包管理
Python天下最棒的地方之一,就是大量的第三方步伐包。同样,管理这些包也非常轻易。按照惯例,会在 requirements.txt文件中列出项目所必要的包。每个包占一行,通常还包罗版本号。这里有一个例子,本博客利用Pelican:

Python步伐包有一个缺陷是,它们默认会举行全局安装。我们将要利用一个工具,使我们每个项目都有一个独立的情况,这个工具叫virtualenv。我们同样要安装一个更高级的包管理工具,叫做pip,他可以和virtualenv共同工作。
起首,我们必要安装pip。大多数python安装步伐已经内置了easy_install(python默认的包管理工具),以是我们就利用easy_install pip来安装pip。这应该是你末了一次利用easy_install了。假如你并没有安装easy_install ,在linux体系中,貌似从python-setuptools包中可以得到。
假如你利用的Python版本高于即是3.3,那么Virtualenv已经是尺度库的一部门了,以是没有须要再去安装它了。
下一步,你盼望安装virtualenv和virtualenvwrapper。Virtualenv使你可以或许为每个项目创造一个独立的情况。尤其是当你的差别项目利用差别版本的包时,这一点特殊有效。Virtualenv wrapper提供了一些不错的脚本,可以让一些事变变得轻易。
Shell


当virtualenvwrapper安装后,它会把virtualenv列为依靠包,以是会主动安装。
打开一个新的shell,输入mkvirtualenv test 。假如你打开别的一个shell,则你就不在这个virtualenv中了,你可以通过workon test来启动。假如你的工作完成了,可以利用deactivate来停用。
VZs2798AnnEAAnnN.jpg
IPython
IPython是尺度Python交互式的编程情况的一个替换品,支持主动补全,文档快速访问,以及尺度交互式编程情况本应该具备的许多其他功能。
当你处在一个假造情况中的时间,可以很简朴的利用pip install ipython来举行安装,在下令行中利用ipython来启动
c768Vf6Vz7iiF68i.jpg
另一个不错的功能是”条记本”,这个功能必要额外的组件。安装完成后,你可以利用ipython notebook,而且会有一个不错的网页UI,你可以创建条记本。这在科学盘算范畴很盛行。
uGaAmi8nQazM8vuu.jpg
测试
我保举利用nose或是py.test。我大部门环境下用nose。它们根本上是雷同的。我将解说nose的一些细节。
这里有一个人为创建的可笑的利用nose举行测试的例子。在一个以test_开头的文件中的全部以test_开头的函数,都会被调用:

Python


不出所料,当运行nose的时间,我们的测试没有通过。
Shell


nose.tools中同样也有一些便捷的方法可以调用
Python


假如你想利用更加雷同JUnit的方法,也是可以的:
Python


开始测试:
Shell



杰出的Mock库包罗在Python 3中,但是假如你在利用Python 2,可以利用pypi来获取。这个测试将举行一个长途调用,但是这次调用将耗时10s。这个例子显然是人为假造的。我们利用mock来返回样本数据而不是真正的举行调用。
Python


固然,我们的测试必要很长的时间。
Shell


太慢了!因此我们会问本身,我们在测试什么?我们必要测试长途调用是否有效,照旧我们要测试当我们得到数据后要做什么?大多数环境下是后者。让我们摆脱这个愚笨的长途调用吧:
Python


好吧,让我们再试一次:
Shell


很多多少了。记着,这个例子举行了荒诞的简化。就我个人来讲,我仅仅会忽略从长途体系的调用,而不是我的数据库调用。
nose-progressive是一个很好的模块,它可以改善nose的输出,让错误在发生时就表现出来,而不是留到末了。假如你的测试必要耗费肯定的时间,那么这是件功德。pip install nose-progressive而且在你的nosetests中添加--with-progressive

调试
iPDB是一个极好的工具,我已经用它查出了许多匪夷所思的bug。pip install ipdb安装该工具,然后在你的代码中import ipdb; ipdb.set_trace,然后你会在你的步伐运行时,得到一个很好的交互式提示。它每次实行步伐的一行而且查抄变量。
a1c1TLCfuPbgGS2c.jpg
python内置了一个很好的追踪模块,资助我搞清晰发生了什么。这里有一个没什么用的python步伐:
Python


这里是对这个步伐的追踪效果:
Shell


当你想要搞清晰其他步伐的内部构造的时间,这个功能非常有效。假如你从前用过strace,它们的工作方式很相像
在一些场所,我利用pycallgraph来追踪性能题目。它可以创建函数调用时间和次数的图表。
IS3a7GBL3zG3GoTa.jpg
末了,objgraph对于查找内存泄漏非常有效。这里有一篇关于怎样利用它查找内存泄漏的好文。

Gevent
Gevent是一个很好的库,封装了Greenlets,使得Python具备了异步调用的功能。是的,非常棒。我最爱的功能是Pool,它抽象了异步调用部门,给我们提供了可以简朴利用的途径,一个异步的map函数:
Python


非常紧张的是,必要留意这段代码顶部对gevent monkey举行的补丁,假如没有它的话,就不能精确的运行。假如我们让Python一连调用 fetch_url 3次,通常我们盼望这个过程耗费30秒时间。利用gevent:
Python


假如你有许多数据库调用或是从长途URLs获取,这黑白常有效的。我并不是很喜好回调函数,以是这一抽象对我来说结果很好。

结论
好吧,假如你看到这里了,那么你很大概已经学到了一些新东西。这些工具,在已往的一年里对我影响庞大。找打它们耗费了不少时间,以是盼望本文可以或许淘汰其他人想要很好使用这门语言必要付出的积极。




上一篇:部落图鉴之PHP:迎着全天下的讽刺霸占天下
下一篇:扣丁学堂浅谈​PHP​中new static()与new self()区别异同分析 ...
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

 

QQ|申请友链|小黑屋|手机版|Hlshell Inc. ( 豫ICP备16002110号-5 )

GMT+8, 2024-5-15 06:17 , Processed in 0.057870 second(s), 47 queries .

HLShell有权修改版权声明内容,如有任何爭議,HLShell將保留最終決定權!

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表