Python 的作者既优雅又高冷又 鬼毛的 再 PEP8 里规定了 Python 程序编写规范。(风格和格式)

一、基本观念

  1、可读性之上,代码被读的次数肯定比被写的次数多。因此作者十分重视代码的可读性,后文中的很多规定都是基于这个出发点考虑的。

  2、一致性次之,如果所有的代码的 style 与本指南不符,有限考虑一致性,但是新编写的模块有限遵风格指南;

二、具体操作

  1、布局和格式

    +  缩进: 优先用四个空格而不是制表符(tab)

    +  多行连读语句: 对齐。几个正面的例子:

# 括号内开头对齐
foo = long_function_name(var_one, var_two,
var_three, var_four) # Hanging indent: 括号第一行不填,第二行开始括号内的部分加倍缩进(多4个空格)
def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)

    + 多行构赋值: 后半括号要独立一行,且和前面的行对齐,两种方式均可:

my_list = [
, , ,
, , ,
]
my_list = [
, , ,
, , ,
]

    +  行的长度少于 72 个字符:主要时为了便于分屏对比代码(作者操心命)。

     换行的操作:优先用括号把并列的长语句括起来。然后就可以再连接处换行了,比如 with 或者 assert 语句,再用反斜杠。

    +  在操作符 (+、-、*、\)之前换行:方便阅读时快速理解操作符后面的内容是被如何操作的,

    +  空白行:顶层 function 和 class  前后各两行,method 前后各一行

    +  导入 import : 不同的库每个导入各占一行,相同的库里多个模块可以在一行导入,导入顺序: 标准库 -> 空白行,第三方库、本地库

    + 各种符合语句,最好各占一行,为了可读性,不要再一行内出现多个语句

  2、符号

    + 引号:string 的两侧单引号双引号都可以,string 的内容里如果又但单引号,外面的就用双引号,反之亦然,尽量不适用反斜杠类 escape,影响可读性。

    + 空白符:

      1、各种括号的内部不直接用空白符 

YES: spam(ham[], {egg: })
No: spam( ham( ), { egg: })

      2、逗号分号冒号前面不直接用空白符

Yes: if x == : print x, y; x, y = y, x
No: if x == : print x , y ; x , y = y , x

      3、function 和 variable 名字和括号之间不加空白符

      4、避免在行尾使用多余的空白符,影响某些符号的运行,主要是你很难发现

      5、运算符两端要各加且只加一个空白符,遇到多层优先级的运算,只在最低优先级的运算符两侧加空白符:

# Yes
i = i +
submitted +=
x = x* -
hypot2 = x*x + y*y
c = (a+b) * (a-b) # No
i=i+
submitted +=
x = x * -
hypot2 = x * x + y * y
c = (a + b) * (a - b)

      6、关键字参数的赋值等号不用空白符

def complex(real, imag=0.0):
return magic(r=real, i=imag)

    +  末尾逗号:tuple 和 list的最后一项是可以接逗号的

        这里说明一下:如果 tuple 和 list 是分行构建的,且每一行左后可以接一个逗号,方便以后的扩展保持统一格式:如果是在同一行构建的,则没必要最后接一个逗号

   3、注释

    +  注释是保证注解的内容保持更新的,不然和代码不符,还真倒不如注释

    +  注释要说人话, 用完整的语句编写,开头大写,句尾加句号

    +  注释据句尾句号后加两个空白符在换行

    +  大段注释,每一行开头 # 开头,几个空白符在写内容,段落之间的空行也用 # 开头

    +  同行注释尽量不使用,干扰阅读代码。如果某些特殊情况必须使用,和代码直接保持两个以上的空白符

    +  docstring : 给所有公开的模块,函数。类写 dcostring. 私有的就不用写了,用注释时代替,

      这种注释应该出现在 def 的后一行,默认用三双引号来做

      docstring : 对于多行的 docstring ,结尾的三引号要独占一行

    4、 命名

      +  命名的风格又很多种,Python 基本使用的是 lower_case_with_underscore

      +  使用 _single_leading_underscore::表示弱的内部使用,在 from X import * 是不会导入这一类对象

      +   使用 single_tailing_underscore_:为了略微改变那些和 Python 的 keyword 冲突的命名

      +   使用__double_leading_underscore:类的外面是无法调用这个对象

      +   首位都有双下划线的命名只限 python 内部使用,不要随意起这种名

      +   不要只用小写的 ”i“ 大写的 ”O“,容易引起误解

      +  package 和 moudle 的命名用 lower_case_with_underscore

      +  类的命名使用 CapWords

      +  Class 内部的命名,能使用非公开就用非公开,因为把一个 attribute 由 非公开变为公开要比反过来容易太多

    5、编程过程中的风格建议

      +   和 None 做比较时永远用 is \  is  not 而不是 ==

       +   用 if x in not y 而不是 if not x is y:更贴经自然语言

      +  定义函数的时候,永远用 def 而不是把一个 lambda 函数赋给一个变量名。lambda的唯一使用场景应该是一个复杂的表达里嵌入使用

      +  在使用  Exception 的时候,从 Exception 到处 为不是 BaseException

      + 在使用 try...except ... 排除 意外的时候,明确规定 except 的意外情况而不是直接使用 ‘except’:,这是确保不会把 SystemExit 算进去,那样的话 contrl-c 衲衣操作

      +  保证Return 的一致性:  一个函数里要么都不 return,要么每种情况的 return 都明确规定, 即便return None

