文件名称:
Python风格语言规范(google).pdf
开发工具:
文件大小: 1mb
下载次数: 0
上传时间: 2019-07-02
详细说明:
Python官方风格规范文档,编码规范,二合一pdf文档,
https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_language_rules/
https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/
在线版不提供下载,如果下载需求的 可以下载这个二合一的版本绝对不要用tab,也不要tab和空格混用.对于行连接的情况,你应该要么垂直对齐换行的元素(见
行长度部分的示例),或者使用4空格的悬挂式缩进这时第一行不应该有参数
Yes: ALigned with opening de limiter
foo= long function name (var one, var two
var three, var four)
#f aligned with opening delimiter in a dictionary
十oo
long dicti
key: valuel
value2,
4-space hanging indent, nothing on first line
oo long function name
var one, var two, var three,
var four
#f 4-space hanging indent in a dictionary
long_ dictionary key
long dictionary value
No: Stuff on first line forbidden
foo long function name(var one, var two,
var three, var four
#f 2-space hanging indent forbidden
foo= long function name(
var one, var two, var three,
var four
No hang ing indent in a dictionary
foo=i
long dictionary key:
long_ dictionary value,
空行
OTi
顶级定义之间空两行,方法定义之间空一行
顶级定义之间空两行,比如函数或者类定义方法定义,类定义与第一个方法之间,都应该空一
行函数或方法中,某些地方要是你觉得合适,就空一行
空格
T
按照标准的排版规范来使用标点两边的空格
括号内不要有空格
Yes: spam(ham[1], teggs: 21, L)
No: spam( ham[ 1 1,[ eggs: 2,[])
不要在逗号,分号,冒号前面加空格,但应该在它们后面加(除了在行尾)
Yes:i「
4
int x
X, y=y, X
No:i千X==4
rint x
参数列表,索引或切片的左括号前不应加空格.
Yes: spam(1)
no: spam(1)
Yes: dict[ 'key]= list[index]
No: dict[key= list [index]
在二元操作符两边都加上一个空格,比如赋值(=),比较(==,<,>,!=,<>,<=,>=,in, not in,is,is
not),布尔and,or,not).至于算术操作符两边的空格该如何使用,需要你自己好好判断.不过两
则务必要保持一致
Yes: x== 1
当’=用于指示关键字参数或默认参数值时,不要在其两侧使用空格.
Yes: def complex(real, imag=0.0): return magic(r=real, i=imag)
No: def complex(real, imag =0.0): return magic(r real, i= imag
不要用空格来垂直对齐多行间的标记,因为这会成为维护的负担适用于,#,=等)
Y
foo 1000 #f comment
long_ name =2 comment that should not be aligned
dictionary
long name": 2,
1000 #f comment
long name =2
comment that should not be aligned
dictionary
long name: 2,
Shebang
O Tip
大部分py文件不必以#作为文件的开始.根据PEP-394,程序的man文件应该以
#!/usr/bin/ python2或者#!/us/bin/ python3开始
译者注:在计算机科学中, Shebang(也称为 Hashbang)是一个由井号和叹号构成的字符串行(),
其出现在文本文件的第一行的前两个字符在文件中存在 Shebang的情况下,类Unⅸ操作系统的
程序载入器会分析 Shebang后的内容,将这些内容作为解释器指令,并调用该指令,并将载有
Shebang的文件路径作为该解释器的参数.例如,以指令#/bin/sh开头的文件在执行时会实际调
用/bin/sh程序)
#先用于帮助内核找到 thorη解释器,但是在导入模块时,将会被忽略.因此只有被直接执行的
文件中才有必要加入#!
注释
O Tip
确保对模块,函数,方法和行内注释使用正确的风格
文档字符串
Python有一种独一无二的的注释方式:使用文档字符串.文档字符串是包,模块,类或函数里
的第一个语句这些字符串可以通过对象的doc成员被自动提取,并且被 pydoc所用.(你
可以在你的模块上运行pydo试一把,看看它长什么样).我们对文档字符串的惯例是使用三
重双引号"(PEP-257).一个文档字符串应该这样组织:首先是一行以句号,问号或惊叹号
结尾的概述(或者该文档字符串单纯只有一行).接着是一个空行.接着是文档字符串剩下的
部分,它应该与文档字符串的第一行的第一个引号对齐.下面有更多文档字符串的格式化规
模块
每个文件应该包含一个许可样板.根据项目使用的许可(例如, Apache2.0,BSD,LGPL,GPL,
选择合适的样板.
函数和方法
下文所捐的函数包括函数,方法,以及生成器
个函数必须要有文档字符串,除非它满足以下条件:
1.外部不可见
2非常短小
3.简单明了
文档字符串应该包含函数做什么,以及输入和输出的详细描述.通常,不应该描述怎么做”,
除非是一些复杂的算法.文档字符串应该提供足够的信息,当别人编写代码调用该函数时,
他不需要看一行代码,只要看文档字符串就可以了.对于复杂的代码,在代码旁边加注释会
比使用文档字符串更有意义
关于函数的几个方面应该在特定的小节中进行描述记录,这几个方面如下文所述每节应
该以一个标题行开始.标题行以冒号结尾.除标题行外,节的其他内容应被缩进2个空格.
Args:
列出每个参数的名字,并在名字后使用一个冒号和一个空格,分隔对该参数的描述如果
描述太长超过了单行80字符,使用2或者4个空格的悬挂缩进(与文件其他部分保持一致
描述应该包括所需的类型和含义如果一个函数接受*foo可变长度参数列表)或者xbar
(任意关键字参数),应该详细列出foo和*bar
Returns:威者 Yields:用于生成器)
描述返回值的类型和语义如果函数返回None,这一部分可以省略
Raises
列出与接口有关的所有异常
def fetch bigtable rows (big table, keys, other silly variable=None
Fetches rows from a Bigtable
Retrieves rows pertaining to the given keys from the Table instance
represented by big tabLe. SiLly things may happen if
other silly variable is not None
Args
big table: An open Bigtable Table instance
keys: A sequence of strings representing the key of each table row
to fetch
other siLLy variabLe: Another optionaL variable, that has a much
Longer name than the other args, and which does nothing
Returns
A dict mapping keys to the corresponding table row data
fetched. Each row is represented as a tuple of strings. For
exampLe
t' Serak:(Rigel VII, 'Preparer
Zim:('Trk,,'Invader )
(Omicron Persei 8, Emperor
If a key from the keys argument is missing from the dictionary,
then that row was not found in the table
Raises
Error: An error occurred accessing the bigtable. Table object
pass
类
类应该在其定义下有一个用于描述该类的文档字符串.如果你的类有公共属性( Attributes,
那么文档中应该有一个属性( Attributes段并且应该遵守和函数参数相同的格式
class SampleClass(object)
Summary of class here
Longer class information
Longer class information
Attributes
Likes spam: A boolean indicating if we Like SPAM or not
eggs: An integer count of the eggs we have laid
def init(self, likes spam=False)
Inits Sampleclass with blah
self likes spam likes spam
self. eggs =0
def public method(self):
Performs operation blah
块注释和行注释
最需要写注释的是代码中那些技巧性的部分.如果你在下次代码审査的时候必须解释-一下,
那么你应该现在就给它写注释.对于复杂的操作,应该在其操作开始前写上若干行注释.对
于不是一目了然的代码,应在其行尾添加注释.
we use a weighted dictionary search to find out where i is in
the array. We extrapolate position based on the largest num
#f in the array and the array size and then do binary search to
#f get the exact number.
ifi&(i-1)==8
True if i is e or a power of 2.
为了提高可读性,注释应该至少离开代码2个空格.
另一方面,绝不要描述代码.假设阅读代码的人比你更懂 Python,他只是不知道你的代码要
做什么.
#f BAD COMMENT: Now go through the b array and make sure whenever i occurs
f the next element is i+1
类
OTi
如果一个类不继承自其它类,就显式的从 object继承嵌套类也一样
Yes: class SampleClass(object )
pass
class outerclass(object)
class InnerClass(object)
class ChildClass(Parentclass):
plicitly inherits f
already
No: class SampleClass
class outer class
lass Innerclass
继承自 object是为了使属性 (properties)正常工作,并且这样可以保护你的代码,使其不受
PEP30o0的一个特殊的潜在不兼容性影响.这样做也定乂了一些特殊的方法,这些方法实现了
对象的默认语义,包括
n
t
delattr getattribute
setattr
hash
repr and str
宇符串
即使参数都是字符串,使用%操作符或者格式化方法格式化字符串.不过也不能一概而论,你
需要在+和%之间好好判定.
Yes: x= a+ b
x=%s, %s!'%(imperative, expletive)
x=0,0!' format(imperative, expletive)
X="name:‰s; score:‰’%(name,n
x='name: t; score: format (name, n)
N:X="‰5%5′%(a,b)#use+ in this case
0t. format(a, b)# use in this case
x= imperative +, expletive
x name: + name
score
str(n
避免在循环中用+和+=操作符来累加字符串.由于字符串是不可变的,这样做会创建不必要的临
时对象,并且导致二次方而不是线性的运行时间作为替代方案,你可以将每个子串加入列表
然后在循环结束后用join连接列表也可以将每个子串写入一个 cString. Stringy缓存
中)
Yes: items =['
for last name, first name in employee list
items. append('%s, %s | s/tr>'%(last name, first name ))
tems, append(
employee table ='. join(items)
No: employee table ='
for last_ name, first name in employee list:
employee table +='%s, %s |
'% (last name, first name)
employee table +='
在同一个文件中,保持使用字符串引号的一致性.使用单引号或者双引号”之一用以引用字符串,
并在同一文件中沿用.在字符串内可以使用另外一种引号,以避免在字符串中使用. GPyLintt已
经加入了这一检查
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.