如何规范的编写python代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何规范的编写python代码相关的知识,希望对你有一定的参考价值。

参考技术A PEP8 Python 编码规范
一 代码编排
1 缩进。4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。
2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号。换行点要在操作符的后边敲回车。
3 类和top-level函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无关段落之间空一行;其他地方尽量不要再空行。
二 文档编排
1 模块内容的顺序:模块说明和docstring—import—globals&constants—其他定义。其中import部分,又按标准、三方和自己编写顺序依次排放,之间空一行。
2 不要在一句import中多个库,比如import os, sys不推荐。
3 如果采用from XX import XX引用库,可以省略‘module.’,都是可能出现命名冲突,这时就要采用import XX。
三 空格的使用
总体原则,避免不必要的空格。
1 各种右括号前不要加空格。
2 逗号、冒号、分号前不要加空格。
3 函数的左括号前不要加空格。如Func(1)。
4 序列的左括号前不要加空格。如list[2]。
5 操作符左右各加一个空格,不要为了对齐增加空格。
6 函数默认参数使用的赋值符左右省略空格。
7 不要将多句语句写在同一行,尽管使用‘;’允许。
8 if/for/while语句中,即使执行语句只有一句,也必须另起一行。

四 注释
总体原则,错误的注释不如没有注释。所以当一段代码发生变化时,第一件事就是要修改注释!
注释必须使用英文,最好是完整的句子,首字母大写,句后要有结束符,结束符后跟两个空格,开始下一句。如果是短语,可以省略结束符。
1 块注释,在一段代码前增加的注释。在‘#’后加一空格。段落之间以只有‘#’的行间隔。比如:
# Description : Module config.
#
# Input : None
#
# Output : None

2 行注释,在一句代码后加注释。比如:x = x + 1 # Increment x
但是这种方式尽量少使用。
3 避免无谓的注释。
五 文档描述
1 为所有的共有模块、函数、类、方法写docstrings;非共有的没有必要,但是可以写注释(在def的下一行)。
2 如果docstring要换行,参考如下例子,详见PEP 257
"""Return a foobang

Optional plotz says to frobnicate the bizbaz first.

"""

六 命名规范
总体原则,新编代码必须按下面命名风格进行,现有库的编码尽量保持风格。
1 尽量单独使用小写字母‘l’,大写字母‘O’等容易混淆的字母。
2 模块命名尽量短小,使用全部小写的方式,可以使用下划线。
3 包命名尽量短小,使用全部小写的方式,不可以使用下划线。
4 类的命名使用CapWords的方式,模块内部使用的类采用_CapWords的方式。
5 异常命名使用CapWords+Error后缀的方式。
6 全局变量尽量只在模块内有效,类似C语言中的static。实现方法有两种,一是__all__机制;二是前缀一个下划线。
7 函数命名使用全部小写的方式,可以使用下划线。
8 常量命名使用全部大写的方式,可以使用下划线。
9 类的属性(方法和变量)命名使用全部小写的方式,可以使用下划线。
9 类的属性有3种作用域public、non-public和subclass API,可以理解成C++中的public、private、protected,non-public属性前,前缀一条下划线。
11 类的属性若与关键字名字冲突,后缀一下划线,尽量不要使用缩略等其他方式。
12 为避免与子类属性命名冲突,在类的一些属性前,前缀两条下划线。比如:类Foo中声明__a,访问时,只能通过Foo._Foo__a,避免歧义。如果子类也叫Foo,那就无能为力了。
13 类的方法第一个参数必须是self,而静态方法第一个参数必须是cls。
七 编码建议
1 编码中考虑到其他python实现的效率等问题,比如运算符‘+’在CPython(Python)中效率很高,都是Jython中却非常低,所以应该采用.join()的方式。
2 尽可能使用‘is’‘is not’取代‘==’,比如if x is not None 要优于if x。
3 使用基于类的异常,每个模块或包都有自己的异常类,此异常类继承自Exception。
4 异常中不要使用裸露的except,except后跟具体的exceptions。
5 异常中try的代码尽可能少。
6 使用startswith() and endswith()代替切片进行序列前缀或后缀的检查。
7 使用isinstance()比较对象的类型。
8 判断序列空或不空
9 字符串不要以空格收尾。
10 二进制数据判断使用 if boolvalue的方式。

