python 编码规范

 

缩进

4个空格来缩进代码

 

分号

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

行长度

每行不超过80个字符

以下情况除外:

长的导入模块语句

注释里的URL

不要使用反斜杠连接行。

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

 

 

 

 

命名规范

避免的情况:

  1. 变量名尽量有意义,长度在一个字符以上(除了计数器和迭代器)
  2. 包,模块名中不要出现连字符(-)
  3. 不要将变量名以双划线开头并结尾(__init__python保留特殊变量)

 

命名约定

  1. 用单下划线(_)开头表示模块变量或函数是protected(使用import * from时不会包含).
  2. 用双下划线(__)开头的实例变量或方法表示类内私有.
  3. 将相关的类和顶级函数放在同一个模块里. 不像Java, 没必要限制一个类一个模块.
  4. 对类名使用大写字母开头的单词(CapWords, Pascal风格), 但是模块名应该用小写加下划线的方式(lower_with_under.py). 尽管已经有很多现存的模块使用类似于CapWords.py这样的命名, 但现在已经不鼓励这样做, 因为如果模块名碰巧和类名一致, 这会让人困扰.

 

PEP8 命名:

  1. 函数、变量及属性应用小写字母拼写,各单词之间以下划线相连,例如,lowercase_underscore
  2. 受保护的实例属性,应该以单个下划线开头,例如,_leading_underscore
  3. 私有的实例属性,应该以两个下划线开头,例如,__double_leading_underscore
  4. 类与异常,应该以每个单词首字母均大写来命名,例如,CapitalizedWord
  5. 模块级别的常量,应该全部采用大写字母来拼写,各单词之间以下划线相连,例如,ALL_CAPS
  6. 类中的实例方法,应该把首个参数命名为self,以表示该对象自身
  7. 类方法的首个参数,应该命名为cls,以表示该类自身

 

Python之父Guido推荐的规范

