Google Python Style Guide(谷歌python规范指南)

来自:Google Python Style Guide

1. 背景

Python是谷歌内部使用的主要动态语言(脚本语言)。这份指导手册列出了使用Python的编程人员应该做的不应该做的

为了帮助你正确格式化代码,我们提供了一个用于Vim的设置文件,mac用户的话,使用默认设置就很好。

文件google_python_style.vim,规定了一些python缩进语法格式(这个代码文件很短,除了注释,代码就一个函数,30多行),如下:

function GetGooglePythonIndent(lnum)

  " Indent inside parens.
  " Align with the open paren unless it is at the end of the line.
  " E.g.
  "   open_paren_not_at_EOL(100,
  "                         (200,
  "                          300),
  "                         400)
  "   open_paren_at_EOL(
  "       100, 200, 300, 400)
  call cursor(a:lnum, 1)

另外,很多teams都会使用yapf来自动格式化,避免关于格式的争论。

关于yapf的介绍,英文版,对应的中文版

2. python语言规范

2.1 Lint

这里普及一下Lint是什么:

lint是最著名的C语言工具之一,是由贝尔实验室SteveJohnson于1979在PCC(PortableC Compiler)基础上开发的静态代码分析(static code analysis),一般由UNIX系统提供。
GCC 已经把 lint 的功能合并进编译器本身,编译时打开 -Wall 开关就会进行多数 lint 的检查。
百度百科

可以使用pylintrc在自己的代码上运行pylint,pylintrc的文件也不大,有大量的注释配置项,一共442行,大致如下:

[EXCEPTIONS]

# Exceptions that will emit a warning when being caught. Defaults to
# "Exception"
overgeneral-exceptions=StandardError,
                       Exception,
                       BaseException

2.1.1 定义

pylint是一个用于寻找python源码中的bugs和styles问题的工具,它可以发现典型的像非动态语言C和C++中编译器捕获的问题,然而由于python的动态特性,一些警告可能是不正确的,不过,错误的警告还是很少见的。

2.1.2 优点

可以捕获一些像拼写错误,分配之前就使用了向量(using-vars-before-assignment),这些简单容易忽略的错误

(Pros and Cons优缺点)

2.1.3 缺点

pylint不是完美的,为了充分利用其优点,有时需要在它的基础上做一些修改,消除一些警告信息等。

2.1.4 决策(decision)

确保pylint运行在你的代码上
如果警告信息不合适就屏蔽掉,以避免隐藏掉其他信息,屏蔽警告,可以设置行级别的注释,例如:

dict = 'something awful'  # Bad Idea... pylint: disable=redefined-builtin
  • pylint的每个warnings都是用符号名(empty-docstring)来表示,谷歌的warnings使用g-开头
  • 如果从符号名中看不出错误原因,可以添加一个注释。
  • 使用这种方式进行报错的好处是可以很容易搜索访问错误信息。

可以使用下面的命令,得到pylint的警告列表:

pylint --list-msgs

可以使用下面命令来得到更多特定信息(C6409是一种错误类型,就像下面示例中:C0301表示Line too long (103/100) (line-too-long)):

pylint --help-msg=C6409

推荐使用pylint:disable代替即将要被废弃的形式——pylint:disable-msg

可以在函数开头删除变量来屏蔽unused argument警告,删除的时候最好包含一个解释为什么删除的评论,比如:没用过(unused) 这个理由就很充分。

def viking_cafe_order(spam: str, beans: str, eggs: Optional[str] = None) -> str:
    del beans, eggs  # Unused by vikings.
    return spam + spam + spam

其他常见的屏蔽警告的方式包括:使用_作为未使用参数的标识,或者在参数前面使用前缀unused_,或者将其赋值为_。这些做法是合法的但是不再被鼓励,因为这样会中断调用程序按照名称传递参数,同时无法强制实际上没有使用的参数。


这里插一些内容,参考python中pylint使用方法(pylint代码检查)

可以在python的安装目录下(如果是使用anaconda安装),则目录类似:C:\XXXX\anaconda\Scripts,在这个目录下,可以看到有以下这些脚本/文件

|--Scripts
	|-- pep8.exe
	|-- pep8-script.py
	|-- pylint.bat
	|-- pylint.exe
	|-- pylint.exe

调用运行的时候,可以pylint XXX.py(当然,也支持一些参数,可以再去了解一下),如下,会打印出很多检查出来的警告或错误信息

$ pylint extract_frame.py
> ************* Module extract_frame
extract_frame.py:13:0: C0301: Line too long (103/100) (line-too-long)
extract_frame.py:16:0: C0301: Line too long (112/100) (line-too-long)
extract_frame.py:17:0: C0301: Line too long (114/100) (line-too-long)
extract_frame.py:29:0: C0325: Unnecessary parens after 'while' keyword (superfluous-parens)
extract_frame.py:55:0: C0301: Line too long (102/100) (line-too-long)
extract_frame.py:65:0: C0325: Unnecessary parens after 'while' keyword (superfluous-parens)
extract_frame.py:72:0: C0304: Final newline missing (missing-final-newline)
extract_frame.py:1:0: C0114: Missing module docstring (missing-module-docstring)
extract_frame.py:11:-1: W0105: String statement has no effect (pointless-string-statement)
extract_frame.py:12:0: C0103: Constant name "parser" doesn't conform to UPPER_CASE naming style (invalid-name)
extract_frame.py:21:0: C0116: Missing function or method docstring (missing-function-docstring)
extract_frame.py:22:10: E1101: Module 'cv2' has no 'VideoCapture' member (no-member)
extract_frame.py:24:18: E1101: Module 'cv2' has no 'CAP_PROP_FPS' member (no-member)
extract_frame.py:35:16: E1101: Module 'cv2' has no 'imwrite' member (no-member)
extract_frame.py:43:0: C0116: Missing function or method docstring (missing-function-docstring)
extract_frame.py:48:4: W0622: Redefining built-in 'type' (redefined-builtin)
extract_frame.py:63:0: C0116: Missing function or method docstring (missing-function-docstring)
extract_frame.py:64:10: E1101: Module 'cv2' has no 'VideoCapture' member (no-member)
extract_frame.py:66:13: W0612: Unused variable 'frame' (unused-variable)

-----------------------------------
Your code has been rated at 2.86/10

其余部分实在太长了,不翻译了,找到了一个中文翻译文档,参考:https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_language_rules/

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吨吨不打野

解决了问题,觉得还行就给点

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值