python如何学习

最近开始整理python的资料,博主建立了一个qq群,希望给大家提供一个交流的同平台 78486745 。

一、编程开发规范

作为一门开发语言,python自然也有自己的编程规范,以下是特有且必须遵循的规范:

  1. 代码开头
    python中代码必须顶格编写,除非被作为语句嵌套在条件判断或条件循环中。
  2. 代码层级
    代码与代码之间的逻辑层级关系(涉及逻辑判断、包含关系等情况)通过空格来界定,第一层顶格编写,第二层(被包含或者逻辑判断后的执行动作)开头预留4个空格(如果不考虑跨平台可以使用tab)
  3. 对齐方式
    同一个层级的代码必须严格对齐,如第一层都是顶格,第二层都是4个空格开头,第三层则是8个空格,以此类推。
  4. 注释
    单行注释用#开头,单独一行作为注释或者在代码后面通过#跟上注释均可,多行注释在首尾处用成对的三引号引用即可,可以是成对的三个单引号或者三个双引号。
  5. 代码块
    if逻辑判断和for循环条件后面均以冒号结尾,然后通过4个空格开始下一层级的实际执行动作语句编写。这部分在冒号后面接上的语句称为代码块。
  6. 程序命名
    编写的python程序必须以.py结尾。
  7. 项目规范
    启动一个项目开发时先在开发工具中创建project,然后根据需要创建目录,最后在目录下创建当前活动的py程序。

二、变量

python中的变量也用于存储临时值以便后续灵活调用,在定义时只能使用字母、数字、下划线的任意组合,且不能以数字开头,不能以python内置的关键字来命名变量(如and,import,global,finally等,有待后续学习加深印象)。对变量进行字符串类型的赋值时,字符串需要用成对的引号引起来,可以是单引号、双引号或者三引号。

建议通过以下两种形式来定义较为复杂的变量,便于阅读:

  1. 驼峰体
    即每个单词的首字母大写,其他小写,如MappingTable
  2. 下划线
    不同单词之间通过下划线分开,如mappting_table

三、字符编码

字符编码经历了ASCII码->unicode->UTF-8的演变过程,python 2.x默认使用ASCII编码,而3.x默认使用UTF-8编码。由于字符编码事关重大,一言不合就会导致乱码,因此强烈建议统一使用万用的utf-8编码。怎么使用呢?

  1. 程序开头明确显式定义
#!/usr/bin/env python
# -*- coding: utf-8 -*-  

windows下编程可忽略第一行,但为了保留移植性建议始终声明变量。

  1. 在程序解释器中选择utf-8字符编码

以上两个条件缺一不可,虽然python 3.x版本默认使用utf-8编码,但还是建议在程序中声明编码格式。

以上是结果,下面谈谈为什么强烈建议使用urf-8编码,以及为什么utf-8编码就可以通吃。

最早就只有包括所有字母的大小写、数字、必要的特殊符号等合计才127个字符被编码到计算机里,这个编码就是ASCII编码。由于需要进行编码的字符才有127个,因此用7个二进制位就足以搞定了,但8个二进制位才能构成一个完整的字节,因此索性用8个二进制位来进行编码,剩余的一位只好浪费掉。所以ASCCI码只占用一个字符。

随着计算机技术的推广和普及,其他不以英语为官方语言的国家也开始使用计算机了。那么现在问题来了,一个字节的8个bit位只能表示非常有限的字符(设计时只包括所有字母的大小写、数字、必要的特殊符号,其中整数还不能超过255),既有的ASCII编码表里没有包含其他国家的语言字符,但显然也没法强迫全球都使用英语,于是各个国家开始进行本土化改良,设计能满足自己国家需要的编码,如国内的GB2312。这里的改良涉及两个要点,一是原有的一个字节的编码空间要扩充为两个字节甚至更多,二是新的编码还不能与既有的ASCII编码冲突,否则老美要跟你捉急了!你可以想象,中国搞定了一套,日本也搞定了一套,接着是韩国、越南等巴拉巴拉,大家都有自己的编码标准,各自为政,遇到多语言混合使用的场景这编码表还不炸开锅,连同计算机一起傻掉!这时Unicode应运而生。Unicode把所有语言都统一到一套编码里,用两个甚至更多的字节来进行编码(通常用两个字节,搞不定时再喊人加砝码呀),这样就不会再有乱码问题了。

