成为真正的Python开发者
来源:互联网 发布:plsql执行sql文件 编辑:程序博客网 时间:2024/06/05 08:20
寻找Python代码
- Python标准库
- Python包索引(PyPi)
善于用右上角的模糊搜索功能 - Github中最流行的Python项目(https://github.com/trending/python)
- 流行Python菜谱有4000多个短Python程序
安装包
推荐使用pip
pip install flaskpip install flask==0.9.0# 指定最下版本(当你必须使用的一些特性在某个版本之后开始出现时,这个功能特别有用)# 单引号可以防止shell把>解析成输出重定向pip install 'flask>=0.9.0'
如果你想安装多个Python包,可以使用requirements文件。虽然它有很多选项,但是最简单的使用方法是列出所有包,一个包一行,加上可选的目标版本或者相对版本:
$ pip -r requirements.txt
# requirements.txtflask==0.9.0djangopsycopg2
操作系统自带的包管理工具
Linux: apt-get、yum、dpkg和zypper
从源代码安装
有时候,一个Python包是新出的,或者作者还没有把它发布到pip上。如果要安装这样的包,通常需要这样做:
- 下载代码
- 如果是压缩文件,使用zip、tar或者其他合适的工具来解压缩
- 在包含setup.py文件的目录中运行python install setup.py
集成开发环境
IDLE
IDLE是唯一一个标准发行版中包含的Python IDE。它是基于tkinter开发的,图形界面比较简单。
PyCharm
IPython
IPython在后面有介绍,既是一个发布平台也是一个扩展IDE。
命名和文档
文档可以包括注释和文档字符串,也可以把信息记录在变量名、函数名、模块名和类名中。
PEP8格式
注意:
- Python没有常量,但是PEP8格式规范建议使用大写字母和下划线来表示常量名。
- 我们基于常量值提前进行了一些计算,应该把它们移动到模块顶层,如果把他们放到函数内部,则每次调用函数都要重新计算。
测试代码
测试Python程序最简单的办法就是添加一些print()语句。Python交互式解释器的读取-求值-打印循环(REPL)允许快速添加和测试修改。
然而,你或许不会想要在产品级代码中添加print()语句,因此需要记住自己添加的所有print()语句并在最后删除它们。但是,这样做很容易出现剪切-粘贴错误。
使用pylint、pyflakes和pep8检查代码
在创建真正的测试程序之前,需要运行Python代码检查器。最流行的是pylint和pyflakes。
$ pip install pylint$ pip install pyflakes
它们可以检查代码错误和代码风格问题
$ pylint yourfile.py
另一个格式检查工具是pep8
$ pip install pep8
$ pep8 yourfile.py
测试程序逻辑
我们已经通过了代码风格的考验,下面应该真正地测试程序逻辑了。
最好先编写独立的测试程序,在提交代码到源码控制系统之前确保通过所有测试。写测试看起来是一件很麻烦的事,但是它们真的能帮助你更快地发现问题,尤其是回归测试。
使用unittest进行测试
标准库有两个测试包。首先介绍unittest。假设我们编写了一个单词首字母转大写的模块,第一版直接使用标准字符串函数captialize(),之后会看到许多意料之外的结果。
# cap.pydef just_do_it(text): return text.capitalize()
# test_cap.py# 测试脚本import unittestimport capclass TestCap(unittest.TestCase): # setUp()和tearDown()通常用来分配和回收测试需要的外部资源,比如数据库连接或者一些测试数据 # setUp()方法会在每个测试方法执行之前执行 def setUp(self): pass # tearDown()方法会在每个测试方法执行之后执行 def tearDown(self): pass def test_one_word(self): text = 'duck' # cap.py为被测试模块 result = cap.just_do_it(text) # 在unittest中,可以使用assert(断言)开头的方法来检查返回的结果 self.assertEqual(result, 'Duck') def test_multiple_words(self): text = 'a veritable flock of ducks' result = cap.just_do_it(text) self.assertEqual(result, 'A Veritable Flock Of Ducks')if __name__ == '__main__': # 运行所有的测试 unittest.main()
$ python test_cap.py
结果时第一个测试(test_one_word)通过了,但是第二个(test_multiple_words)失败了。(因为capitalize只会把第一个单词的第一个字母转成大写)我们把cap.py中的capitalize()替换成title():
# cap.pydef just_do_it(text): return text.title()
$ python test_cap.py
两个测试都通过了,看起来没问题了。不过,其实还是有问题的。我们还需要在test_cap.py中添加另个一个方法:
# test_cap.py# 测试脚本import unittestimport capclass TestCap(unittest.TestCase): # setUp()和tearDown()通常用来分配和回收测试需要的外部资源,比如数据库连接或者一些测试数据 # setUp()方法会在每个测试方法执行之前执行 def setUp(self): pass # tearDown()方法会在每个测试方法执行之后执行 def tearDown(self): pass def test_one_word(self): text = 'duck' # cap.py为被测试模块 result = cap.just_do_it(text) # 在unittest中,可以使用assert(断言)开头的方法来检查返回的结果 self.assertEqual(result, 'Duck') def test_multiple_words(self): text = 'a veritable flock of ducks' result = cap.just_do_it(text) self.assertEqual(result, 'A Veritable Flock Of Ducks') def test_words_with_apostrophes(self): text = "I'm fresh out of ideas" result = cap.just_do_it(text) self.assertEqual(result, "I'm Fresh Out Of Ideas")if __name__ == '__main__': # 运行所有的测试 unittest.main()
$ python test_cap.py
结果测试没有通过,title()会把I’m中的m大写。因为title()不能处理撇号。
我们尝试替换另一个函数:capwords()
结果是通过了,但是其实还存在问题,我们向test_cap.py中再加一个测试:
# cap.pydef just_do_it(text): return text.title()
$ python test_cap.py
两个测试都通过了,看起来没问题了。不过,其实还是有问题的。我们还需要在test_cap.py中添加另个一个方法:
# test_cap.py# 测试脚本import unittestimport capclass TestCap(unittest.TestCase): # setUp()和tearDown()通常用来分配和回收测试需要的外部资源,比如数据库连接或者一些测试数据 # setUp()方法会在每个测试方法执行之前执行 def setUp(self): pass # tearDown()方法会在每个测试方法执行之后执行 def tearDown(self): pass def test_one_word(self): text = 'duck' # cap.py为被测试模块 result = cap.just_do_it(text) # 在unittest中,可以使用assert(断言)开头的方法来检查返回的结果 self.assertEqual(result, 'Duck') def test_multiple_words(self): text = 'a veritable flock of ducks' result = cap.just_do_it(text) self.assertEqual(result, 'A Veritable Flock Of Ducks') def test_words_with_apostrophes(self): text = "I'm fresh out of ideas" result = cap.just_do_it(text) self.assertEqual(result, "I'm Fresh Out Of Ideas") def test_words_with_quotes(self): text = "\"You're despicable,\" said Daffy Duck" result = cap.just_do_it(text) self.assertEqual(result, "\"You're Despicable,\" Said Daffy Duck")if __name__ == '__main__': # 运行所有的测试 unittest.main()
结果不能通过测试应为you没有变成You。
做测试的人可以发现这些边界条件,但是开发者在自己面对自己的代码时通常有盲区。
unittest提供了数量不多但非常有用的断言,你可以用它们检查值,确保类能够匹配、判断是否触发错误,等等。
使用doctest进行调试
标准库中的第二个测试包是doctest。使用这个包可以把测试写到文档字符串中,也可以起到文档的作用。它看起来有点像交互式解释器:字符>>>后面是一个函数调用,下一行是执行结果。
# cap.pydef just_do_it(text): """ >>> just_do_it('duck') 'Duck' >>> just_do_it('a veritable flock of ducks') 'A Veritable Flock Of Ducks' >>> just_do_it("I'm fresh out of ideas") "I'm Fresh Out Of Idea" ``` from string import capwords return capwords(text)if __name__ = '__main__': import doctest doctest.testmod()
运行时如果测试全部通过不会产生任何输出:
$ python cap.py
加上冗杂选项(-v),看看会出现什么:
$ python cap.py -v
使用nose进行测试
第三方包nose和unittest类似。(pip install nose)不需要像使用unittest一样创建一个包含测试方法的类。任何名称中带test的函数都会被执行。
# test_cap_nose.pyimport capfrom nose.tools import eq_def test_one_word(): text = 'duck' result = cap.just_do_it(text) eq_(result, 'Duck')def test_multiple_words(): text = 'a veritable flock of ducks' result = cap.just_do_it(text) eq_(result, 'A Veritable Flock Of Ducks')def test_words_with_apostrophes(): text = "I'm fresh out of ideas" result = cap.just_do_it(text) eq_(result, "I'm Fresh Out Of Ideas")def test_words_with_quotes(): text = "\"You're despicable,\" said Daffy Duck" result = cap.just_do_it(text) eq_(result, "\"You're Despicable,\" Said Daffy Duck")
运行测试:
$ nosetests test_cap_nose.py
其他测试框架
出于某些原因,开发者会编写Python测试框架。如果你很感兴趣,可以试试tox和py.test。
持续集成
调试Python代码
使用pdb进行调试
记录错误日志
优化代码
测量时间
算法和数据结构
Cython、NumPy和C扩展
PyPy
源码控制
Mercurial
Git
更多内容
Python的艺术
工作中的Python
Python的科学
- 成为真正的Python开发者
- 成为一个真正的游戏开发者
- 《Python语言及其应用》读书笔记(11)之第12章成为真正的Python开发者(关键词:测试/调试/优化)
- 成为真正的术士
- 如何才能成为真正的程序员
- 如何才能成为真正的程序员
- 成为一个真正的程序员!
- 成为伟大开发者的“九步曲”
- 成为伟大开发者的“九步曲”
- 成为伟大开发者的“九步曲”
- 成为伟大开发者的“九步曲”
- 成为伟大开发者的“九步曲”
- 成为伟大开发者的“九步曲”
- 怎么样成为纯正的开发者
- 成为合法的苹果开发者
- 成为真正程序员的第一天!
- 如何成为一个真正的程序员
- 怎么样能成为真正的高手呢?
- 策略模式
- 你知道it都有哪些作用吗?
- Django 的 form类
- 深度学习将成为中国监控市场增长的新引擎
- git
- 成为真正的Python开发者
- u3d基于slua提升开发效率
- 计算机间通信
- 解决Oracle创建视图(VIEW)权限不足的方法
- 数据结构与算法:学习笔记(1)顺序式堆栈(原理与实现)
- Mask R-CNN
- git管理-分支玩法
- 严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis
- SQL语句练习以及答案 (1)