def foo(x):
if x >= :
return math.sqrt(x)
else:
return None def bar(x):
if x < :
return None
return math.sqrt(x)

    +  永远优先使用 string 的 methods 不是直接使用 string module,比如用 .startwith(),  .endwith() 来代替 slicing 作比较

    +    记住空的有序容器比如 tuple set string list 的布尔值是 False

    +   永远不要把布尔值 和 True / False 作比较,直接用它的真假来控制流程

python 编程的 Style Guide的更多相关文章

  1. [Advanced Python] 16 - Google style guide for programming

    Ref: Python 风格指南 - 内容目录 这里主要记录一下值得注意的地方. Python语言规范 Lint:vsCode自带 导入:完整路径 异常 Ref: [Python] 07 - Stat ...

  2. PEP 8 – Style Guide for Python Code

    原文:PEP 8 – Style Guide for Python Code PEP:8 题目:Python代码风格指南 作者:Guido van Rossum, www.yszx11.cnBarry ...

  3. [Guide]Google Python Style Guide

    扉页 项目主页 Google Style Guide Google 开源项目风格指南 - 中文版 背景 Python 是Google主要的脚本语言.这本风格指南主要包含的是针对python的编程准则. ...

  4. python coding style guide 的高速落地实践

    python coding style guide 的高速落地实践 机器和人各有所长,如coding style检查这样的可自己主动化的工作理应交给机器去完毕,故发此文帮助你在几分钟内实现coding ...

  5. python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准

    python coding style guide 的快速落地实践 机器和人各有所长,如coding style检查这种可自动化的工作理应交给机器去完成,故发此文帮助你在几分钟内实现coding st ...

  6. 一张图总结Google C++编程规范(Google C++ Style Guide)

    Google C++ Style Guide是一份不错的C++编码指南,我制作了一张比較全面的说明图,能够在短时间内高速掌握规范的重点内容.只是规范毕竟是人定的,记得活学活用.看图前别忘了阅读以下三条 ...

  7. 《自拍教程9》Python编程风格规范

    Python编程风格规范 根据Python官方提供的Python编程风格规范: Style Guide for Python Code, 即PEP8规范, https://www.python.org ...

  8. [Guide]Google C++ Style Guide

    0.0 扉页 项目主页 Google Style Guide Google 开源项目风格指南 -中文版 0.1 译者前言 Google 经常会发布一些开源项目, 意味着会接受来自其他代码贡献者的代码. ...

  9. Google C++ Style Guide

    Background C++ is one of the main development languages used by many of Google's open-source project ...

随机推荐

  1. python之路之socket

    一.网络编程 1.socket介绍 import socket def handle_request(client): buf = client.recv(1024) client.sendall(b ...

  2. access denied (2)

    除了https://www.cnblogs.com/bneglect/p/11558593.html  这里提到的以外,今天再记录一个新的原因造成这种情况的解决方法.path_info 这个算是路由模 ...

  3. Python 多任务(线程) day2 (2)

    同步 1.概念 :同步就是协同步调,按预定的先后次序运行 互斥锁 当多个线程几乎同时修改某一共享数据的时候,需要运行同步控制,最简单的同步机制是引入互斥锁.某个线程要更改共享数据时,先将其锁定,此时资 ...

  4. ubuntu 切换用户

    app切换root ubuntu: sudo su - app sudo su - root centos : sudo su ############ root 切换app sudo su - ap ...

  5. multiprocessing 多进程实现 生产者与消费者模型JoinableQueue

    from multiprocessing import JoinableQueue import time import random import asyncio import logging fr ...

  6. 迭代器:遍历集合元素的操作. iterator()

    package seday11; import java.util.ArrayList;import java.util.Collection;import java.util.Iterator; / ...

  7. dw选择器

    选择器并没有一个固定的定义,在某种程度上说,jQuery的选择器和样式表中的选择器十分相似.选择器具有如下特点:1.简化代码的编写2.隐式迭代3.无须判断对象是否存在jQuery 的选择器可谓之强大无 ...

  8. Mobius反演定理-BZOJ2154

    This article is made by Jason-Cow.Welcome to reprint.But please post the article's address. 莫比乌斯定理(未 ...

  9. 1.0 Jmeter 安装运行

    1.百度搜索JDK进行下载JDK安装与环境变量配置http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html ---- 在JDK安装完 ...

  10. 概率dp light1038

    题意:问一个数一步步除以他的除数,最后转移到1,所需要的期望步数. 思路,概率dp问题,从结果逆推,本题是从1开始往后推,怎么个推法呢.参考一下别人的博客: 求操作次数的期望时,先设定第i个因子给期望 ...