2020-02-17python高手之路学习随笔(1)
第一章项目开始
2.7是python2的最后一个版本,支持到2020年结束。
一,项目布局
requirements.txt 应该包含Python包所需要的依赖包。
自动生成requirements.txt,pip freeze > requirements.txt
使用requirements.txt 安装依赖包pip install -r requirements.txt
这里的requirements.txt名字可以随意修改牡丹石requirements是最常用通俗的。
README.rst 应该为用户提供重要信息。
在python2里面需要创建init.py ,这种名称的py文件来表示本目录是一个python的包。
而在python3里面不需要这种写法了,
二,代码风格与自动检查
Pyhton代码的PEP8标准:
1每个缩进层级使用4个空格。
2每行最多79个字符。
3顶层的函数或类的定义之间空两行。
4采用ADCII或者UTF-8编码文件。
5在文件顶端,注释和文档说明之下,每行每条import 语句只能导入一个模块,同时要按标准库,第三方库和本地库的导入顺序进行分组。
6在小括号,中括号,大括号之间或者逗号之前没有额外的空格。
7类的命名采用骆驼命名法,如 CamenCase,异常的定义使用Error前缀,函数的命名使用下划线分隔的小写字母,如separated_by_underscores,私有属性或者方法用下划线开头定义,如_private。(需要注意的是类的内置方法一般都是用双下划线开头的,如help)
PEP8 检测工具
您可以使用以下命令安装、升级和卸载pep8。
pip install --upgrade pep8
$ pip uninstall pep8
或者使用网页下载,但是外网太卡了
https://pypi.org/project/pep8
1 检测命令为 pep8 --first optparse.py ,这里的optparse.py 可以是你要检测的文件名
类似于此
10.py:2:1: E265 block comment should start with '# '
py后面的2是行数,1位置的数字应该是代表错误所在的位置,算上空格的位置
E代表错误,W代表小错误,后面的数字2开头表示跟空格有关,3开头表示跟空行有关
2 也可以直接显示错误代码,不过适用性没尚明的命令高
pep8 --show-source --show-pep8 optparse.py
3或者可以显示每个错误的发现频率
pep8 --statistics -qq Python-2.5/Lib
但是最实用的单文件检测应该是第一个命令
其他类似的检车工具:
pyflakes(https://launchpad.net/pyflakes) 支持插件
pylint (https://pypi.python.org/pypi/pylint) 支持默认PEP8,支持插件
flake8 (https://pypi.python.org/pypi/flake8) 结合pyflakes个pep8
hacking(https://pypi.python.org/pypi/hacking) hacking是flake8 的进化版本
以上工具都可以用命令pip install +名字 下载 然后进网站看用法。
按书上Joshua Harlow所说,python的最大遗憾还是因为gil的原因导致的python缺少多核并发的能力
上面说一个名为goless的Python库能简单点,但是按现在这种时代 还是默默无闻的情况来看,估计是
再竞争中被 多进程库给淘汰了吧。然后实验 了一下,实际上这玩意还是基于gevent写的库,只是改变了风格
实际上因为多加了一层还不如学学怎么使用gevent这种库实际,被淘汰不是没有原因的。
自此高手之路第一章 项目开始结束,主要还是讲了一些包的写法组成以及语法规范的问题。
附上goless例子,你需要安装goless跟gevent库,以CPython为例
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from __future__ import print_function
import goless
def simple():
channel = goless.chan()
def goroutine():
while True:
value = channel.recv()
channel.send(value ** 2)
goless.go(goroutine)
for i in range(2, 5):
channel.send(i)
squared = channel.recv()
print('%s squared is %s' % (i, squared))
# Output:
# 2 squared is 4
# 3 squared is 9
# 4 squared is 16
if __name__ == '__main__':
simple()