最需要写注释的是代码中那些技巧性的部分. 如果你在下次 代码审查 的时候必须解释一下, 那么你应该现在就给它写注释. 对于复杂的操作, 应该在其操作开始前写上若干行注释. 对于不是一目了然的代码, 应在其行尾添加注释.

如果一个文本字符串在一行放不下, 可以使用圆括号来实现隐式行连接:

如果你关注的是 Google 官方英文版, 请移步 Google Style Guide

deffetch_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: {'Serak': ('Rigel VII', 'Preparer'), 'Zim': ('Irk', 'Invader'), 'Lrrr': ('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: IOError: An error occurred accessing the bigtable.Table object. """pass

长的导入模块语句

以下代码中 Yes 表示推荐,No 表示不推荐。

下文所指的函数,包括函数, 方法, 以及生成器.

注释里的URL

为了提高可读性, 注释应该至少离开代码2个空格.

在二元操作符两边都加上一个空格, 比如赋值(=), 比较(==, , !=, <>, <=, >=, in, not in, is, is not), 布尔(and, or, not). 至于算术操作符两边的空格该如何使用, 需要你自己好好判断. 不过两侧务必要保持一致.

Yes:defcomplex(real,imag=0.0):returnmagic(r=real,i=imag)No:defcomplex(real,imag=0.0):returnmagic(r=real,i=imag)

简单明了

classSampleClass(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_spamself.eggs=0defpublic_method(self):"""Performs operation blah."""

括号

用4个空格来缩进代码

空格

Yes:# See details at#No:# See details at# \# v2.0/csv_file_name_extension_full_specificaTIon.html

Yes:ifx==4:printx,y x,y=y,xNo:ifx==4:printx,y x,y=y,x

关于函数的几个方面应该在特定的小节中进行描述记录, 这几个方面如下文所述. 每节应该以一个标题行开始. 标题行以冒号结尾. 除标题行外, 节的其他内容应被缩进2个空格.

块注释和行注释

Yes:spam(1)no:spam(1)Yes:dict['key']=list[index]No:dict['key']=list[index]

不要使用反斜杠连接行。

顶级定义之间空两行, 方法定义之间空一行

Yes:x==1No:x<1

Yes:foo=1000# 注释long_name=2# 注释不需要对齐dictionary={"foo":1,"long_name":2,}No:foo=1000# 注释long_name=2# 注释不需要对齐dictionary={"foo":1,"long_name":2,}Shebang

确保对模块, 函数, 方法和行内注释使用正确的风格

推荐:foo_bar(self,width,height,color='black',design=None,x='foo',emphasis=None,highlight=0)if(width==0andheight==0andcolor=='red'andemphasis=='strong'):

函数和方法

注释

# We use a weighted dictionary search to find out where i is in# the array. We extrapolate position based on the largest num# in the array and the array size and then do binary search to# get the exact number.ifi&(i-1)==0:# true iff i is a power of 2

Args: 列出每个参数的名字, 并在名字后使用一个冒号和一个空格, 分隔对该参数的描述.如果描述太长超过了单行80字符,使用2或者4个空格的悬挂缩进(与文件其他部分保持一致). 描述应该包括所需的类型和含义. 如果一个函数接受*foo(可变长度参数列表)或者**bar (任意关键字参数), 应该详细列出*foo和**bar. Returns: (或者 Yields: 用于生成器) 描述返回值的类型和语义. 如果函数返回None, 这一部分可以省略. Raises: 列出与接口有关的所有异常.

每行不超过80个字符

非常短小

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

每个文件应该包含一个许可样板. 根据项目使用的许可(例如, Apache 2.0, BSD, LGPL, GPL), 选择合适的样板.

#!先用于帮助内核找到Python解释器, 但是在导入模块时, 将会被忽略. 因此只有被直接执行的文件中才有必要加入#!.

不要用空格来垂直对齐多行间的标记, 因为这会成为维护的负担(适用于:, #, =等):

宁缺毋滥的使用括号

大部分.py文件不必以#!作为文件的开始. 根据 PEP-394 , 程序的main文件应该以 #!/usr/bin/python2或者 #!/usr/bin/python3开始.

一个函数必须要有文档字符串, 除非它满足以下条件:

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

Python会将 圆括号, 中括号和花括号中的行隐式的连接起来 , 你可以利用这个特点. 如果需要, 你可以在表达式外围增加一对额外的圆括号。

外部不可见

以下情况除外:

不要在逗号, 分号, 冒号前面加空格, 但应该在它们后面加(除了在行尾).

绝对不要用tab, 也不要tab和空格混用. 对于行连接的情况, 你应该要么垂直对齐换行的元素(见 :ref:`行长度` 部分的示例), 或者使用4空格的悬挂式缩进(这时第一行不应该有参数):

Yes:iffoo:bar()whilex:x=bar()ifxandy:bar()ifnotx:bar()returnfoofor(x,y)indict.items():...No:if(x):bar()ifnot(x):bar()return(foo)缩进

顶级定义之间空两行, 比如函数或者类定义. 方法定义, 类定义与第一个方法之间, 都应该空一行. 函数或方法中, 某些地方要是你觉得合适, 就空一行.

行长度

Yes:# 与起始变量对齐foo=long_funcTIon_name(var_one,var_two,var_three,var_four)# 字典中与起始值对齐foo={long_dicTIonary_key:value1+value2,...}# 4 个空格缩进,第一行不需要foo=long_funcTIon_name(var_one,var_two,var_three,var_four)# 字典中 4 个空格缩进foo={long_dictionary_key:long_dictionary_value,...}No:# 第一行有空格是禁止的foo=long_function_name(var_one,var_two,var_three,var_four)# 2 个空格是禁止的foo=long_function_name(var_one,var_two,var_three,var_four)# 字典中没有处理缩进foo={long_dictionary_key:long_dictionary_value,...}空行

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

模块

括号内不要有空格.

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

x=('这是一个非常长非常长非常长非常长 ''非常长非常长非常长非常长非常长非常长的字符串')

文档字符串应该包含函数做什么, 以及输入和输出的详细描述. 通常, 不应该描述"怎么做", 除非是一些复杂的算法. 文档字符串应该提供足够的信息, 当别人编写代码调用该函数时, 他不需要看一行代码, 只要看文档字符串就可以了. 对于复杂的代码, 在代码旁边加注释会比使用文档字符串更有意义.

分号

python灰产_python入门之编码风格规范分享相关推荐

  1. python灰产_Python学习一周有感

    从业至今,搞互联网将近7年了,如今,就连和我大学一个系的媳妇儿,都已经忘记了我是学工商管理的,每次聊天谈起来,都会用她那迷茫的眼神看着我:"你不是学计算机专业的吗?" 大学毕业,进 ...

  2. python灰产_Python进行目录的对比

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  3. 【PHP开发规范】继承与扩展:PSR-2 编码风格规范

    之前的一篇文章是对PSR-1的基本介绍 接下来是PSR-2 编码风格规范,它是 PSR-1 基本代码规范的继承与扩展. PSR-1 和PSR-2是PHP开发中基本的编码规范,大家其实都可以参考学习下, ...

  4. php 结构体_【开发规范】PHP编码开发规范下篇:PSR-2编码风格规范

    之前的一篇文章是对PSR-1的基本介绍 接下来是PSR-2 编码风格规范,它是 PSR-1 基本代码规范的继承与扩展. PSR-1 和PSR-2是PHP开发中基本的编码规范,大家其实都可以参考学习下, ...

  5. php psr 编码规范_PHP编码风格规范

    由于PHP的灵活性,很多人写起代码来也不讲求一个好的代码规范,使得本就灵活的PHP代码看起来很乱,其实PSR规范中的PSR-1和PSR-2已经定义了在PHP编码中的一些规范,只要我们好好遵守这些规范, ...

  6. python中文编码正则_python的unicode编码问题(以正则表达式为例)

    unicode是python的内部编码. 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成u ...

  7. python灰产_我用Python一键保存了半佛老师所有的骚气表情包

    本文首发于公众号「Python知识圈」,如需转载,请在公众号联系作者授权. 2019年发现两个有意思而且内容比较硬核的公众号.都是同一个人运营的,我们都叫他半佛老师,现实中的职业是风控,公众号内容涉及 ...

  8. Python编码风格规范

    Python风格规范 Python语言规范 Python语言规范 pychecker

  9. python代码测试_Python入门学习系列——Python代码测试

    Python代码测试 对于编写的代码,可以使用unittest模块中的相关方法进行测试. 测试函数 首先定义一个简单的函数,该函数用来合并名称并返回. name_function.py: def ge ...

最新文章

  1. Centos7下安装Docker
  2. git/ TortoiseGit如何使用证书登录
  3. 性能测试服务器数量与线上数量不同,性能需求分析
  4. Qt creator5.7 OpenCV249之图片膨化(含源码下载)
  5. beats耳机用安卓手机影响音效么_500元以下的头戴式耳机超高性价比推荐
  6. 日志存储 elasticsearch vs clickhouse
  7. c与指针 从一个字符串中提取子串_利用双指针解LeetCode第1297题:子串的最大出现次数
  8. UE4像素流送PixelStreaming
  9. 发那科2021参数_FANUC系统常用参数汇总
  10. 分享一个开源的流程图绘制软件--Diagram Designer
  11. 基于GIS的中国历代名人人生轨迹研究
  12. 裁员取暖?互联网行业深陷寒冬,网易被爆裁员30%!
  13. 穷举字符串c语言,穷举密码算法
  14. apple watch3连android,无需艳羡苹果党的Apple Watch 3 这款安卓通话神器亮了
  15. 【论文复刻】企业数字化转型与资本市场表现——来自股票流动性的经验证据(2007-2021年数据)
  16. PS动作快速把图片做成手绘油漆涂鸦画效果
  17. solr入门以及dih简介
  18. python sklearn的训练集测试集根据标签的比例来切分数据集
  19. 一个自动填写仿站小工具下载网址的按键精灵脚本
  20. python编写一个名为collatz()的函数,它有一个名为number的参数,如果参数是偶数,那么collatz()就打印出number//2,如果number是奇数,collatz()就打印3*

热门文章

  1. 十一年架构师教你怎么打造PHP程序员简历
  2. 谷歌开源项目Chromium的源码获取与项目构建(Win7+vs10/vs13)
  3. 虚拟机如何设置静态IP
  4. 原生微信小程序项目基础框架搭建
  5. libcurl异步请求+http长连接池
  6. 【Delphi入门】运算符与表达式
  7. 水经注有哪些单款地图下载器授权
  8. Opencv查找两张图片不同的部分以及图片中特定的像素替换
  9. FPGA图像处理_OTSU算法的实现(含源码)
  10. selenium和Python3.6实现招聘狗网站自动识别验证码登录、列表页、详情页爬取