Google开源项目Python语言规范讲解.doc

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Google开源项目Python语言规范讲解

Python语言规范 Lint Tip 对你的代码运行pylint 定义: pylint是一个在Python源代码中查找bug的工具. 对于C和C++这样的不那么动态的(译者注: 原文是less dynamic)语言, 这些bug通常由编译器来捕获. 由于Python的动态特性, 有些警告可能不对. 不过伪告警应该很少. 优点: 可以捕获容易忽视的错误, 例如输入错误, 使用未赋值的变量等. 缺点: pylint不完美. 要利用其优势, 我们有时侯需要: a) 围绕着它来写代码 b) 抑制其告警 c) 改进它, 或者d) 忽略它. 结论: 确保对你的代码运行pylint.抑制不准确的警告,以便能够将其他警告暴露出来。 你可以通过设置一个行注释来抑制告警. 例如: dict = something awful # Bad Idea... pylint: disable=redefined-builtin pylint警告是以一个数字编号(如?C0112?)和一个符号名(如?empty-docstring?)来标识的. 在编写新代码或更新已有代码时对告警进行医治, 推荐使用符号名来标识. 如果警告的符号名不够见名知意,那么请对其增加一个详细解释。 采用这种抑制方式的好处是我们可以轻松查找抑制并回顾它们. 你可以使用命令?pylint?--list-msgs?来获取pylint告警列表. 你可以使用命令pylint?--help-msg=C6409?, 以获取关于特定消息的更多信息. 相比较于之前使用的?pylint:?disable-msg?, 本文推荐使用?pylint:?disable?. 要抑制”参数未使用”告警, 你可以用”_”作为参数标识符, 或者在参数名前加”unused_”. 遇到不能改变参数名的情况, 你可以通过在函数开头”提到”它们来消除告警. 例如: def foo(a, unused_b, unused_c, d=None, e=None): _ = d, e return a 导入 Tip 仅对包和模块使用导入 定义: 模块间共享代码的重用机制. 优点: 命名空间管理约定十分简单. 每个标识符的源都用一种一致的方式指示. x.Obj表示Obj对象定义在模块x中. 缺点: 模块名仍可能冲突. 有些模块名太长, 不太方便. 结论: 使用?import?x?来导入包和模块. 使用?from?x?import?y?, 其中x是包前缀, y是不带前缀的模块名. 使用?from?x?import?y?as?z, 如果两个要导入的模块都叫做y或者y太长了. 例如, 模块?sound.effects.echo?可以用如下方式导入: from sound.effects import echo ... echo.EchoFilter(input, output, delay=0.7, atten=4) 导入时不要使用相对名称. 即使模块在同一个包中, 也要使用完整包名. 这能帮助你避免无意间导入一个包两次. 包 Tip 使用模块的全路径名来导入每个模块 优点: 避免模块名冲突. 查找包更容易. 缺点: 部署代码变难, 因为你必须复制包层次. 结论: 所有的新代码都应该用完整包名来导入每个模块. 应该像下面这样导入: # Reference in code with complete name. import sound.effects.echo # Reference in code with just module name (preferred). from sound.effects import echo 异常 Tip 允许使用异常, 但必须小心 定义: 异常是一种跳出代码块的正常控制流来处理错误或者其它异常条件的方式. 优点: 正常操作代码的控制流不会和错误处理代码混在一起. 当某种条件发生时, 它也允许控制流跳过多个框架. 例如, 一步跳出N个嵌套的函数, 而不必继续执行错误的代码. 缺点: 可能会导致让人困惑的控制流. 调用库时容易错过错误情况. 结论: 异常必须遵守特定条件: 像这样触发异常:?raise?MyException(Error?message)?或者?raise?MyException?. 不要使用两个参数的形式(?raise?MyException,?Error?message?)或者过时的字符串异常(?raise?Error?message?). 模块或包应该定义自己的特定域的异常基类, 这个基类应该从内建的Exception类继承. 模块的异常基类应该叫做”Error”. class Error(Exception): pass 永远不要使用?except:?

文档评论(0)

此项为空 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档