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. 蓝桥杯-等额本金-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  2. 使用react native制作的微博客户端

    简要说明: 因为微博授权权限设置,本人的微博开放者账号权限太低,如果出现 'api请求次数受限,请更换. 10023' 弹框 或者 授权界面出错,需要自行更换开放者应用的appkey,授权回调页,Ap ...

  3. 开源分布式任务调度平台Cuckoo-Schedule

    1         概述 1.1      平台概述 Cuckoo-Schedule是基于Quartz-Schedule的轻量级任务调度框架,具有易学习.易上手.开发高效稳定的特点.Demo地址:ht ...

  4. ASP.NET MVC知识点总结

    一直都有把MVC的知识点总结出来的打算,今日终于得偿所愿.话不多说,开工!!! 一·  MVC MVC设计模式->MVC框架(前端开发框架),asp.net(webform) aspx M:Mo ...

  5. Java学习笔记——设计模式之一.简单工厂

    蜀道之难.难于上青天,侧身西望长咨嗟 --蜀道难 设计模式第一篇,简单工厂. 定义Operation类 package cn.no1.simplefactory; public abstract cl ...

  6. Phaser类详解

    Phaser允许并发多阶段任务.Phaser类机制是在每一步结束的位置对线程进行同步,当所有的线程都完成了这一步,才允许执行下一步. 一个Phaser对象有两种状态: 活跃态(Active):当存在参 ...

  7. PHP如何与搜索引擎Elasticsearch交互?

    一:参考官方文档 1. Elasticsearch 5.4.0英文手册:https://www.elastic.co/guide/en/elasticsearch/reference/5.4/sear ...

  8. 求数组的最小数、最大值,求一组数的平均数,sort函数详解,类数组转数组

    求数组的最小值和最大值 //求数组当中最大值和最小值 var arr=[3,2,6,1,45,23,456,23,2,6,3,45,37,89,30]; //第一种方法 根据排序方法来求最大值和最小值 ...

  9. 教育行业app开发新契机,在线教育要从B端出发

    近几年移动互联网教育风生水起,在运营模式上的开拓也各不相同,随着移动互联网进入下半场,好未来.新东方.猿题库.学霸君等,都在加速三四线地区布局,以及教育行业app开发和升级. 在移动互联网下半场,用户 ...

  10. 前端教你学UI——人物处理(一)

    一.序言 本文作为本系列的第一篇写UI的文章,开头还是有必要申明一些东西的,本系列主要是为了作为博主在前端工作之余学习UI的一个记录,同时为了让更多的同行学习到一些编程之外的其他东西.所以本文会尽可能 ...