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. 简介vsftpd及搭建配置

    一.简介 FTP(文件传输协议)全称是:Very Secure FTP Server.   Vsftpd是linux类操作系统上运行的ftp服务器软件. vsftp提供三种登陆方式:1.匿名登录  2 ...

  2. C#基础之------委托

    一.委托的基本介绍 可以任务委托是持有一个或多个方法的对象.当然,正常情况下你不会去执行一个对象,但是委托与对象不同.可以执行委托,这是委托就会执行他所"持有"的方法. 举个栗子就 ...

  3. C#基础知识-流程控制的应用(四)

    流程控制我们在编程中运用到的地方非常的多,在上篇中仅仅只是简单的介绍每一种的使用,并没有运用到实例中,很难去理解它真正的作用.下面我们将实际的运用流程控制的代码写一些实例相关的程序,加深对流程控制的理 ...

  4. oracle AWR性能监控报告生成方法

    目前相当一部分公司会用到oracle,在做性能测试的时候,对数据库的监控很重要,那么这里先介绍下如何生成oracle自带的awr监控报告,而具体报告的内容分析会放在后续的博客中 oracle性能分析入 ...

  5. maven的三大生命周期

    一.Maven的生命周期 Maven的生命周期就是对所有的构建过程进行抽象和统一.包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有的构建步骤. Maven的生命周期 ...

  6. Jlink下载问题

    在使用Jlink SWD模式进行下载的时候遇到了无法下载的问题. SWD模式下,共有4跟线,VCC.GND.SWCLK.SWDIO JTAG标准接口如下图所示: 一般情况下,目标板卡的 debug V ...

  7. 解决window.navigator.geolocation.getCurrentPosition在IOS10系统中无法进行地理定位问题

    昨天接到用户通知说在点击"看场地"时无法获取地理位置信息. 在接到通知时,首先想到的是排查机型问题.由于客户多为IOS用户,所以最先看的是在安卓是有没有此问题的发生,调查结果为安卓 ...

  8. SQLyog-12.4.2版下载,SQLyog最新版下载,SQLyog官网下载,SQLyog Download

    SQLyog-12.4.2版下载,SQLyog最新版下载,SQLyog官网下载,SQLyog Download >>>>>>>>>>> ...

  9. Ubuntu怎样进行自由截图操作

    全屏截图 1. 很简单,键盘上右上角都有一个 Print Screen按键,敲一下,全屏截图操作完成. 自由截图 1. 此种方式很简单,打开系统设置->键盘,进入shortcuts选项 2. 点 ...

  10. [编织消息框架][netty源码分析]2 eventLoop

    eventLoop从命名上看是专门处理事件 事件系统主要由线程池同队列技术组成,有以下几个优点 1.任务出队有序执行,不会出现错乱,当然前提执行线程池只有一个 2.解偶系统复杂度,这是个经典的生产者/ ...