Google风格指南之 Python

本文摘要

python风格规范:
分号,行长度,括号,缩进,空行,空格,Shebang,注释,类,字符串

内容一 风格规范

分号

不在行尾加分号,不用分号将两条命令放在同一行


行长度

每行不超过80个字符(当导入模块语句和注释里的url长度超过时候例外) 不使用反斜杠连接行 python会将(),[],{},的行隐式的连接起来,如果需要可以在表达式的外围增加一对额外的圆括号 如果一个文本字符串在一行放不下,可以使用圆括号实现隐式行连接 在注释中,如果必要,将长的rul放在一行上
举例:

foo_bar(self, width, height, color='black', 
              design=None, x='foo',emphasis=None,     
              highlight=0) 

if (width == 0 and height == 0 and color == 'red' and 
    emphasis == 'strong'):

括号

宁缺勿滥的使用括号 除非是用于实现行连接,否则不要在返回语句或者条件语句中使用括号 在元组两边使用括号是可以的 for (x,y) in dict.items(): ...


缩进,空行

用四个空格来缩进代码 顶级定义之间空两行,比如函数或者类定义 方法定义/类定义与上一个方法/类之间空一行 函数或者方法中,某些地方觉得合适,也可以空一行


空格

按照标准的排版规范来使用标点两边的空格 括号内不要存在空格 不要在括号分号冒号前面加上空格,但是应该在分号,逗号,冒号后面加上空格(行尾除外) 参数列表,索引或者切片的左括号前面不加空格 在二元操作符两边都加上一个空格,至于算术操作符两边的空格根据自己判断,保持两侧一致 当=用于指示关键字参数或者默认参数的时候,不要在其两侧使用空格 不要用空格来垂直对齐多行件的标记,因为这样会成为维护的负担
举例:

Yes: spam(ham[1], {eggs: 2}, [])

No: spam( ham[ 1 ], { eggs: 2 }, [ ] )

Yes: spam(1)

no: spam (1)

Yes: dict['key'] = list[index]

No: dict ['key'] = list [index]

Yes: x == 1

No: 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)

Shebang

大部分的.py文件都不需要以#!为文件的开始 根据pep-394(python enhancement proposals)Python增强建议书, 程序的main文件应该以#!/usr/bin/python2 或者#!/usr/bin/python3开始#!先用于帮助内核找到python解释器,但是在导入模块时候,将会被忽略 只有在直接被执行的文件中才有必要加入#!

备注
在计算机科学中, Shebang(也称为Hashbang)是一个由井号和叹号构成的字符串>行(#!), 其出现在文本文件的第一行的前两个字符. 在文件中存在Shebang的情况下, 类Unix操作系统的程序载入器会分析Shebang后的内容, 将这些内容作为解释器指令, 并调用该指令, 并将载有Shebang的文件路径作为该解释器的参数. 例如, 以指令#!/bin/sh开头的文件在执行时会实际调用/bin/sh程序.


注释

确保对模块,函数,方法,行内注释使用正确的风格 文档字符串:文档字符串是python的一种独一无二的注释方式,文档字符串是包,模块,类或者函数里的第一个语句,这些字符串可以通过对象的__doc__成员被自动提取,并且被pydoc所用,对文档字符串使用三重双引号,第一行以句号问号惊叹号结尾的概述(或者文档字符串可以只有一行),接着是一个空行,最后是文档字符串的剩下的部分 模块:每个文件应该包含一个许可样板,根据项目使用的许可(比如:apache2.0,bsd等),选择合适的样板 函数和方法:一个函数必须要有文档字符串,除非它(外部不可见,非常短小,简单明了) 文档字符串包含:函数做什么,输入和输出的详细描述,通常,不应该描述怎么做,除非是一些复杂的算法,文档字符串提供足够的信息,当别人编写代码调用该函数时候,不需要看代码,只要看文档字符串就可以,对于复杂的代码,在代码的旁边加注释会比使用文档字符串更加有意义 关于函数的几个方面应该在特定的小节中进行描述记录, 这几个方面如下文所述. 每节应该以一个标题行开始. 标题行以冒号结尾. 除标题行外, 节的其他内容应被缩进2个空格 Args: 列出每个参数的名字, 并在名字后使用一个冒号和一个空格, 分隔对该参数的描述.如果描述太长超过了单行80字符,使用2或者4个空格的悬挂缩进(与文件其他部分保持一致). 描述应该包括所需的类型和含义. 如果一个函数接受*foo(可变长度参数列表)或者**bar (任意关键字参数), 应该详细列出*foo和**bar. Returns: (或者 Yields: 用于生成器) 描述返回值的类型和语义. 如果函数返回None, 这一部分可以省略. Raises: 列出与接口有关的所有异常.
实例:

函数的文档字符串.png

类:类应该在其定义下有一个用于描述该类的文档字符串,如果类有公共属性attributes,文档中应该有一个属性段,并且遵守和函数相同的格式

类的文档字符串.png

块注释和行注释:最需要写注释的是代码中有技巧性的部分, 如果在代码审查的时候必须解释一下,则应该现在就给它写注释, 对于复杂的操作,应该在操作之前写上注释, 对于不是一目了然的代码,应该在行尾加上注释 为了提高可读性,注释应该至少离开代码2个空格 不要描述代码,阅读代码的人有可能比你更懂python


如果一个类不继承自其他类,就显示的从object继承,嵌套类也一样 继承自object是为了使得属性properties正常工作,并且可以保护代码, 使不受python3000的一个特殊的潜在不兼容性影响 继承自object类,定义了一些特殊的方法,实现了对象的默认语义: __new__,__init__,__delattr__,__getattribute__,__setattr__,__hash__,__repr__,__str__
实例:

class SampleClass(object):
    pass


class OuterClass(object):

    class InnerClass(object):
          pass

class ChildClass(ParentClass):
"""Explicitly inherits from another class already."""

字符串

即使参数都是字符串,使用%操作符或者格式化方法格式化字符串 避免在循环中使用+和+=累加字符串,这样做会创建不必要的临时对象,并且导致二次方而不是线性的运行实际那, 可以将每个子串加入列表,然后在循环结束后用.join连接列表 也可以将每个子串写入到一个cStringIO.StringIO缓存中 在同一个文件中,保持使用字符串引号的一致性 为多行字符串使用三重双引号”“”而非三重单引号’‘’

引用
1 Google开源项目风格指南

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容

  • Python是一种对代码风格很重视的语言,从缩进就能看出这一点,Python强调易于理解。最近在负责代码重构的工作...
    知曰阅读 10,703评论 1 85
  • 更新时间:2016/5/13 介绍 本文档所提供的编码规范,适用于主要的Python发行版中组成标准库的Pytho...
    超net阅读 5,838评论 0 15
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,196评论 0 4
  • 参考 --Google Python Style Guide --Google Python 风格指南 - 中文版...
    LittleWizard阅读 2,714评论 0 4
  • 新人刚到,请多指教。
    对抗荒芜阅读 153评论 0 0