iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python编码规范知识点实例分析
  • 939
分享到

Python编码规范知识点实例分析

2023-07-02 16:07:50 939人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要讲解了“python编码规范知识点实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python编码规范知识点实例分析”吧!1 代码编码格式一般来说,声明编码格式在脚本中是必

这篇文章主要讲解了“python编码规范知识点实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python编码规范知识点实例分析”吧!

Python编码规范知识点实例分析

1 代码编码格式

  • 一般来说,声明编码格式在脚本中是必需的。

  • 国际惯例,文件编码和 Python 编码格式全部为 utf-8 。例如:在 Python 代码的开头,要统⼀加上如下代码:

# -- coding: utf-8 --
  • 如果Python源码文件没有声明编码格式,Python解释器会默认使用ASCII编码。但出现非ASCII编码的字符,Python解释器就会报错,因此非 ASCII 字符的字符串,请需添加u前缀

  • 若出现 Python编码问题,可按照以下操作尝试解决:

import sysreload(sys)sys.setdefaultencoding('utf-8')

2 分号

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

3 行的最大长度

每行不超过80个字符

以下情况除外:

  1. 长的导入模块语句

  2. 注释里的URL

不要使用反斜杠连接行。

Python会将 圆括号, 中括号和花括号中的行隐式的连接起来 。

圆括号、方括号或花括号以内的表达式允许分成多个物理行,无需使用反斜杠。例如:

