美文网首页
2020-02-17python高手之路学习随笔(1)

2020-02-17python高手之路学习随笔(1)

作者: 七天七念 | 来源:发表于2020-02-18 19:05 被阅读0次

    第一章项目开始

    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 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()
    

    相关文章

      网友评论

          本文标题:2020-02-17python高手之路学习随笔(1)

          本文链接:https://www.haomeiwen.com/subject/txebfhtx.html