博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PEP 8 摘录
阅读量:5966 次
发布时间:2019-06-19

本文共 2236 字,大约阅读时间需要 7 分钟。

前言

PEP 8 是python代码规范说明,里面规定了一些推荐的python代码的格式与用法。笔者将在本文中做一些总结,不是为了纯粹的翻译PEP 8,而是根据个人习惯与喜好进行的一个整理。如有谬误,欢迎指出。

PEP 8 官方文档:

A Follish Consistency is the Hobgoblin of Little Minds

永远不要为了和已有的文档保持一致而特意做出不自然的改变,否则,这只会限制你的思维,降低你的效率。Guido在这里写下的这些规范是处于代码的可读性考虑的,但是如果有的时候这些规范也不一定适用,例如:

  • 如果使用了这些规范会降低可读性;

  • 如果代码写于规范面世以前;

  • 如果代码使用到了老版本的依赖库,然而这些老版本的依赖库且兼容新的规范;

  • 如果已有代码使用了另外的一种风格;

代码规范

  1. 多参数情况下适当缩进

    # functiondef long_function_name(  # no argument on the first line        var_one, var_two,  # more indentation to distinguish this from the rest        var_three, var_four):    print(var_one)# listmy_list = [    1, 2, 3,    4, 5, 6,    7, 8, 9,  # add a comma here to be consistent with the preceding lines    ]# long if -statementif (this_is_one_thing        and that_is_another_thing)  # more indentation to distinguish this    do_something()
  2. 使用4个空格键<space>替代制表键<tab>

  3. 每行字符数控制在79个以内,必要的时候可使用\

    with open('/path/to/the/file/to/read') as file_1, \     open('/path/to/the/file/to/read') as file_2:    file_2.write(file_1.read())
  4. 多行分别import依赖库,且须放在全局变量和常量之前

    import osimport sysimport other_standard_librariesimport related_third_partiesipmort local applications
  5. python不区分双引号"和单引号',选一个适合你自己的风格,然后坚持下去

  6. 空白符的规则很繁琐,基本上和英文书写的规范一致,下面列举了部分情况

    ham[1:9], ham[1:9:3], ham[1::3], ham[1:9:]ham[lower+offset : upper+offset]  # equal amounts on either side of the operator
  7. 在分配默认值或者键值对赋值的时候,等号=周围不要用空格

    def complex(real, imag=0.0):    return magic(r=real, i=img)
  8. 关于注释,不要添加与代码逻辑相违背的注释,也不要添加显而易见的注释。记住一点,注释是为了增强可读性。

  9. 关于命名,不同的对象会有不同的规范:

    • 包:小写,可以使用但是不推荐使用下划线_。一些利用C/C++编写的包的名字可以以下划线开头;

    • 类:CapWords命名规范,例如CapitalizeWords, HTTPServerError

    • 异常:其本质是一个类,所以沿用上面的规范,另外需要以Error_开头

    • 函数:小写,并且用下划线隔开

    • 方法与变量:沿用函数的命名规范,另外非公有变量需要以_开头

方法规范

  1. None作比较的使用,不要使用==,使用is或者is not

  2. 字符串的合并操作不要使用a += b或者a = a + b,使用''.join()

  3. Excepetion而不是BaseException库中继承异常

  4. 抛出异常的时候,请使用raise ValueError('message')

  5. 在捕捉异常语句中,请尽可能指明捕捉的异常类别。如果需要捕捉所有扰乱程序的异常,可以使用

    try:    some_magic()except Exception as exc:    print(str(exc))    raise some_errorelse:    everything_is_good()finally:    clean_up()
  6. 对于不同的输入,函数的返回值类型应该保持一致

    def foo(x):    if x >= 0:        return math.sqrt(x)    else:        return None  # should also be a value or None
  7. 字符串操作中,尽可能使用字符串类的方法

    ''.startswith()''.endswith()
  8. 判断对象的类别,尽量使用isinstance()

欢迎讨论,欢迎指出问题

Weiming
25 May 2016

转载地址:http://wqtax.baihongyu.com/

你可能感兴趣的文章
推荐一款图片轮换jQuery插件
查看>>
Reading papers_6(Pattern Recognition And Machine Learning一书,ing...)
查看>>
HDU 3441 Rotation
查看>>
[zz]KVM 虚拟机故障排除一例
查看>>
hadoop 权威指南学习笔记ing(1)
查看>>
从代码中抽离数据的原则
查看>>
[Bootstrap] 8. 'Collapse', data-target, data-toggle & data-parent
查看>>
Android面向HTTP协议发送post请求
查看>>
125 Valid Palindrome
查看>>
湾区见闻
查看>>
php通过数组存取mysql查询语句的返回值
查看>>
oracle用户管理的完全恢复5:控制文件损坏(控制文件前后内容未改变)
查看>>
C#中的关键字
查看>>
【水】HDU 2099——整除的尾数
查看>>
adf常用方法总结
查看>>
MongoDB的C#驱动基本使用
查看>>
开源:秋式广告杀手源码
查看>>
Android开发之Canvas rotate方法释疑
查看>>
Cors 跨域Access-Control-Allow-Origin
查看>>
[React] React Router: Router, Route, and Link
查看>>