(所谓"内部(Internal)"表示仅模块内可用, 或者, 在类内是保护或私有的

Type

Public

Internal

Modules

lower_with_under

_lower_with_under

Packages

lower_with_under

 

Classes

CapWords

_CapWords

Exceptions

CapWords

 

Functions

lower_with_under()

_lower_with_under()

Global/Class Constants

CAPS_WITH_UNDER

_CAPS_WITH_UNDER

Global/Class Variables

lower_with_under

_lower_with_under

Instance Variables

lower_with_under

_lower_with_under (protected) or __lower_with_under (private)

Method Names

lower_with_under()

_lower_with_under() (protected) or __lower_with_under() (private)

Function/Method Parameters

lower_with_under

 

Local Variables

lower_with_under

 

 

 

注释

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

文档字符串

Python有一种独一无二的的注释方式: 使用文档字符串. 文档字符串是包, 模块, 类或函数里的第一个语句. 这些字符串可以通过对象的__doc__成员被自动提取, 并且被pydoc所用. (你可以在你的模块上运行pydoc试一把, 看看它长什么样). 我们对文档字符串的惯例是使用三重双引号"""( PEP-257 ). 一个文档字符串应该这样组织: 首先是一行以句号, 问号或惊叹号结尾的概述(或者该文档字符串单纯只有一行). 接着是一个空行. 接着是文档字符串剩下的部分, 它应该与文档字符串的第一行的第一个引号对齐. 下面有更多文档字符串的格式化规范.

函数和方法

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

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

外部不可见

非常短小

简单明了

文档字符串

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

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

Args:

列出每个参数的名字, 并在名字后使用一个冒号和一个空格, 分隔对该参数的描述.如果描述太长超过了单行80字符,使用2或者4个空格的悬挂缩进(与文件其他部分保持一致). 描述应该包括所需的类型和含义. 如果一个函数接受*foo(可变长度参数列表)或者**bar (任意关键字参数), 应该详细列出*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:

 

        {'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

 

类应该在其定义下有一个用于描述该类的文档字符串. 如果你的类有公共属性(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

# in the array and the array size and then do binary search to

# get the exact number.

 

if i & (i-1) == 0:        # true if i is a power of 2

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

 

模块导入

Import 语句应该按顺序划分成三个部分,分别表示标准库模块,第三方模块及自用模块,在每个部分中,各import语句应该按模块的字母顺序来排列

其他建议

 

如果一个类不继承自其它类, 就显式的从object继承. 嵌套类也一样

继承自 object 是为了使属性(properties)正常工作, 并且这样可以保护你的代码, 使其不受Python 3000的一个特殊的潜在不兼容性影响. 这样做也定义了一些特殊的方法, 这些方法实现了对象的默认语义, 包括 __new__, __init__, __delattr__, __getattribute__, __setattr__, __hash__, __repr__, and __str__ 

 

字符串

避免在大循环中用++=拼接字符串,这样做会创建不必要的临时对象,且会使得代码运行时间以二次方增长,作为替代方案, 你可以将每个子串加入列表, 然后在循环结束后用 .join 连接列表

 

 

使用with语句

为了确保文件句柄能在不用时关闭,请使用with...as语句

with open("hello.txt") as hello_file:

    for line in hello_file:

        print line 

转载于:https://www.cnblogs.com/linyihai/p/8671606.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/389949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5888. 网络空闲的时刻

5888. 网络空闲的时刻 给你一个有 n 个服务器的计算机网络,服务器编号为 0 到 n - 1 。同时给你一个二维整数数组 edges ,其中 edges[i] [ui, vi] 表示服务器 ui 和 vi 之间有一条信息线路,在 一秒 内它们之间可以传输 任意 数目的信息。再…

django框架预备知识

内容: 1.web预备知识 2.django介绍 3.web框架的本质及分类 4.django安装与基本设置 1.web预备知识 HTTP协议:https://www.cnblogs.com/wyb666/p/9383077.html 关于web的本质:http://www.cnblogs.com/wyb666/p/9034042.html 如何自定义web框架…

现实世界 机器学习_公司沟通分析简介现实世界的机器学习方法

现实世界 机器学习In my previous posts I covered analytical subjects from a scientific point of view, rather than an applied real world problem. For this reason, this article aims at approaching an analytical idea from a managerial point of view, rather tha…

拷贝构造函数和赋值函数

1、拷贝构造函数:用一个已经有的对象构造一个新的对象。 CA(const CA & c )函数的名称必须和类名称相一致,它的唯一的一个参数是本类型的一个引用变量,该参数是const 类型,不可变。 拷贝构造函数什么时…

[bzoj3036]绿豆蛙的归宿

题目大意:给定 $DAG$ 带边权连通图,保证所有点都能到达终点 $n$,每个点等概率沿边走,求起点 $1$ 到终点 $n$ 的期望长度。 题解:拓扑,然后倒着$DP$就可以了 卡点:无 C Code: #includ…

5902. 检查句子中的数字是否递增

5902. 检查句子中的数字是否递增 句子是由若干 token 组成的一个列表,token 间用 单个 空格分隔,句子没有前导或尾随空格。每个 token 要么是一个由数字 0-9 组成的不含前导零的 正整数 ,要么是一个由小写英文字母组成的 单词 。 示例&…

蒜头君吃桃

蒜头君买了一堆桃子不知道个数,第一天吃了一半的桃子,还不过瘾,有多吃了一个。以后他每天吃剩下的桃子的一半还多一个,到 nn 天只剩下一个桃子了。蒜头君想知道一开始买了多少桃子。 输入格式 输入一个整数 n(2≤n≤60)&#xff0…

Chrome keyboard shortcuts

2019独角兽企业重金招聘Python工程师标准>>> Chrome keyboard shortcuts https://support.google.com/chrome/answer/157179?hlen 转载于:https://my.oschina.net/qwfys200/blog/1927456

数据中心细节_当细节很重要时数据不平衡

数据中心细节定义不平衡数据 (Definition Imbalanced Data) When we speak of imbalanced data, what we mean is that at least one class is underrepresented. For example, when considering the problem of building a classifier, let’s call it the Idealisstic-Voter.…

辛普森悖论_所谓的辛普森悖论

辛普森悖论We all know the Simpsons family from Disneyland, but have you heard about the Simpson’s Paradox from statistic theory? This article will illustrate the definition of Simpson’s Paradox with an example, and show you how can it harm your statisti…

查看NVIDIA使用率工具目录

2019独角兽企业重金招聘Python工程师标准>>> C:\Program Files\NVIDIA Corporation\Display.NvContainer\NVDisplay.Container.exe 转载于:https://my.oschina.net/u/2430809/blog/1927560

2043. 简易银行系统

2043. 简易银行系统 你的任务是为一个很受欢迎的银行设计一款程序,以自动化执行所有传入的交易(转账,存款和取款)。银行共有 n 个账户,编号从 1 到 n 。每个账号的初始余额存储在一个下标从 0 开始的整数数组 balance…

余弦相似度和欧氏距离_欧氏距离和余弦相似度

余弦相似度和欧氏距离Photo by Markus Winkler on UnsplashMarkus Winkler在Unsplash上拍摄的照片 This is a quick and straight to the point introduction to Euclidean distance and cosine similarity with a focus on NLP.这是对欧氏距离和余弦相似度的快速而直接的介绍&…

bzoj2152 聪聪可可

题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃、两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好了,可是他们…

七、 面向对象(二)

匿名类对象 创建的类的对象是匿名的。当我们只需要一次调用类的对象时,我们就可以考虑使用匿名的方式创建类的对象。特点是创建的匿名类的对象只能够调用一次! package day007;//圆的面积 class circle {double radius;public double getArea() {// TODO…

机器学习 客户流失_通过机器学习预测流失

机器学习 客户流失介绍 (Introduction) This article is part of a project for Udacity “Become a Data Scientist Nano Degree”. The Jupyter Notebook with the code for this project can be downloaded from GitHub.本文是Udacity“成为数据科学家纳米学位”项目的一部分…

2044. 统计按位或能得到最大值的子集数目

2044. 统计按位或能得到最大值的子集数目 给你一个整数数组 nums ,请你找出 nums 子集 按位或 可能得到的 最大值 ,并返回按位或能得到最大值的 不同非空子集的数目 。 如果数组 a 可以由数组 b 删除一些元素(或不删除)得到&…

redis系列:分布式锁

1 介绍 这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁。会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁。 本篇文章会将分布式锁的实现分为两部分,一个是单机环境,另一个是集群环境下的Redis…

Qt中的坐标系统

转载:原野追逐 Qt使用统一的坐标系统来定位窗口部件的位置和大小。 以屏幕的左上角为原点即(0, 0)点,从左向右为x轴正向,从上向下为y轴正向,这整个屏幕的坐标系统就用来定位顶层窗口; 此外,窗口内部也有自己…

预测股票价格 模型_建立有马模型来预测股票价格

预测股票价格 模型前言 (Preface) If you are reading this, it’s most likely because you love to solve puzzles. I’m a very competitive person by nature. The Mt. Everest of puzzles, in my opinion, is trying to find excess returns through active trading in th…