美文网首页Python
Google开源项目风格指南之 Python(二)

Google开源项目风格指南之 Python(二)

作者: 一曲广陵散 | 来源:发表于2016-05-31 09:37 被阅读61次

    概要

    文件和sockets,todo注释,导入格式,语句,访问控制,命名,Main
    

    内容

    文件和sockets

    在文件和sockets结束时候,显示的关闭它 除了文件之外,sockets或其他类似文件的对象在没有必要的情况下打开,会有很多副作用: 1可能会消耗有限的系统资源,如文件描述符,如果这些资源在使用后没有及时归还系统,用于处理这些对象的代码会将资源消耗殆尽 2持有文件将会阻止文件的其他操作,比如移动删除之类 3仅仅从逻辑上关闭文件和sockets,它们仍然可能会被共享的程序进行读写操作 幻想当文件对象析构时, 文件和sockets会自动关闭, 试图将文件对象的生命周期和文件的状态绑定在一起的想法, 都是不现实的. 因为有如下原因: 1没有任何方法可以确保运行环境会真正的执行文件的析构. 不同的Python实现采用不同的内存管理技术, 比如延时垃圾处理机制. 延时垃圾处理机制可能会导致对象生命周期被任意无限制的延长. 2对于文件意外的引用,会导致对于文件的持有时间超出预期(比如对于异常的跟踪, 包含有全局变量等).

    使用with语句管理文件:
    
    with open("hello.txt") as hello_file:
        for line in hello_file:
            print line
    
    对于不支持with语句的类似文件的对象,使用contextlib.closing():
    
    import contextlib
    
    with contextlib.closing(urllib.urlopen("http://www.python.org/")) as front_page:
        for line in front_page:
            print line
    

    TODO注释

    为临时代码使用todo注释,是一种短期解决方案 TODO注释应该在所有开头处包含”TODO”字符串, 紧跟着是用括号括起来的你的名字, email地址或其它标识符. 然后是一个可选的冒号. 接着必须有一行注释, 解释要做什么. 主要目的是为了有一个统一的TODO格式, 这样添加注释的人就可以搜索到(并可以按需提供更多细节). 写了TODO注释并不保证写的人会亲自解决问题. 当你写了一个TODO, 请注上你的名字. 如果你的TODO是”将来做某事”的形式, 那么请确保你包含了一个指定的日期(“2009年11月解决”)或者一个特定的事件(“等到所有的客户都可以处理XML请求就移除这些代码”).
    # TODO(kl@gmail.com): Use a "*" here for string repetition.
    # TODO(Zeke) Change this to use relations.

    导入格式

    每个导入应该独占一行 导入总应该放在文件顶部, 位于模块注释和文档字符串之后, 模块全局变量和常量之前. 导入应该按照从最通用到最不通用的顺序分组: 1标准库导入 2第三方库导入 3应用程序指定导入 每种分组中, 应该根据每个模块的完整包路径按字典序排序, 忽略大小写

    语句

    通常每个语句应该独占一行 不过, 如果测试结果与测试语句在一行放得下, 你也可以将它们放在同一行 如果是if语句, 只有在没有else时才能这样做. 特别地, 绝不要对 try/except这样做, 因为try和except不能放在同一行.

    访问控制

    在python中,对于琐碎的不太重要的访问函数,使用公有变量来取代它们 这样可以避免额外的函数调用开销, 当增加更多功能时候,可以用属性property来保持语法的一致性 另一方面,如果访问更复杂,或者变量的访问开销很显著.那么你应该使用像 get_foo()和set_foo()这样的函数调用,如果之前的代码行为允许通过属性访问,那么 就不要将新的访问函数和属性绑定,这样,任何试图通过老方法访问变量的代码就没法运行,使用者也就意识到复杂性发生了变化

    命名

    module_name package_name ClassName method_name ExceptionName 
    function_name GLOBAL_VAR_NAME instance_var_name
    function_parameter_name  local_var_name
    

    应该避免的名称 单字符名称,除了计数器和迭代器 包/模块名中的连字符- 双下划线开头并结尾的名称(python保留,例如__init__)
    命名约定: 1所谓内部internal表示仅模块内可用,或者,在类内是保护或者私有的 2 用单下划线开头表示模块变量或函数是protected的(使用import * from 时候不会包含) 3用下划线__开头的实例变量或方法表示类内私有 4将相关的类和顶级函数放在同一个模块中 5对类名使用大写字母开头的单词 模块名应该用小写加下划线的方式,
    python之父Guido推荐的规范

    Type Public Internal
    Modules lower_with_under _lower_with_under
    Packages lower_with_under
    Classes CapWords _CapWords
    Exceptions CapWords
    Functions lower_with_under() _lower_with_under()
    Global/Class Constants CAPS_WITH_UNDER _CAPS_WITH_UNDER
    Global/Class Variables lower_with_under _lower_with_under
    Instance Variables lower_with_under _lower_with_under (protected) or __lower_with_under (private)
    Method Names lower_with_under() _lower_with_under() (protected) or __lower_with_under() (private)
    Function/Method Parameters/Class Variables lower_with_under
    Local Variables lower_with_under
    推荐风格.png

    Main

    即使是一个打算被当作脚本的文件,也应该是可以导入的,并且简单的导入不应该导致这个脚本的主功能main functionality被执行,这是一种副作用,主功能应该放在一个main()函数中 在Python中, pydoc以及单元测试要求模块必须是可导入的. 你的代码应该在执行主程序前总是检查if __name__ == '__main__', 这样当模块被导入时主程序就不会被执行. 所有的顶级代码在模块导入时都会被执行. 要小心不要去调用函数, 创建对象, 或者执行那些不应该在使用pydoc时执行的操作.

    引用
    Google开源项目风格指南

    相关文章

      网友评论

        本文标题:Google开源项目风格指南之 Python(二)

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