python基础编码,python编码规范考试题库
这篇文章给大家带来了一些关于python的知识,主要梳理了编码标准的相关问题。想写好python代码,必须了解Python编码标准。有了这个加持,写出来的代码不仅可以实现相应的功能,而且简单易读,逻辑清晰。来看看吧,希望对你有帮助。
【相关推荐:Python3视频教程】
想写好python代码,必须了解python相关的编码规范。有了这个加持,写出来的代码不仅可以实现相应的功能,而且可读性强,逻辑性强。本节技能树主要分享对应的python编码规范。对于学习python的人请认真阅读,一定会对你的python代码的编写有所提升!
00-1010一般来说,脚本中要求声明编码格式。国际惯例,文件编码和Python编码格式都是utf-8。比如在Python代码的开头,要加上如下代码:#-编码: UTF-8-如果Python源文件没有声明编码格式,Python解释器默认使用ASCII编码。但是如果出现非ASCII编码的字符,Python解释器会报错,所以对于非ASCII字符串,请添加u前缀.万一Python编码出现问题,可以尝试通过以下动作解决:导入sys
重新加载(系统)
sys . setdefaultencoding( UTF-8 )
1 代码编码格式
不要在行尾多加一个符号,也不要用分号把两个命令放在同一行。00-1010每行不超过80个字符
下列情况除外:
不要在长的导入模块语句的注释中使用反斜杠来连接URL的行。
Python隐式连接圆括号、方括号和花括号中的行。
括号、方括号或花括号中的表达式可以分成多行,而不使用反斜杠。例如:
month_names=[Januari , Februari , Maart ,#这些是
四月,梅,由尼,#荷兰名字
朱莉,奥古斯都,九月,几个月
啤酒节,十一月,十二月] #的年份隐式线拼接可以注释。后续行的缩进不影响程序结构。后续行也允许为空。
如有必要,可以在表达式两边额外添加一对括号。
如果一个文本字符串放不下一行,可以用括号实现隐式行连接。
X=(这是一个很长,很长,很长的
很长,很长,很长,很长,很长的字符串’)
2 分号
Python使用代码缩进和冒号(:)来区分代码块之间的层次结构。在Python中,用于类定义、函数定义、流控制语句、异常处理语句等。行尾的冒号和下一行的缩进表示下一个代码块的开头,而缩进的结尾表示这个代码块的结尾。Python中的代码缩进可以通过使用空格键或Tab键来实现。但是,无论是手动键入空格还是使用Tab键,通常都使用4个空格的长度作为缩进(默认情况下,Tab键意味着4个空格)。对于Python缩进规则,初学者可以这么理解。Python要求所有的代码行都属于同一个作用域,它们的缩进必须一致,但在具体缩进上并没有硬性规定。建议使用 Emacs 的 Python-mode 默认值:4 个空格一个缩进层次。不要用tab,也不要tab和空格混用正确示例代码:
如果a==0:
打印(正确)#缩进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个空格,块注释后面最好多留几行空白再写代码。
- 当代码更改时,优先更新对应的注释。
- 如果一个注释是一个短语或者句子,它的第一个单词应该大写,除非它是以小写字母开头的标识符(永远不要改变标识符的大小写!)。
- 如果注释很短,结尾的句号可以省略。块注释一般由完整句子的一个或多个段落组成,并且每句话结束有个句号。
- 在句尾结束的时候应该使用两个空格。
行注释:注释应解释自己做了什么,而不是对代码本身的解释
- 有节制地使用行内注释
- 行内注释是与代码语句同行的注释
- 行内注释和代码至少要有两个空格分隔
- 注释由#和一个空格开始。
n = input()块注释:m = input()
t = n / 2 # t是n的一半
# 循环,条件为t*m/n 小于n
while (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, y
x, y = y, x
dict['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 , y
x , y = y , x
dict ['key'] = list [index]
def complex(real, imag = 0.0): return magic(r = real, i = imag)
8 命名规范
模块名命名
- 模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况)
# 正确变量命名import decoder
import html_parser
# 不推荐
import Decoder
- 不要使用字母I (小写的L), O (大写的O), I (大写的I)作为单字符的变量名。在有些字体里面,这些字符无法与数字0和1区分。如果想用I, 可使用L代替。
- 变量名尽量小写, 如有多个单词,用下划线隔开。
count = 0常量或者全局变量命名this_is_var = 0
- 全部大写,如有多个单词,用下划线隔开
- 全⼤写+下划线式驼峰
MAX_CLIENT = 100函数命名
- 函数名应该小写,如有多个单词,用下划线隔开。
- 大小写混合仅在为了兼容原来主要以大小写混合风格的情况下使用,保持向后兼容。
- 私有函数在函数前加一个下划线_。
def run():类命名pass
def run_with_env():
pass
class Person():
def _private_func():
pass
- 类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头。
- 在接口被文档化并且主要被用于调用的情况下,可以使用函数的命名风格代替。
- 对于内置的变量命名有一个单独的约定:大部分内置变量是单个单词(或者两个单词连接在一起),首字母大写的命名法只用于异常名或者内部的常量。
class Farm():类里面函数和方法参数pass
class AnimalFarm(Farm):
pass
class _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 os错误使用例子:import numpy
import sys
from types import StringType, ListType
import os, numpy, sys
- 从一个包含类的模块中导入类时,通常可以写成这样:
from MyClass import MyClass模块导入建议from foo.bar.YourClass import YourClass
示例 评价
import modu
import modu.sqrt
import os
import sys
import os, sys
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 $"对于 CVS 的服务器工作标记更应该在代码段中明确出它的使用说明,如在文档最开始的版权声明后应加入如下版本标记:# $Source: E:/cvsroot/python_doc/pep8.txt,v $
# 文件:$id$这样的标记在提交给配置管理服务器后,会自动适配成为相应的字符串,如:# 版本:$Revision$
# 文件:$Id: ussp.py,v 1.22 2004/07/21 04:47:41 hd Exp $这些应该包含在模块的文档字符串之后,所有代码之前,上下用一个空行分割。# 版本:$Revision: 1.4 $
【相关推荐:Python3视频教程 】以上就是Python编码规范知识点整理的详细内容,更多请关注盛行IT软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。