month_names = ['Januari', 'Februari', 'Maart',      # These are the               'April',   'Mei',      'Juni',       # Dutch names               'Juli',    'Augustus', 'September',  # for the months               'Oktober', 'November', 'December']   # of the year

隐式的行拼接可以带有注释。后续行的缩进不影响程序结构。后续行也允许为空白行。

如果需要,可以在表达式外围增加一对额外的圆括号。

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

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

4 缩进规则

  • Python 采用代码缩进和冒号( : )来区分代码块之间的层次。

  • 在 Python 中,对于类定义、函数定义、流程控制语句、异常处理语句等,行尾的冒号和下一行的缩进,表示下一个代码块的开始,而缩进的结束则表示此代码块的结束。

  • Python 中实现对代码的缩进,可以使用空格或者 Tab 键实现。但无论是手动敲空格,还是使用 Tab 键,通常情况下都是采用 4 个空格长度作为一个缩进量(默认情况下,一个 Tab 键就表示 4 个空格)。

  • 对于 Python 缩进规则,初学者可以这样理解,Python 要求属于同一作用域中的各行代码,它们的缩进量必须一致,但具体缩进量为多少,并不做硬性规定。

建议使用 Emacs 的 Python-mode 默认值:4 个空格一个缩进层次。不要用tab,也不要tab和空格混用

正确示例代码:

if a==0:    print("正确")        # 缩进4个空白占位else:                    # 与if对齐    print("错误")        # 缩进4个空白占位或者# 4 个空格缩进,第一行不需要foo = long_function_name(    var_one, var_two, var_three,    var_four)

错误示例代码:

if a==0:    print("正确") else:                  print("错误")    print("end")       # 错误的是这行代码前面加了一个空格或者# 2 个空格是禁止的foo = long_function_name(  var_one, var_two, var_three,  var_four)

5 注释

  • Python中使用 # 进行注释,# 号后面要空一格。

  • 最需要写注释的是代码中那些技巧性的部分:对于复杂的操作,应该在其操作开始前写上若干行注释.;对于不是一目了然的代码,应在其行尾添加注释。

  • 为了提高可读性,注释和代码隔开一定的距离,注释应该至少离开代码2个空格,块注释后面最好多留几行空白再写代码。

  • 当代码更改时,优先更新对应的注释。

  • 如果一个注释是一个短语或者句子,它的第一个单词应该大写,除非它是以小写字母开头的标识符(永远不要改变标识符的大小写!)。

  • 如果注释很短,结尾的句号可以省略。块注释一般由完整句子的一个或多个段落组成,并且每句话结束有个句号。

  • 在句尾结束的时候应该使用两个空格。

Python中有三种形式的注释:行注释、块注释、文档注释

行注释:注释应解释自己做了什么,而不是对代码本身的解释

  • 有节制地使用行内注释

  • 行内注释是与代码语句同行的注释

  • 行内注释和代码至少要有两个空格分隔

  • 注释由#和一个空格开始。

n = input()m = input()t = n / 2     # t是n的一半# 循环,条件为t*m/n 小于nwhile (t * m / (n + 1) < n):    t = 0.5 * m + n / 2     # 重新计算t值print(t)

块注释

  • 块注释通常适用于跟随它们的某些(或全部)代码,并缩进到与代码相同的级别

  • 块注释的每一行开头使用一个 # 和一个空格(除非块注释内部缩进文本)。

  • 块注释内部的段落通常只有一个 # 的空行分隔。

def FuncName(parameter1,parameter2):"""描述函数要做的事情:param parameter1: 参数一描述(类型、用途等):param parameter2: 参数二描述:return: 返回值描述"""
# 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

文档注释:

  • 要为所有的公共模块,函数,类和方法编写文档说明

  • 非公共的方法没有必要,但是应该有一个描述方法具体作用的注释。这个注释应该在def那一行之后

  • 多行文档注释使用的结尾三引号应该是自成一行

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."""

6 空行

  • 顶层函数和类定义,前后用两个空行隔开

  • 编码格式声明、模块导入、常量和全局变量声明、顶级定义和执行代码之间空两行

  • 类里面方法定义用一个空行隔开

  • 在函数或方法内部,可以在必要的地方空一行以增强节奏感,但应避免连续空行

class Class01:    pass  class Class02:    def function_01(self):        pass     def function_02(self):        pass

使用必要的空行可以增加代码的可读性,通常在顶级定义(如函数或类的定义)之间空两行,而方法定义之间空一行,另外在用于分隔某些功能的位置也可以空一行。

7 制表符还是空格

  • 不要混用制表符和空格,因为如果混用了,虽然在编辑环境中显示两条语句为同一缩进层次,但因为制表符和空格的不同会导致 Python 解释为两个不同的层次。

  • 在调用 Python 命令行解释器时使用 -t 选项,可对代码中不合法的混合制表符和空格发出警告,使用 -tt 时警告将变成错误,这些选项是被高度推荐的。但是强烈推荐仅使用空格而不是制表符。

空格使用规则:

  • 在二元运算符两边各空一格,比如赋值(=)、比较(==, <, >, !=, <>, <=, >=, in, not in, is, is not), 布尔(and, or, not),算术操作符两边的空格可灵活使用,但两侧务必要保持一致

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

  • 函数的参数列表中,逗号之后要有空格

  • 函数的参数列表中,默认值等号两边不要添加空格

  • 左括号之后,右括号之前不要加添加空格

  • 参数列表, 索引或切片的左括号前不应加空格

  • 当'='用于指示关键字参数或默认参数值时,不要在其两侧使用空格

正确示例代码:

spam(ham[1], {eggs: 2}, [])if x == 4:    print x, yx, y = y, xdict['key'] = list[index]def complex(real, imag=0.0): return magic(r=real, i=imag)

错误示例代码:

spam( ham[ 1 ] , { eggs: 2 } , [ ] )if x == 4 :    print x , yx , y = y , xdict ['key'] = list [index]def complex(real, imag = 0.0): return magic(r = real, i = imag)

8 命名规范

模块名命名

  • 模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况)

# 正确import decoderimport html_parser# 不推荐import Decoder

变量命名

  • 不要使用字母I (小写的L), O (大写的O), I (大写的I)作为单字符的变量名。在有些字体里面,这些字符无法与数字0和1区分。如果想用I, 可使用L代替。

  • 变量名尽量小写, 如有多个单词,用下划线隔开。

count = 0this_is_var = 0

常量或者全局变量命名

  • 全部大写,如有多个单词,用下划线隔开

  • 全⼤写+下划线式驼峰

MAX_CLIENT = 100

函数命名

  • 函数名应该小写,如有多个单词,用下划线隔开。

  • 大小写混合仅在为了兼容原来主要以大小写混合风格的情况下使用,保持向后兼容。

  • 私有函数在函数前加一个下划线_

def run():    passdef run_with_env():    passclass Person():    def _private_func():        pass

类命名

  • 类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头。

  • 在接口被文档化并且主要被用于调用的情况下,可以使用函数的命名风格代替。

  • 对于内置的变量命名有一个单独的约定:大部分内置变量是单个单词(或者两个单词连接在一起),首字母大写的命名法只用于异常名或者内部的常量。

class Farm():    passclass AnimalFarm(Farm):    passclass _PrivateFarm(Farm):    pass

类里面函数和方法参数

  • 始终要将self作为实例方法的第一个参数。

  • 始终要将cls作为类方法的第一个参数。

  • 如果函数的参数名和已有关键字冲突,在最后加大意下划线比缩写或者随意拼写更好。因此class_比clss更好。

特别注意:

  • 不要中英文混编

  • 不要有a、b、c这种没有意义的命名

  • 不要怕名字长就随便缩写,比如person_info 缩写成pi

  • 不要用大小写区分变量类型,比如a是int类型,A是String类型

  • 不要使用容易引起混淆的变量名

  • bool变量⼀般加上前缀 is_ 如:is_success

  • 变量名不要用系统关键字,如 dir type str等等

以下用下画线作前导或结尾的特殊形式是被公认的:

  • _single_leading_underscore(以一个下画线作前导):例如,“from M import *”不会导入以下画线开头的对象。

  • single_trailing_underscore_(以一个下画线结尾):用于避免与 Python 关键词的冲突,例如“Tkinter.Toplevel(master, class_='ClassName')”。

  • __double_leading_underscore (双下画线):从 Python 1.4 起为类私有名。

  • __double_leading_and_trailing_underscore__:特殊的(magic) 对象或属性,存在于
    用户控制的(user-controlled)名字空间,例如:__init__、__import__ 或 __file__。

9 引号用法规则

  • 自然语言使用双引号

  • 机器标识使用单引号

  • 正则表达式使用双引号

  • 文档字符串 (docstring) 使用三个双引号

字符串引号规则:

  • 单引号和双引号字符串是相同的。当一个字符串中包含单引号或者双引号字符串的时候,使用和最外层不同的符号来避免使用反斜杠,从而提高可读性。

  • 在同一个文件中,保持使用字符串引号的一致性。在字符串内可以使用另外一种引号,以避免在字符串中使用。

正确使用示例:

Tim('Why are you hiding your eyes?')Bob("I'm scared of lint errors.")Juy('"Good!" thought a happy Python reviewer.')
  • 当且仅当代码中使用单引号'来引用字符串时,才可能会使用三重'''为非文档字符串的多行字符串来标识引用

  • 文档字符串必须使用三重双引号"""

10 模块导入规则

  • 导入应该放在文件顶部,位于模块注释和文档字符串之后,模块全局变量和常量之前。

  • 导入应该按照从最通用到最不通用的顺序分组:标准库导入、第三方库导入、应用程序指定导入,分组之间空一行。

  • 模块名称要短,使用小写,并避免使用特殊符号, 比如点和问号。

  • 尽量保持模块名简单,以无需分开单词最佳(不推荐在两个单词之间使用下划线)。

  • 每个导入应该独占一行。

正确使用例子:

import osimport numpyimport sysfrom types import StringType, ListType

错误使用例子:

import os, numpy, sys
  • 从一个包含类的模块中导入类时,通常可以写成这样:

from MyClass import MyClass from foo.bar.YourClass import YourClass

模块导入建议

示例评价
from modu import *差, 不清楚具体从模块中导入了哪些内容
from modu import sqrt稍好

import modu

import modu.sqrt

最佳 , 调用的时候直接使用modu.sqrt能比较清楚的知道当前方法属于哪个模块

import os

import sys

推荐

import os, sys

不推荐
from subprocess import Popen, PIPE推荐

11 Main

主功能应该放在一个main()函数中。

在Python中,pydoc以及单元测试要求模块必须是可导入的。代码应该在执行主程序前总是检查 if __name__ == '__main__', 这样当模块被导入时主程序就不会被执行。

def main():      ...if __name__ == '__main__':    main()

12 函数设计规范

  • 函数设计的主要目标就是最大化代码重用和最小化代码冗余。精心设计的函数不仅可以提高程序的健壮性,还可以增强可读性、减少维护成本。

  • 函数设计要尽量短小,嵌套层次不宜过深。 所谓短小, 就是尽量避免过长函数, 因为这样不需要上下拉动滚动条就能获得整体感观, 而不是来回翻动屏幕去寻找某个变量或者某条逻辑判断等。 函数中需要用到 if、 elif、 while 、 for 等循环语句的地方,尽量不要嵌套过深,最好能控制在3层以内。不然有时候为了弄清楚哪段代码属于内部嵌套, 哪段属于中间层次的嵌套, 哪段属于更外一层的嵌套所花费的时间比读代码细节所用时间更多。

  • 尽可能通过参数接受输入,以及通过return产生输出以保证函数的独立性。

  • 尽量减少使用全局变量进行函数间通信。

  • 不要在函数中直接修改可变类型的参数。

  • 函数申明应该做到合理、 简单、 易于使用。 除了函数名能够正确反映其大体功能外, 参数的设计也应该简洁明了, 参数个数不宜太多。 参数太多带来的弊端是: 调用者需要花费更多的时间去理解每个参数的意思,测试的时候测试用例编写的难度也会加大。

  • 函数参数设计应该考虑向下兼容。

13 版本注记

如果要将 RCS 或 CVS 的杂项包含在你的源文件中,按如下格式操作:

__version__ = "$Revision: 1.4 $" # $Source: E:/cvsroot/python_doc/pep8.txt,v $

对于 CVS 的服务器工作标记更应该在代码段中明确出它的使用说明,如在文档最开始的版权声明后应加入如下版本标记:

# 文件:$id$ # 版本:$Revision$

这样的标记在提交给配置管理服务器后,会自动适配成为相应的字符串,如:

# 文件:$Id: ussp.py,v 1.22 2004/07/21 04:47:41 hd Exp $ # 版本:$Revision: 1.4 $

这些应该包含在模块的文档字符串之后,所有代码之前,上下用一个空行分割。

感谢各位的阅读,以上就是“Python编码规范知识点实例分析”的内容了,经过本文的学习后,相信大家对Python编码规范知识点实例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Python编码规范知识点实例分析

本文链接: https://www.lsjlt.com/news/343008.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python编码规范知识点实例分析
    这篇文章主要讲解了“Python编码规范知识点实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python编码规范知识点实例分析”吧!1 代码编码格式一般来说,声明编码格式在脚本中是必...
    99+
    2023-07-02
  • JavaScript编码规范知识点有哪些
    这篇文章主要介绍“JavaScript编码规范知识点有哪些”,在日常操作中,相信很多人在JavaScript编码规范知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • Java语言编码规范的示例分析
    这篇文章跟大家分析一下“Java语言编码规范的示例分析”。内容详细易懂,对“Java语言编码规范的示例分析”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“Java语言编码规范的示例...
    99+
    2023-06-03
  • Python入门基础知识点实例分析
    这篇文章主要介绍“Python入门基础知识点实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python入门基础知识点实例分析”文章能帮助大家解决问题。标识符在 Python 中,所有标识符可...
    99+
    2023-07-04
  • MySQL约束知识点实例分析
    这篇文章主要介绍“MySQL约束知识点实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL约束知识点实例分析”文章能帮助大家解决问题。1. 约束(con...
    99+
    2024-04-02
  • Python基础知识点的示例分析
    这篇文章给大家分享的是有关Python基础知识点的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、python中的标志符:给变量取的名字就是标志符区分大小写,MyName和myname是两个不同的标志符...
    99+
    2023-06-29
  • Python基础知识实例分析
    这篇文章主要介绍了Python基础知识实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python基础知识实例分析文章都会有所收获,下面我们一起来看看吧。在Python 语言中,对象是通过引用传递的。多元...
    99+
    2023-06-17
  • Vue中编码技巧与规范的示例分析
    这篇文章主要介绍Vue中编码技巧与规范的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实例1. 使用对象代替 if 及 switch在很多情况下,我们经常会遇到循环判断执行赋...
    99+
    2024-04-02
  • Python基础知识点分析
    本篇内容介绍了“Python基础知识点分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python简介Python的历史1989年圣诞节:...
    99+
    2023-06-02
  • python中pandas的知识点的示例分析
    这篇文章主要介绍python中pandas的知识点的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和f...
    99+
    2023-06-14
  • C语言基础知识点实例分析
    这篇文章主要讲解了“C语言基础知识点实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言基础知识点实例分析”吧!什么是C语言简单来说C语言就是一门计算机语言,广泛应用与底层开发,使用...
    99+
    2023-07-02
  • Python进程和线程知识点举例分析
    本篇内容主要讲解“Python进程和线程知识点举例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python进程和线程知识点举例分析”吧!多线程一个进程至少包含一个线程,其实进程就是由若干个...
    99+
    2023-06-02
  • Python变量的知识点分析
    这篇文章给大家分享的是有关Python变量的知识点分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、Python变量在大多数语言中,为一个值起一个名字时,把这种行为称为“给变量赋值”或“把值存储在变量中”。不...
    99+
    2023-06-15
  • 初识Python(注释、代码缩进、编码规范、标识符、变量)
    ✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1🏆 📃个人主页:hacker707的csdn博客 ...
    99+
    2023-09-06
    python 代码规范
  • Python编码的知识点有哪些
    这篇文章主要介绍“Python编码的知识点有哪些”,在日常操作中,相信很多人在Python编码的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python编码的知识点有哪些”的疑惑有所帮助!接下来...
    99+
    2023-06-16
  • Java代码书写规范的示例分析
    这篇文章主要介绍了Java代码书写规范的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、目的   对于代码,首要要求是它必须正确,能够按照程序员的真实思想...
    99+
    2023-06-03
  • C语言之函数知识点实例分析
    这篇文章主要介绍了C语言之函数知识点实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言之函数知识点实例分析文章都会有所收获,下面我们一起来看看吧。一、引入引例:定义6个整型变量a,b,c,d,e,f,...
    99+
    2023-07-02
  • CSS中BEM命名规范实例分析
    这篇文章主要讲解了“CSS中BEM命名规范实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS中BEM命名规范实例分析”吧!   一什么是BEM命...
    99+
    2024-04-02
  • vuex进阶知识点的示例分析
    这篇文章将为大家详细讲解有关vuex进阶知识点的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、 Gettercomputed:{   ge...
    99+
    2024-04-02
  • HTML基础知识点的示例分析
    这篇文章将为大家详细讲解有关HTML基础知识点的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   一、HTML是谁发明的   1990年Tim Berner...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作