python 最佳实践 (部分)

一. 结构化工程

文件 功能
README.rst readme
LICENSE 许可证
setup.py 打包和发布管理
requirements.txt 开发依赖
sample/init.py 核心代码
sample/core.py 核心代码
sample/helpers.py 核心代码
docs/conf.py 文档
docs/index.rst 文档
tests/test_basic.py 单元测试
tests/test_advanced.py 单元测试

二. 开发环境

vim :

python-mode : 在 vim 中使用 Python 的综合解决方案.
SuperTab : vim 小插件, 通过使用 <tab> 或任何其他指定的按键, 能够使代码补全变得更方便.

Sublime Text

PyCharm

三. 虚拟环境

virtualenv :
[virtualenvwrapper](http://virtualenvwrapper.readthedocs.io/en/latest/index.html) : 命令的完整列表(http://virtualenvwrapper.readthedocs.io/en/latest/command_ref.html)
[virtualenv-burrito](https://github.com/brainsik/virtualenv-burrito) : 能使用单行命令拥有 virtualenv + virtualenvwrapper 的环境.
[autoenv](https://github.com/kennethreitz/autoenv) : 当 cd 进入一个包含 .env 的目录中, 就会自动激活那个环境.

四. 文档

官方文档

python 2.x
python 3.x

pydoc : 在安装 python 时自动安装的 工具, 允许在 shell 中快速检索文档,

$ pydoc time    # 查看 time 模块的文档.

五. PEP8 : Python 事实上的代码风格指南.

pep8 : 检查代码的一致性.

$ pip install pep8
$ pep8 optparse.py     # 检查文件是否符合 PEP8 规范

autopep8 : 自动格式化为 PEP8 风格

$ autopep8 [ARGS] optparse.py   # 无参数, 则程序直接将更改的代码输出到控制台.
    --in-place      # 直接修改文件.
    --aggressive    # 执行更多实质性的变化, 可以执行多次, 已达到最佳效果.

六. 解包

如果你知道一个列表或者元组的长度, 你可以将其解包并为他的元素取名.

enumerate() :

for index,item in enumerate(my_list):
    print index,item

交换变量 :

a,b = b,a

嵌套解包:

a, (b,c) = 1, (2,3)

扩展解包: python 3

a, *rest = range(10)        # a = 0, rest = [1, 2, 3, 4, 5, 6, 7, 8, 9]
a, *middle, c = range(11)   # a = 0, middle = [1, 2, 3, 4, 5, 6, 7, 8, 9], c = 10

创建一个被忽略的变量:

filename = 'foobar.txt'
basename,_,ext = filename.rpartition(".")

创建一个包含 N 个对象的列表:

>>> four_none = [None]*4
>>> four_none
[None, None, None, None]
>>> four_one = [1]*4
>>> four_one
[1, 1, 1, 1]        

创建一个包含 N 个列表的列表

four_list = [[] for _ in xrange(4)]

依据列表来创建字符串: str.join()

letters = ["s", "p", "a", "m"]
word = "".join(letters)

七. 约定 pythonnic

检查变量是否等于常量 : 比较一个值是 True, None,False, 0 等 : 使用 if

    if attr :
        print "attr is truthy."

    if not attr:
        print "attr is falsey."

    # since None is considered false , explicitly check for it .
    if attr is None:
        print "attr is None."

访问字典元素:

x in d
dict.get() 

示例:

d = {"hello": "world"}

print d.get("hello", "default_value")   # "world"
print d.get("thingy", "default_value")  # "default_value"

if  "hello" in d:
    print d["hello"]

维护列表的捷径:

列表推导
map()
filter()
enumerate() : 或得列表中当前位置的计数.

示例:

# 过滤大于 4 的元素

# 列表推到
a = range(10)
b = [i for i in a if i > 4]

# filter
b = filter(lambda x: x > 4, a)

# 列表的每个元素 + 3

# 列表推导
a = range(10)
a = [i + 3 for i in a]

# map
a = map(lambda x: x + 3, a)

读取文件: with open

with open('file.txt') as f:
    for line in f:
        print line

行的延续: 当一个代码逻辑行的长度超多可接受的限制时, 需要将至分为多个物理行.

使用括号.

my_very_big_line = (
    "for a long time i used to go to bed early. Sometime ,"
    "when i had put out my candle , my eyes would close so quickly"
    "That i had not even time to say 'I'm going to sleep.' "
)

from some.deep.module.inside.a.moule import (
    a_nice_function, another_nice_function, yet_another_nice_function )

八. HTML 抓取

lxml : 是一个优美的扩展库, 用来快速解析 XML 和 HTML 文档,
Requests : 用来取代内建的 urllib2 模块.

九. 密码学

Cryptography : 提供了加密方法 recipes 和 primitives . Cryptography 分为两个层, 方法(recipes, 提供用于对称加密) 和 危险底层(hazardous materials,简称 hazmat, 提供底层的加密基元).
PyCrypto : 提供安全的 哈希函数和各种加密算法.

十. 命令行应用

Clint : 是一个Python模块,它包含了很多 对命令行应用开发有用的工具。它支持诸如CLI着色以及缩进,简洁而强大的列打印, 基于进度条的迭代以及参数控制的特性。
Click : 它创建了一个命令行接口, 可以尽可能的简化组合代码。命令行接口创建工具(“Command-line Interface Creation Kit”,Click) 支持很多配置但也有开箱可用的默认值设定。
docopt : 是一个轻量级,高度Pythonic风格的包,它支持 简单而直觉地创建命令行接口,它是通过解析POSIX-style的用法指示文本实现的。
Plac : Python标准库 argparse [http://docs.python.org/2/library/argparse.html] 的简单封装,它隐藏了大量声明接口的细节:参数解析器是被推断的,其优于写命令明确处理. 这个模块的面向是不想太复杂的用户,程序员,系统管理员,科学家以及只是想写个只运行一次的脚本的人们,使用这个命令行接口的理由是它可以快速实现并且简单。
Cliff : 是一个建立命令行程序的框架。 它使用setuptools入口点(entry points)来提供子命令,输出格式化,以及其他的扩展。这个框架 可以用来创建多层命令程序,如subversion与git,其主程序要进行一些简单的参数解析然后调用 一个子命令干活。

十一. 阅读代码

Howdoi : 代码搜寻工具
flask : 基于 Werkzeug 和 Jinja2 , 使用 Python 的微框架.
Diamond : Python 的守护进程, 收集指标, 并将它们发布至 Graphite 或其他后端. 能收取 CPU,内存,网络,IO,负载和硬盘指标, 拥有实现自定义收集器的API, 该 API 几乎能从任何资源中获取指标.
Werkzeug : WSGI 实用模型.包括强大的调试器,功能齐全的请求和响应对象,处理entitytags的HTTP工具,缓存控制标头,HTTP数据,cookie处理,文件上传,强大的URL路由系统和一些社区提供的插件模块。

十二. 测试

通用规则 :

  • 测试单元应该集中于小部分的功能, 并且证明他是对的.
  • 每个测试单元都应该完全独立. 每个都能独立运行, 除了调用的命令, 都需在测试套件中. 测试单元应该加载最新的数据集, 之后在做一些清理. 如 setUp() 和 tearDown() 方法.
  • 尽量使单元测试快速运行.
  • 实现钩子(hook) 是一个非常好的主意. 因为一旦将代码放入仓库, 这个钩子可以运行所有的测试单元.
  • 当调试代码的时候, 需要首先写一个精确定位 bug 的测试单元.
  • 测试函数使用长且描述性的名字.

单元测试

unittest
unittest.TestCase

doctest 文档测试. 模块查找零碎文本, 就像 Python 中 docstrings 内的交互式会话, 执行那些会话以正式工作正常.

Nose :
nose 集成测试单元, 能使测试更加容易.
自动化测试, 发现并节省人工创建测试组件的麻烦

tox : 自动化测试管理和针对多种解释器配置测试工具.

mock : 测试库. unittest.mock 是 python 中用于测试的一个库.

十三. 持续集成

Jenkins : 可扩展的持续集成引擎。
Tox : 是一款为Python软件提供打包、测试和 开发的自动化工具,基于命令行或CI服务器。它是一个通用的虚拟环境管理和测试的命令行 工具

python 最佳实践与资源汇总的更多相关文章

  1. Python 最佳实践指南 2018 学习笔记

    基础信息 版本 Python 2.7 Python 3.x Python2.7 版本在 2020 年后不再提供支持,建议新手使用 3.x 版本进行学习 实现 CPython:Python的标准实现: ...

  2. PYTHON 最佳实践指南(转)

    add by zhj: 本文参考了The Hitchhiker's Guide to Python,当然也加入了作者的一些东西.The Hitchhiker's Guide to Python 的gi ...

  3. Python 最佳实践

    前言 对我来说,以前每次面试是我审视自己,检验自己的一种方式.每次准备面试,以及被面试官问住的时候才会发现,其实我python我学的还不够好.工作中也是,可以从其他的同事那里获得成长.但是我今天说的是 ...

  4. Web前端开发最佳实践系列文章汇总

    Web前端开发最佳实践(1):前端开发概述 Web前端开发最佳实践(2):前端代码重构 Web前端开发最佳实践(3):前端代码和资源的压缩与合并 Web前端开发最佳实践(4):在页面中添加必要的met ...

  5. Python资源汇总

    Python 目录: 管理面板 算法和设计模式 反垃圾邮件 资产管理 音频 验证 构建工具 缓存 ChatOps工具 CMS 代码分析和Linter 命令行工具 兼容性 计算机视觉 并发和并行性 组态 ...

  6. Python编程之美:最佳实践指南PDF高清完整版免费下载|百度云盘|Python新手到进阶

    百度云盘:Python编程之美:最佳实践指南PDF高清完整版免费下载 提取码:1py6 内容简介 <Python编程之美:最佳实践指南>是Python用户的一本百科式学习指南,由Pytho ...

  7. 【GoLang】golang 最佳实践汇总

    最佳实践 1 包管理 1.1 使用包管理对Golang项目进行管理,如:godep/vendor等工具 1.2 main/init函数使用,init函数参考python 1.2.1 main-> ...

  8. paip.python连接mysql最佳实践o4

    paip.python连接mysql最佳实践o4 python连接mysql 还使用了不少时间...,相比php困难多了..麻烦的.. 而php,就容易的多兰.. python标准库没mysql库,只 ...

  9. paip.python ide 总结最佳实践o4.

    paip.python ide 总结最佳实践o4. ====2个重要的标准 1.可以自动补全 2.可以断点调试 =======选型使用报告 Komodo正好儿俄机器上有,使用累挂,自动补全还凑火.就是 ...

随机推荐

  1. 基于vue2.0前端组件库element中 el-form表单 自定义验证填坑

    eleme写的基于vue2.0的前端组件库: http://element.eleme.io 我在平时使用过程中,遇到的问题. 自定义表单验证出坑: 1: validate/resetFields 未 ...

  2. oracle linux 6.5 安装 oracle 12cR2数据库(2)-DBCA建库

    援引:http://www.cnblogs.com/kerrycode/p/3386917.html  by 潇湘隐者 Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引 ...

  3. java web 简单的登录注册

    --sql文件 create database studentgouse studentgocreate table stuinfo(--stuid int primary key identity( ...

  4. angularjs ng-class

    ng-class指令可以设置一个键值对,用于决定是否添加一个特定的类名,键为class名,值为bool类型表示是否添加该类名 <style> .red { color: red; } .g ...

  5. C++接口的定义与实现的详细过程

    1.接口的定义与实现 所谓的接口,即将内部实现细节封装起来,外部用户用过预留的接口可以使用接口的功能而不需要知晓内部具体细节.C++中,通过类实现面向对象的编程,而在基类中只给出纯虚函数的声明,然后在 ...

  6. Python简要学习笔记

    1.搭建学习环境 推荐ActivePython,虽然此乃为商业产品,却是一个有自由软件版权保证的完善的Python开发环境,关键是文档以及相关模块的预设都非常齐备. ActivePython下载地址: ...

  7. zoj1654 Place the Robots 二分图最大匹配

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=654 将每一行的包含空地的区域编号 再将每一列的包含空地的区域编号 然 ...

  8. vue之nextTick全面解析

    vue的第一篇文章,介绍一下简单的nextTick方法的实现原理 简介 vue是非常流行的框架,他结合了angular和react的优点,从而形成了一个轻量级的易上手的具有双向数据绑定特性的mvvm框 ...

  9. crontab的相关设置&linux定时备份数据库

    对于才了解crontab的人来说,应该按照以下的步骤来设置crontab 1.首先要检查是否装了crontab http://blog.sina.com.cn/s/blog_4881040d01011 ...

  10. jsp/html页面中的路径

    Html/Jsp页面中的路径,是供浏览器使用的."/"代表的是服务器根目录,一个服务器会有多个web应用,所以请求资源时需要加应用名才能正确访问. 页面中使用的相对路径,也是由浏览 ...