学习Python的一些Tips
0. Python安装
官网提供多种方式,一般Windows下直接安装exe即可;Linux下基本上自带python;另外也提供源码,也可自行编译;
若安装后无法使用,则检查一下环境变量是否设置正确。
额外:除了最主要的官网资料、文档外,Python的wiki也提供了很多有用的信息
1. Python相关源码
0) 标准库
1) PyPi包索引(可通过pip工具安装)
2) GitHub上的Python项目
3) Code activestate上面的Python代码片段
2. Python安装包
0) msi或exe格式直接运行安装
1) pip方式安装,pip install 可安装whl格式或新版本pip下可直接安装包PyPi下指定的包
2) easy_install 安装egg格式的包
3) 对于提供源码的包,可通过python setup.py install 安装,一般会提供setup.py文件
3. Python开发环境
0) vim /notepad++/Sublime Text等一系列编辑器
1) 自带的基于Tk的IDLE/IPython
2) PyCharm/Eric或者Eclipse PyDev/VS等基于插件的IDE
4. 命名、代码规范
0) Google Python Style Guide
1) PEP8 Python编码规范
2) 使用pylint、pyflakes、PEP8代码风格检查工具、isort 对import语句分段排序工具、clonedigger代码重复率查询等工具检查代码
5. 注释、文档
0) 文档包括注释和文档字符串,一般在变量名、函数名、模块名和类名中
1) Python只有单行注释,对于''''''的文档字符串也可当作注释;不过不太建议,代码风格可能不太规范
6. 测试代码
0) 对于简单的单个模块可用:if __name__ == '__main__'内容中添加测试内容也可
1) 标准库中的doctest测试包,把测试写到文档字符串中也起到一定的文档说明的作用,其中文档字符串内容为:
字符 >>> 后面是一个函数调用,下一行是期望的执行结果,此后调用doctest.testmod()并在执行时增加-v选项即可
2) 标准库中的unittest模块进行单元测试,其需要实现该包含测试方法的继承类,此后调用unittest.main()执行所有的测试用例
3) 第三方的测试包nose,其只需要使得以test开头的函数作为测试用例;测试文件xxx.py不需要写if __name__ == '__main__',
此后执行nosetests xxx.py即可
4) 集成测试Test Discovery,可测试项目中多个测试用例文件;使用方式:python -m unittest discover
5) 各个Python测试框架,如pytest、tox框架
7. 持续集成(自动化构建、测试系统)
0) buildbot
1) jenkins
2) travis-ci
3) coverage代码覆盖率测试工具
4) tox
8. 调试代码
0) 最一般的就是在需要的地方调用print打印信息
1) vars()函数调用可打印参数列表内容,结合装饰器即可方便在调用实际函数前后打印、获取某些信息或是执行调用其他函数
2) 使用pdb调试器,使用方法:python -m pdb xxx.py
9. 日志记录
0) 简单的用print打印信息至控制台或者文件
1) 使用标准库中的logging模块,提供打印级别、格式、目标、过滤器等
10. 优化代码
0) 一般情况下是先优化算法、数据结构;
1) 使用标准库time模块的time函数测量执行时间,计算时间差可粗略计算执行时间
2) 使用标准库timeit模块的timeit函数可简单测试代码片段的执行时间
3) 使用标准库timeit模块的repeat函数可多次测试代码片段
4) 优化小tips:
0. 优化数据结构,比如:列表解析通常比for循环自己添加元素更快
1. 优化算法
2. Cython用来生成C扩展,Python中使用C写成的库(与CPython不一样,后者为Python默认实现的解释器)
3. 另外某些计算的数学库,还可以使用NumPy(C语言实现)
4. 对于某些通过分析器分析得到的确需要提高性能的部分可以使用C扩展来实现,以提高性能
5. 使用标准库ctypes模块整合C语言库的实现
6. 使用PyPy解析器(由Python实现的解析器,内部可能用到JIT即时解析器、沙盒等),其比CPython解释器更快
11. 源码控制
0) Git
1) SVN
2) CVS
3) Mercurial(Hg)
4) 其他
12. 程序打包
0) Distutils打包程序
1) 结合0)使用sdist命令打包
2) 结合0)使用bdist命令打包并创建安装程序
3) 结合0)使用扩展python,需要提供setup.py,build_ext命令打包
4) 使用py2exe等第三方工具创建可执行程序,同样也需要提供setup.py
5) 其他第三方打包工具
13. 一些不错的Python学习资源或者其他相关资料
0) https://github.com/jobbole/awesome-python-books
1) http://docs.python-guide.org/en/latest/#
2) https://zhuanlan.zhihu.com/p/22275595
3) https://www.zhihu.com/question/29138020
4) https://github.com/Yixiaohan/show-me-the-code
5) https://readthedocs.org/
6) https://github.com/vinta/awesome-python
学习Python的一些Tips的更多相关文章
- 编程零基础应当如何开始学习 Python?
提前说一下,这篇福利多多,别的不说,直接让你玩回最有手感的怀旧游戏,参数贴图很方便自己可以根据喜好修改哦. 本篇通过以下四块展开,提供大量资源对应. 选一个好版本 有没有看过<在下坂本,有何贵干 ...
- 学习python
最近感觉Python 很不错的样子,乘着这次寒假,不如就先学一下吧. 翻看了一些教程,发现<python 简明教程>质量上乘. 我目前学习python就是打算做一些上位机之类的,好像有点杀 ...
- Python学习--Python基础语法
第一个Python程序 交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码. linux上你只需要在命令行中输入 Python 命令即可启动交互式编程,提示窗 ...
- Linux运维人员如何学习python编程
Linux运维人员如何学习python编程 从不会写代码,到自己独立能写代码解决问题 .这个问题很重要!盲目学习所谓的项目,最后 还是不会自己写代码解决问题.首先解决了独立能写代码解决问题,再通过项目 ...
- 新手学习Python时常见的错误
最近学习Python,现在把一些常见的错误总结如下: 1)忘记在 if , elif , else , for , while , class ,def 声明末尾添加 :(导致 "Synta ...
- 学习Python的三种境界
前言 王国维在<人间词话>中将读书分为了三种境界:"古今之成大事业.大学问者,必经过三种之境界:'昨夜西风凋碧树,独上高楼,望尽天涯路'.此第一境也.'衣带渐宽终不悔,为伊消得人 ...
- 1 python学习——python环境配置
1 python学习--python环境配置 要学习python语言,光看书看教程还是不好,得动手去写.当然,不管学习什么编程语言,最佳的方式还在于实践. 要实践,先得有一个Python解释器来解释执 ...
- 如何学习Python
[整理]如何学习Python + 如何有效利用Python有关的网络资源 + 如何利用Python自带手册(Python Manual) http://www.crifan.com/howto_lea ...
- 学习Python的第一课(简单的单元测试)
由于有C#开发基础,感觉学习Python应该不难,主要是一些语法了,再加上现在互联网这么发达. 感觉还是要有思路,否则学什么也只能是什么. 话不多说,简单发下这几天的学习成果吧: 第一次写博客,大家不 ...
随机推荐
- UILabel 常见问题总结
写在前面:笔者在iOS软件开发中发现UILabel控件有些问题反复出现,所以在这里做点总结,方便自己查阅,也能给大家提供相关问题的解决方案. 一:当label里的内容显示满了的时候,能够自动将字体变小 ...
- maven之setting.xml的配置详解
文件存放位置 全局配置: ${M2_HOME}/conf/settings.xml 用户配置: ${user.home}/.m2/settings.xml note:用户配置优先于全局配置.${use ...
- 微信小程序wxml和wxss样式
对于css不熟悉的android程序员来说,开发微信小程序面临的一个比较困难的问题就是界面的排版了.微信小程序的排版就跟wxml和wxss有关了,它们两者相当于android的布局文件,其中wxml指 ...
- 移植tslib库出现selected device is not a touchscreen I understand的解决方法
首发平台:微信公众号baiwenkeji 很多人在做触摸屏驱动实验,移植tslib库时,可能会出现错误提示“selected device is not a touchscreen I underst ...
- lnmp-详细编译安装步骤
CentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14 一.配置防火墙,开启80端口.3306端口 CentOS 7.0默认使用的是firewall作为防火墙,这 ...
- 学习笔记::kmp
matrix67 nxt[i]:[1-i]中最长公共前后缀的长度 j=0;;i<=n;i++) { ]) j=nxt[j]; ]) j++; nxt[i]=j; }
- hdoj1027【STL系列。。。?】
这个太夸张了...感觉是有别的方法,但是觉得再说吧...以后碰到全排列应该也是用STL嗨的吧...嗯,,,就是这样的....?再说,再说.. 还有杭电支持c艹11,很棒 #include <bi ...
- 基于FBX SDK的FBX模型解析与加载 -(三)
http://blog.csdn.net/bugrunner/article/details/7229416 6. 加载Camera和Light 在FBX模型中除了几何数据外较为常用的信息可能就是Ca ...
- IT兄弟连 JavaWeb教程 请求重定向案例
Check2Servlet类与Output2Servlet类之间为请求转发关系.在web.xml文件中,为Check2Servlet映射的URL为"/check2",为Output ...
- Struts+Spring+Hibernate处理Lob(Blob,Clob)
在使用struts+spring+hibernate的开发中,有些时候用户会有数据库存储文件的需求,在数据库中一般会采用Blob字段或Clob字段来存储二进制图片.流媒体或文件.现就将在实际开发中遇到 ...