Unicode搞定了多国语言乱码和编码统一的问题,但你会发现如果需要处理的内容全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就不太经济划算。OK,Unicode的演进改良版utf-8就是来解决这个问题的。utf-8的优势在于它使用“可变长编码”,在继续沿用ASCII编码基础上来对1个字节不能搞定的那些语言字符进行编码设计,这样英文还是用1个字节,遇到中文就用3个或者更多的字节来处理。这样既可以保障空间和性能的最大化,还能兼顾老美的老巢和其他非英文的编码兼容问题,一举三得!所以你会发现ASCII其实是utf-8的子集,utf-8向下兼容。

四、 Python解释器

python是一门解释性语言,自然不能缺了解释器(类似于JVM)。官方支持Cpython、Jpython、Ironpython和pypy等,默认使用基于C语言实现的Cpython。它也是最为广泛使用的解释器。程序运行时会把.py文件转换成.pyc字节码文件,然后运行在python虚拟机上。

最近开始整理python的资料,博主建立了一个qq群,希望给大家提供一个交流的同平台 78486745 。

五、构建Python的开发环境

构建好包括解释器(虚拟机)和开发工具IDE在内的Python的开发环境才便于展开程序开发之旅。

其中解释器(虚拟机)从python官方下载安装即可,需要注意的是建议安装3.7版本,windows下安装后需要把python的bin目录和scripts目录追加到系统环境变量path和用户变量path中。我的win 7用户不是以administor,补充追加了用户变量后才能在cmd下傻瓜式地输入python。linux下系统默认是2.x的版本,安装3.7版本时需要先将旧版本重命名为其他目录(如python2.6)后再安装,安装完毕无需额外设置环境变量。

好的程序猿都得有自己好使的IDE,python程序建议使用pycharm工具来进行开发。从官网下载安装社区版即可,需要注意的是选择后本地的解释器和项目的默认字符编码。其他一些好玩的特性、快捷键等只有后续逐步体会了。

六、模块初识

python内置了很多模块,同时也可以自定义编写一些好玩的模块,使用模块时需要通过关键字import导入。导入后python会从系统变量的路径中从前往后一次查找,首次成功查找匹配后不再进行后续查找。因此如果需要使用自定义模块,需要特别关注自定义模块的存放位置,底线是只存放在系统变量的一个路径下,否则可能得到意外的结果。

七、用户输入和格式化输出

用户输入通过input来实现,示例如下:

YourName=input("Please input you name here: ") 

简单的输出通过print来实现,示例如下:

print("Hi,", YourName)  #调用输出上面用户输入的变量YourName

注意:

  1. 3.x版本中input默认接收用户输入的类型为字符串,如果需要使用其他的数据类型则需要进行转换,如 UserAge=int(input("Please input your name:"))
  2. print输出中可以接上转义符号来实现更多的输出显示效果,如 表示换行, 为制表符。

print的使用进阶——字符串的格式化输出:

python中,对字符串进行格式化输出与c语言是相同的,即借助%来实现。%s表示与字符串替换,%d表示用整数替换,%f表示用浮点数替换,如果输出的字符串中本身就需要%(比如输出比率),则需要用连续的两个%%来输出%。

 示例程序如下:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
print ("Your name is %s" %"Bob")
print ("Your age is %d" %21)
print ("Your name is %s,age is %d" %("Bob",21))

从以上示例程序可看出,利用print进行格式化输出的基本格式是在需要替换输出的位置用%s,%d等占位符,然后在后面通过%来接上实际替换后需要输出的内容,如果需要替换输出的元素不止一个,则需要在%后面通过一对圆括号把实际替换后需要输出的内容包含进来,同时在每个元素之间用逗号隔开。

八、Python的运行逻辑

Python的运行工作逻辑如下:

内存加载代码->语法分析->解释器加载->生成字节码->执行字节码->生成机器码->CPU执行

【搜索圆方圆,获得“python教程”,“python下载”,“python入门”类相关信息。】










以上是关于如何规范的编写python代码的主要内容,如果未能解决你的问题,请参考以下文章

python如何学习

python如何学习

python如何学习

python如何学习

python如何学习

python如何学习