第2章 python编码规范
python编码规范
python编码规范Python是一种广泛使用的高级编程语言,编写出符合规范和易于阅读的代码对于代码的可维护性和可读性至关重要。
本文将介绍一些Python编码规范的准则,以帮助开发者编写出更规范的Python代码。
一、命名规范1. 变量和函数名应该以小写字母开始,如果变量名包含多个单词,可使用下划线(_)进行分隔,例如:my_variable。
2. 类名应该以大写字母开始,如果类名包含多个单词,单词间使用驼峰命名法,例如:MyClass。
3. 常量名应该全部使用大写字母,并用下划线进行分隔,例如:MAX_SIZE。
4. 私有属性或方法应以一个下划线(_)开头,例如:_private_variable。
二、缩进与空格1. 使用四个空格进行缩进,而不是制表符。
这样可以保持代码在不同编辑器和平台上的一致性。
2. 操作符之间应添加适当的空格,例如:a = b + c,而不是a=b+c。
3. 函数或类的定义与其后的代码块之间应该有两个空行,并且分别用一个空行将代码块内的逻辑分开。
三、注释规范1. 使用行注释(#)解释代码的意图或功能。
注释应该清晰明了,尽量避免使用废话或无关的描述。
2. 为函数和类编写文档字符串,其中包含其功能、输入参数、返回值等相关信息。
文档字符串应该简洁明了,并遵循一定的格式规范,如使用标准的reStructuredText或Google风格的文档字符串格式。
四、代码规范1. 每行代码的长度应不超过79个字符。
如果一行代码过长,可以使用括号或反斜杠进行换行。
对于括号换行,可以将括号内的内容换行并适当缩进,使代码更易读。
2. 避免一行代码包含多个语句,即每行代码只包含一个语句。
3. 在运算符的周围添加适当的空格,使代码更易读。
例如:a = b + c,而不是a=b+c。
4. 使用适当的空行将代码分组,提高可读性。
例如:可以在函数定义后使用一个空行进行分隔,将不同功能的代码块区分开来。
5. 避免使用魔法数字,应使用常量或变量来表示。
Python从入门到精通第2章 Python语言基础(教学课件)
Python语法特点
注释 规则
编码 规范
1
3
代码 缩进
2
[ 概念]
注释是指在程序代码中添加
的标注性的文字。
1 单行注释 2 多行注释 3 中文编码声明注释
# C注语释言内、容Java、PHP使用//进行单行注释
[ 概念 ]
在Python中将包含在一对三引号 ('''……''')或者("""……""")之 间,并且不属于任何语句的内容认为是多 注释。
''' 注释内容1 注释内容2
…… '''
""" 注释内容1 注释内容2 …… """
代码缩进
[ 概念 ]
代码缩进是指在每一行代码左端空
出一定长度的空白,从而可以更加清晰地 从外观上看出程序的逻辑结构。
编码规范
不要在行尾添加分号“;”,也不 运算符两侧、 避免在循环
每个import 语句只导入
字符串类型
[ 概念 ]
字符串是连续的字符序列,可以 是计算机所能表示的一切字符的集合。
[ 概念 ]
转义字符是指使用“\”对一些 特殊字符进行转义。
转义字符 \ \n \0 \t \" \' \\ \f
\0dd \xhh
说明 续行符 换行符 空 水平制表符,用于横向跳到下一制表位 双引号 单引号 一个反斜杠 换页 八进制数,dd代表的字符,如\012代表换行 十六进制数,hh代表的字符,如\x0a代表换行
要用分号将两条命令放在同一行。 函数参数之间、
python代码规则
python代码规则
1.代码缩进:Python使用缩进来表示代码块,建议使用4个空格进行缩进。
2. 命名规则:变量名、函数名、类名等应该遵循下划线命名法(即用下划线连接单词)。
3. 注释规则:注释应该清晰地解释代码的意图和功能,注释的内容应该写在代码之上,而不是代码之内。
4. 函数规则:函数应该尽可能短小精悍,每个函数应该只做一件事情,并且应该有清晰的输入输出。
5. 异常处理:在代码中应该加入适当的异常处理机制,可以通过try-except语句来实现。
6. 模块规则:每个模块应该有一个清晰的目的,并且应该遵循单一职责原则。
7. 类规则:类应该有清晰的职责,尽可能简单而不失灵活性,应该遵循开放封闭原则。
8. 导入规则:应该使用明确的导入语句,避免使用通配符导入语句。
总之,遵循这些Python代码规则,可以使Python代码更加规范、易读、易维护和易扩展。
- 1 -。
Python 编码规范(Google Python Style Guide)
分号行长度括号foo_bar(self, width, height, color='black', design=None, x='foo',emphasis=None, highlight=0)if (width == 0 and height == 0 andcolor == 'red' and emphasis == 'strong'):x = ('这是一个非常长非常长非常长非常长 ''非常长非常长非常长非常长非常长非常长的字符串')# See details at# /us/developer/documentation/api/content/v2.0/csv_file_name_exte nsion_full_specification.html# See details at# /us/developer/documentation/api/content/\# v2.0/csv_file_name_extension_full_specification.html宁缺毋滥的使用括号除非是用于实现行连接, 否则不要在返回语句或条件语句中使用括号. 不过在元组两边使用括号是可以的.Yes:No:缩进用4个空格来缩进代码绝对不要用tab, 也不要tab 和空格混用. 对于行连接的情况, 你应该要么垂直对齐换行的元素(见 :ref:`行长度 <line_len gth>` 部分的示例), 或者使用4空格的悬挂式缩进(这时第一行不应该有参数):if foo: bar()while x: x = bar()if x and y: bar()if not x: bar()return foo for (x, y) in dict.items(): ...if (x): bar()if not(x): bar()return (foo)Yes: # 与起始变量对齐 foo = long_function_name(var_one, var_two, var_three, var_four)# 字典中与起始值对齐 foo = { long_dictionary_key: value1 + value2, ... }# 4 个空格缩进,第一行不需要 foo = long_function_name( var_one, var_two, var_three, var_four)# 字典中 4 个空格缩进 foo = { long_dictionary_key: long_dictionary_value, ... }No: # 第一行有空格是禁止的 foo = long_function_name(var_one, var_two, var_three, var_four)# 2 个空格是禁止的 foo = long_function_name( var_one, var_two, var_three, var_four)# 字典中没有处理缩进 foo = { long_dictionary_key: long_dictionary_value, ... }空行顶级定义之间空两行, 方法定义之间空一行顶级定义之间空两行, 比如函数或者类定义. 方法定义, 类定义与第一个方法之间, 都应该空一行. 函数或方法中, 某些地方要是你觉得合适, 就空一行.空格按照标准的排版规范来使用标点两边的空格括号内不要有空格.按照标准的排版规范来使用标点两边的空格Yes: spam(ham[1], {eggs: 2}, [])No: spam( ham[ 1 ], { eggs: 2 }, [ ] )不要在逗号, 分号, 冒号前面加空格, 但应该在它们后面加(除了在行尾).参数列表, 索引或切片的左括号前不应加空格.Yes: spam(1)no: spam (1)Yes: dict['key'] = list[index]No: dict ['key'] = list [index]在二元操作符两边都加上一个空格, 比如赋值(=), 比较(==, <, >, !=, <>, <=, >=, in, not in, is, is not), 布尔(and, o r, not). 至于算术操作符两边的空格该如何使用, 需要你自己好好判断. 不过两侧务必要保持一致.Yes: x == 1No: x<1当'='用于指示关键字参数或默认参数值时, 不要在其两侧使用空格.Yes: def complex(real, imag=0.0): return magic(r=real, i=imag)No: def complex(real, imag = 0.0): return magic(r = real, i = imag)不要用空格来垂直对齐多行间的标记, 因为这会成为维护的负担(适用于:, #, =等):Yes: if x == 4: print x, y x, y = y, xNo: if x == 4 : print x , y x , y = y , xYes: foo = 1000 # 注释 long_name = 2 # 注释不需要对齐dictionary = { "foo": 1, "long_name": 2, }No: foo = 1000 # 注释 long_name = 2 # 注释不需要对齐dictionary = {Shebang大部分.py 文件不必以#!作为文件的开始. 根据 PEP-394 , 程序的main 文件应该以 #!/usr/bin/python2或者 #!/usr/bin/python3开始.(译者注: 在计算机科学中, Shebang (也称为Hashbang)是一个由井号和叹号构成的字符串行(#!), 其出现在文本文件的第一行的前两个字符. 在文件中存在Shebang 的情况下, 类Unix 操作系统的程序载入器会分析Shebang 后的内容, 将这些内容作为解释器指令, 并调用该指令, 并将载有Shebang 的文件路径作为该解释器的参数. 例如, 以指令#!/bin/sh 开头的文件在执行时会实际调用/bin/sh 程序.)#!先用于帮助内核找到Python 解释器, 但是在导入模块时, 将会被忽略. 因此只有被直接执行的文件中才有必要加入#!.注释确保对模块, 函数, 方法和行内注释使用正确的风格文档字符串Python 有一种独一无二的的注释方式: 使用文档字符串. 文档字符串是包, 模块, 类或函数里的第一个语句. 这些字符串可以通过对象的__doc__成员被自动提取, 并且被pydoc 所用. (你可以在你的模块上运行pydoc 试一把, 看看它长什么样). 我们对文档字符串的惯例是使用三重双引号"""( PEP-257 ). 一个文档字符串应该这样组织: 首先是一行以句号, 问号或惊叹号结尾的概述(或者该文档字符串单纯只有一行). 接着是一个空行. 接着是文档字符串剩下的部分, 它应该与文档字符串的第一行的第一个引号对齐. 下面有更多文档字符串的格式化规范.模块每个文件应该包含一个许可样板. 根据项目使用的许可(例如, Apache 2.0, BSD, LGPL, GPL), 选择合适的样板.函数和方法下文所指的函数,包括函数, 方法, 以及生成器.一个函数必须要有文档字符串, 除非它满足以下条件:1、外部不可见2、非常短小3、简单明了文档字符串应该包含函数做什么, 以及输入和输出的详细描述. 通常, 不应该描述"怎么做", 除非是一些复杂的算法. 文档字符串应该提供足够的信息, 当别人编写代码调用该函数时, 他不需要看一行代码, 只要看文档字符串就可以了. 对于复杂的代码, 在代码旁边加注释会比使用文档字符串更有意义.关于函数的几个方面应该在特定的小节中进行描述记录, 这几个方面如下文所述. 每节应该以一个标题行开始. 标题行以冒号结尾. 除标题行外, 节的其他内容应被缩进2个空格.Args:列出每个参数的名字, 并在名字后使用一个冒号和一个空格, 分隔对该参数的描述.如果描述太长超过了单行80字符,使用2或者4个空格的悬挂缩进(与文件其他部分保持一致). 描述应该包括所需的类型和含义. 如果一个函数接受*foo(可变长度参数列表)或者**bar (任意关键字参数), 应该详细列出*foo 和**bar.Returns: (或者 Yields: 用于生成器)描述返回值的类型和语义. 如果函数返回None, 这一部分可以省略."foo" : 1, "long_name": 2, }Raises:列出与接口有关的所有异常.类类应该在其定义下有一个用于描述该类的文档字符串. 如果你的类有公共属性(Attributes), 那么文档中应该有一个属性(Attributes)段. 并且应该遵守和函数参数相同的格式.块注释和行注释最需要写注释的是代码中那些技巧性的部分. 如果你在下次 代码审查 的时候必须解释一下, 那么你应该现在就给它写注释. 对于复杂的操作, 应该在其操作开始前写上若干行注释. 对于不是一目了然的代码, 应在其行尾添加注释.def fetch_bigtable_rows(big_table, keys, other_silly_variable=None): """Fetches rows from a Bigtable.Retrieves rows pertaining to the given keys from the Table instance represented by big_table. Silly things may happen if other_silly_variable is not None.Args: big_table: An open Bigtable Table instance. keys: A sequence of strings representing the key of each table row to fetch. other_silly_variable: Another optional variable, that has a much longer name than the other args, and which does nothing.Returns: A dict mapping keys to the corresponding table row data fetched. Each row is represented as a tuple of strings. For example:{'Serak': ('Rigel VII', 'Preparer'), 'Zim': ('Irk', 'Invader'), 'Lrrr': ('Omicron Persei 8', 'Emperor')}If a key from the keys argument is missing from the dictionary, then that row was not found in the table.Raises: IOError: An error occurred accessing the bigtable.Table object. """ passclass 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 = 0def public_method(self): """Performs operation blah."""# 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 iff i is a power of 2为了提高可读性, 注释应该至少离开代码2个空格.另一方面, 绝不要描述代码. 假设阅读代码的人比你更懂Python, 他只是不知道你的代码要做什么.# BAD COMMENT: Now go through the b array and make sure whenever i occurs # the next element is i+1类如果一个类不继承自其它类, 就显式的从object 继承. 嵌套类也一样.继承自 object 是为了使属性(properties)正常工作, 并且这样可以保护你的代码, 使其不受Python 3000的一个特殊的潜在不兼容性影响. 这样做也定义了一些特殊的方法, 这些方法实现了对象的默认语义, 包括 __new__, __init__, __de lattr__, __getattribute__, __setattr__, __hash__, __repr__, and __str__ .字符串避免在循环中用+和+=操作符来累加字符串. 由于字符串是不可变的, 这样做会创建不必要的临时对象, 并且导致二次方而不是线性的运行时间. 作为替代方案, 你可以将每个子串加入列表, 然后在循环结束后用 .join 连接列表. (也可以将每个子串写入一个 cStringIO.StringIO 缓存中.)在同一个文件中, 保持使用字符串引号的一致性. 使用单引号'或者双引号"之一用以引用字符串, 并在同一文件中沿用. 在字符串内可以使用另外一种引号, 以避免在字符串中使用. PyLint 已经加入了这一检查.Yes: class SampleClass(object): pass class OuterClass(object): class InnerClass(object): passclass ChildClass(ParentClass): """Explicitly inherits from another class already."""No: class SampleClass: passclass OuterClass: class InnerClass: passYes: x = a + b x = '%s, %s!' % (imperative, expletive) x = '{}, {}!'.format(imperative, expletive) x = 'name: %s; score: %d' % (name, n) x = 'name: {}; score: {}'.format(name, n)No: x = '%s%s' % (a, b) # use + in this case x = '{}{}'.format(a, b) # use + in this case x = imperative + ', ' + expletive + '!' x = 'name: ' + name + '; score: ' + str(n)Yes: items = ['<table>'] for last_name, first_name in employee_list: items.append('<tr><td>%s, %s</td></tr>' % (last_name, first_name)) items.append('</table>') employee_table = ''.join(items)No: employee_table = '<table>' for last_name, first_name in employee_list: employee_table += '<tr><td>%s, %s</td></tr>' % (last_name, first_name) employee_table += '</table>'Yes: Python('Why are you hiding your eyes?') Gollum("I'm scared of lint errors.") Narrator('"Good!" thought a happy Python reviewer.')多行字符串使用三重双引号"""而非三重单引号'''. 当且仅当项目中使用单引号'来引用字符串时, 才可能会使用三重'''文件和socketsLegacy AppEngine 中Python 2.5的代码如使用"with"语句, 需要添加 "from __future__ import with_statement".TODO 注释No: Python("Why are you hiding your eyes?") Gollum('The lint. It burns. It burns us.') Gollum("Always the great lint. Watching. Watching.")Yes: print ("This is much nicer.\n" "Do it this way.\n")No: print """This is pretty ugly. Don't do this. """with open("hello.txt") as hello_file: for line in hello_file: print lineimport contextlibwith contextlib.closing(urllib.urlopen("/")) as front_page: for line in front_page: print line导入格式总应该放在文件顶部, 位于模块注释和文档字符串之后, 模块全局变量和常量之前. 导入应该按照从最通用到最不语句访问控制Yes: import os import sysNo: import os, sysimport foo from foo import bar from foo.bar import baz from foo.bar import Quux from Foob import arYes:if foo: bar(foo)No:if foo: bar(foo) else: baz(foo)try: bar(foo) except ValueError: baz(foo)try: bar(foo) except ValueError: baz(foo)命名Main即使是一个打算被用作脚本的文件, 也应该是可导入的. 并且简单的导入不应该导致这个脚本的主功能(main functiona lity)被执行, 这是一种副作用. 主功能应该放在一个main()函数中.在Python 中, pydoc 以及单元测试要求模块必须是可导入的. 你的代码应该在执行主程序前总是检查 if __name__ == '__main__' , 这样当模块被导入时主程序就不会被执行.所有的顶级代码在模块导入时都会被执行. 要小心不要去调用函数, 创建对象, 或者执行那些不应该在使用pydoc 时执行的操作. def main(): ...if __name__ == '__main__': main()。
Python编程规范
Python编程规范1,Python编程规范> 编码所有的 Python 脚本⽂件都应在⽂件头标上# -*- coding:utf-8 -*-⽤于设置编辑器,默认保存为 utf-8 格式。
> 注释业界普遍认同 Python 的注释分为两种,⼀种是由 # 开头的“真正的”注释,例如,⽤于表明为何选择当前实现以及这种实现的原理和难点另⼀种是 docstrings,例如,⽤于表明如何使⽤这个包、模块、类、函数(⽅法),甚⾄包括使⽤⽰例和单元测试坚持适当注释原则。
对不存在技术难点的代码坚持不注释,对存在技术难点的代码必须注释。
但与注释不同,建议对每⼀个包、模块、类、函数(⽅法)写docstrings,除⾮代码⼀⽬了然,⾮常简单。
> 缩进Python 依赖缩进来确定代码块的层次,⾏⾸空⽩符主要有两种:tab 和空格,但严禁两者混⽤。
如果使⽤ tab 缩进,设定tab 为4个空格。
> 空格空格在 Python 代码中是有意义的,因为 Python 的语法依赖于缩进,在⾏⾸的空格称为前导空格。
在这⼀节不讨论前导空格相关的内容,只讨论⾮前导空格。
⾮前导空格在 Python 代码中没有意义,但适当地加⼊⾮前导空格可以增进代码的可读性。
1)在⼆元算术、逻辑运算符前后加空格:如a =b + c;2)在⼀元前缀运算符后不加空格,如if !flg: pass;3) “:”⽤在⾏尾时前后皆不加空格,如分枝、循环、函数和类定义语⾔;⽤在⾮⾏尾时两端加空格,如:dict 对象的定义d = {'key' : 'value'}4)括号(含圆括号、⽅括号和花括号)前后不加空格,如:do_something(arg1, arg2)⽽不是do_something( arg1, arg2 )5)不要在逗号、分号、冒号前⾯加空格,但应该在它们后⾯加(除了在⾏尾)6)不要⽤空格来垂直对齐多⾏间的标记,因为这会成为维护的负担(适⽤于:,#,=等)> 空⾏适当的空⾏有利于增加代码的可读性,加空⾏可以参考如下⼏个准则:1)在类、函数的定义间加空⾏;2)在 import 不同种类的模块间加空⾏;3)在函数中的逻辑段落间加空⾏,即把相关的代码紧凑写在⼀起,作为⼀个逻辑段落,段落间以空⾏分隔;> 断⾏尽管现在的宽屏显⽰器已经可以单屏显⽰超过 256 列字符,但本规范仍然坚持⾏的最⼤长度不得超过 80 个字符的标准。
Python代码规范(命名、注释等)
Python代码规范(命名、注释等)本来不应该把这个章节放在前⾯的,因为还没进⾏学习之前,直接看这个章节,会感觉有很多莫名其妙的东西。
但是把这个章节放在前⾯的⽤意,只是让⼤家预览⼀下,有个印象,⽽且在以后的学习中,也⽅便⼤家查阅。
⽬录⼀、简明概述1、编码如⽆特殊情况, ⽂件⼀律使⽤ UTF-8 编码如⽆特殊情况, ⽂件头部必须加⼊#-*-coding:utf-8-*-标识2、代码格式2.1、缩进统⼀使⽤ 4 个空格进⾏缩进2.2、⾏宽每⾏代码尽量不超过 80 个字符(在特殊情况下可以略微超过 80 ,但最长不得超过 120)理由:这在查看 side-by-side 的 diff 时很有帮助⽅便在控制台下查看代码太长可能是设计有缺陷2.3、引号单引号简单说,⾃然语⾔使⽤双引号,机器标⽰使⽤单引号,因此代码⾥多数应该使⽤代码⾥多数应该使⽤单引号使⽤双引号'...'⾃然语⾔⾃然语⾔使⽤双引号例如错误信息;很多情况还是 unicode,使⽤u'你好世界'使⽤单引号'...'例如 dict ⾥的 key机器标识使⽤单引号机器标识使⽤原⽣的双引号r'...'正则表达式使⽤原⽣的双引号正则表达式⽂档字符串 (docstring)使⽤三个双引号'''......'''2.4、空⾏模块级函数和类定义之间空两⾏;类成员函数之间空⼀⾏;可以使⽤多个空⾏分隔多组相关的函数函数中可以使⽤空⾏分隔出逻辑相关的代码3、import 语句import 语句应该分⾏书写# 正确的写法import osimport sys# 不推荐的写法import sys,os# 正确的写法from subprocess import Popen, PIPEimport语句应该使⽤absoluteimport# 正确的写法from foo.bar import Bar# 不推荐的写法from ..bar import Barimport语句应该放在⽂件头部,置于模块说明及docstring之后,于全局变量之前;import语句应该按照顺序排列,每组之间⽤⼀个空⾏分隔导⼊其他模块的类定义时,可以使⽤相对导⼊from myclass import MyClass如果发⽣命名冲突,则可使⽤命名空间4、空格在⼆元运算符两边各空⼀格[=,-,+=,==,>,in,is not, and]:函数的参数列表中,,之后要有空格函数的参数列表中,默认值等号两边不要添加空格左括号之后,右括号之前不要加多余的空格5、换⾏Python ⽀持括号内的换⾏。
pep8 python 编码规范
pep8 python 编码规范
Python 编码规范是一种统一的编码规范,其旨在编写结构清晰、可操作的 Python 代码。
Python 编码规范,又被称为”PEP 8”,是Python 开发者在编码时应遵循的规范。
它产生的目的是要使编写的代
码能够在平台之间迁移时,尽可能的少出现兼容性的问题。
PEP 8包括缩进和格式的规则,能够让代码具有一致的看法和更
易阅读的外观。
它按照78比分的标准,把长行代码分割为两个或以上行,以合理形式缩进。
它还提供了建议性的文件命名规则,帮助程序
员们更容易记忆文件内容。
另外,它还明确了空行的使用及对注释的
规范,帮助程序员编写出具有较高可读性的代码。
Python编码规范还规定程序员应该使用4个空格表示一次缩进,规定使用空格和制表符结合进行代码格式化以及控制条件之间的空格,禁止在字符串和注释开始和结束处使用空格等。
PEP 8 规定的编码规范一定程度上可以提高程序员的编码水平,
使html代码块更整洁、模块之间的代码更清晰,发挥程序员工作效率
的同时,也能减少非必要的错误。
详谈Python中文件的编码格式
详谈Python中⽂件的编码格式对于Python中的中⽂字符串的处理⽅式⼀、源代码中的编码⽅式分析------所有的⽂本⽂件在保存的时候,都会将⽂本进⾏编码【数据在计算机中是以⼆进制的⽅式存储】,⽂本的编码⽅式⼀般默认为ANSI编码⽅式(ANSI并不是某⼀种特定的字符编码,⽽是在不同的系统中,ANSI表⽰不同的编码。
在英⽂系统中ANSI编码其实是ASCII编码;在中⽂系统中ANSI编码其实是GBK编码)。
------如果代码中包含了⾮ASCII字符(⽐如中⽂),⽽源代码没有声明⽂件的编码⽅式,编译器就会默认以ANSI编码⽅式去对代码中的字符串进⾏解析,当发现字符串中包含⼤于127的字节时,就会报错。
因此,当源代码中包含⾮ASCII字符时,需要在⽂件开头声明⽂件的编码⽅式,如utf-8或者gbk。
------然⽽,⽂件编码⽅式的声明只能保证代码的正常执⾏,并不能保证⾮ASCII字符串的正常输出显⽰。
上述代码在idle上输出为正常的中⽂,但是在pycharm上会输出乱码。
这是因为不同的IDE对⾮ASCII字符串的⽀持程度不同。
idle在打印⾮ASCII字符串时,会使⽤⽂件的编码⽅式将字符串解码成unicode字符串,然后显⽰到界⾯上;⽽pycharm的IDE设置中有⼀个IDE的编码⽅式设置,如果源代码的编码⽅式与IDE的编码⽅式不同,直接输出⾮ASCII字符串就会出现乱码。
解决⽅法为将需要打印的⾮ASCII字符串以源代码的编码⽅式进⾏解码,使之转化为unicode字符串。
所有实际内容相同的⾮ASCII字符串转换为unicode编码之后,编码均相同。
笔者猜测IDE在打印字符串的时候(不论是不是unicode字符串),会先将字符串统⼀转化为unicode字符串,然后使⽤⼀套机制将unicode字符串打印出来。
⼆、读写⽂件时的编码⽅式分析对编码⽅式有了⼀个初步的认识之后,下⾯对读写⽂件时的编码⽅式进⾏介绍。
Python编码规范
Python编码规范Python是一种广泛使用的编程语言,它有着很多优点,比如易读易学、功能丰富、可扩展性强等等。
然而,有时候Python的代码规范并不容易被初学者理解,甚至有些有经验的开发者也可能犯一些错误。
因此,使用Python编程时,遵循一定的编码规范是非常重要的。
1.缩进和空格Python使用缩进来表示代码块,一般情况下,使用4个空格来进行缩进。
不要使用制表符进行缩进,因为不同编辑器对制表符的显示方式可能不同,这会导致代码可读性的下降。
在一行代码的结尾不要使用多余的空格,包括在括号、方括号、大括号、逗号之后。
2.行长和换行一行代码的最大长度建议不超过80个字符,如果超过了这个长度,应该使用换行。
Python中使用反斜杠\来进行多行语句的换行,如下面的例子所示:```s = "This is a very long string that \spans multiple lines"```另外,也可以使用括号来进行换行:```s = ("This is a very long string that ""spans multiple lines")```3.命名规范变量名、函数名和类名应该使用小写字母,不同的单词之间使用下划线_进行分割。
例如,变量名可以是`my_variable`,函数名可以是`my_function`,类名可以是`MyClass`。
常量应该使用大写字母,并且单词之间使用下划线_分割,如`MAX_LENGTH`。
避免使用单个字符作为变量名,除非是在循环中使用。
4.注释注释是代码中非常重要的一部分,它可以帮助其他人理解你的代码,也可以帮助你自己回顾代码时理解其中的逻辑。
在Python中,注释应该清晰准确,不应该包含无关的信息。
单行注释使用`#`开头,多行注释可以使用三引号`'''`或双引号`"""`包围。
python中的编码格式
python中的编码格式Python是一种强大的编程语言,广泛应用于许多领域。
在Python中,我们可以使用不同的编码格式来处理中文,例如UTF-8,GBK,GB2312等。
本文将介绍Python中的编码格式以及如何正确地处理中文。
一、编码格式介绍1. UTF-8UTF-8是Unicode编码的一种实现方式,是一种变长编码格式,它可以用来表示任何Unicode字符。
UTF-8最大的特点是兼容ASCII码,也就是说,只包含ASCII码的文本在UTF-8中可以保持原样。
在Python中,常用的字符串类型为Unicode字符串,因此使用UTF-8编码格式可以避免字符串转换的问题。
2. GBKGBK是一种汉字编码格式,它是国家标准GB2312的扩展版本。
GBK编码格式支持简体中文和繁体中文,可以表示21003个中文字符。
GBK编码格式是定长编码格式,每个字符占据两个字节的空间。
在GBK编码格式中,英文字符和数字仍然占据一个字节,而汉字则占据两个字节。
二、如何正确处理中文在Python中,为了正确处理中文,我们需要了解几个概念:字符集、编码格式和解码。
字符集是由一系列字符组成的集合,而编码格式则是将字符集表示为二进制数据的方式。
解码是将这些二进制数据转换成可读的字符。
在Python中,我们使用Unicode字符串来表示中文,因为Unicode是一种通用字符集,可以支持世界上所有的字符。
当我们需要在代码中使用中文时,我们需要在代码开头使用特殊注释来指定文件的编码格式,例如:#-*-coding:utf-8-*-这样我们就告诉Python解释器,这个文件中的文本使用UTF-8编码格式。
如果我们需要读取一个文件中的中文,我们可以使用文件读取函数来读取文件内容,然后使用decode()方法将编码格式为UTF-8的文本转换为Unicode字符串,例如:f = open("file.txt","r")text = f.read().decode("utf-8")需要注意的是,在使用GBK或GB2312编码格式的字符串时,我们要使用相应的字符集来解码,例如:text = "这是一段中文".decode("gbk")三、总结在Python中,Unicode字符串是表示中文的标准方式,而UTF-8编码格式是其中最常用的一种。
Python语言基础:Python代码规范
总结
Python代码规范
பைடு நூலகம்
案例
THANKS
Python代码规范
Python代码规范
Python代码注释规范实例如下:
#以#开始,表示本行#之后的内容为注释(例如此行) #以’’’开始和结束,表示多行内容注释,在程序运行时不起作用,只做解释说明。 '''print("响应党的号召") print("英雄永远在我心") print("革命传统不可抛!")''' #以下是3个物理行 print("响应党的号召") print("英雄永远在我心") print("革命传统不可抛!") #以下是1个物理行,3个逻辑行(必须使用分号隔开,否则程序报错) print("响应党的号召");print("英雄永远在我心");print("革命传统不可抛!")
print("倡导红色教育进课堂") #前面的空格是按“Tab”键 print("倡导红色教育进课堂") else: print("积极学习党的思想!") #前面的空格是按“Tab”键 print("加油,中国!")
Python代码规范
结果如下:
Python程序是依靠代码块的缩进来体现代码块之间的逻辑关系的,缩进结束就表 示一个代码块结束,同一级别的代码块的缩进量必须相同,通常以四个空格为基 本缩进单位。
Python代码规范
#以下1个逻辑行,3个物理行,行连接的办法是在行的最后加上一个“\”。 print("我爱\ 中华人民\ 共和国")
python 中文编码格式
在Python 中,字符编码是指将字符映射到二进制数据的规则。
在处理中文文本时,常见的字符编码包括 UTF-8、UTF-16、GB2312、GBK 等。
下面是一些常见的Python 中文编码相关的知识点:
1. 字符串和编码:
在 Python 3 中,字符串默认使用 Unicode 编码,这使得处理多语言字符变得更加方便。
你可以使用str.encode()方法将字符串编码为指定的字节序列,或者使用bytes.decode()方法将字节序列解码为字符串。
2. 文件编码:
在处理文件时,通常需要注意文件的编码。
打开文件时可以指定编码,例如:
3. Python 源代码文件编码:
在 Python 源代码文件的开头,可以使用特定的注释来指定源代码文件的编码,以
确保正确解析中文注释和字符串。
4. 处理不同编码之间的转换:
如果你需要在不同编码之间转换,可以使用encode()和decode()方法,同时注意处
理可能的编码错误。
5. 使用chardet库检测文件编码:
如果你不确定文件的编码,可以使用第三方库chardet来检测文件编码。
这是一些基本的关于 Python 中文编码的知识点,确保在处理中文字符时正确选择和使用编码是非常重要的。
Python的代码规范
Python的代码规范Python是一种高级编程语言,因其简洁易读的语法和强大的功能而受到广泛应用。
然而,编写规范的Python代码对于保持代码的可读性、可维护性和可扩展性非常重要。
本文将介绍一些常用的Python代码规范,以帮助开发者编写高质量的Python代码。
1. 使用合适的命名规范在Python中,命名规范是非常重要的,因为良好的命名可以使代码更易读和理解。
以下是一些常用的命名规范:- 变量名和函数名应该使用小写字母和下划线"_"进行分隔。
例如,my_variable、calculate_area()。
- 类名应该使用驼峰命名法。
例如,MyClass、ShapeCalculator。
- 避免使用单个字符作为变量名,除非它们是循环计数器,如i、j、k。
2. 使用适当的缩进和空格在Python中,使用适当的缩进和空格可以使代码更易读。
以下是一些缩进和空格规范:- 使用4个空格作为缩进的标准。
避免使用制表符进行缩进。
- 在二元操作符周围使用空格,例如赋值操作符、比较操作符等。
例如,x = 10,y == 20。
- 在逗号后面使用空格,例如函数参数列表、元组和列表中的元素。
例如,my_function(arg1, arg2)、my_list = [1, 2, 3]。
- 在#符号后面留出空格,用于注释。
例如,# 这是一个注释。
3. 编写清晰的注释注释是良好的代码规范的重要组成部分,它可以提供关于代码目的和功能的说明。
以下是一些编写清晰注释的建议:- 在代码的关键部分添加注释,特别是使用到复杂算法或逻辑的地方。
- 使用自然语言描述注释,而不是显而易见的内容。
- 使用注释来解释代码的意图和目的,而不是简单地重复代码本身。
4. 模块和包的组织在Python中,模块和包的组织对于代码的维护和复用非常重要。
以下是一些模块和包的组织规范:- 在每个Python文件的顶部添加模块级文档字符串,描述模块的用途和功能。
python代码规范
python代码规范Python代码规范是一种约定俗成的编码规范,它旨在提高代码的可读性、可维护性和可共享性。
下面是Python代码规范的一些重要方面:1. 缩进与空格:- 使用4个空格来缩进代码块,不要使用制表符。
- 在括号、括号内和操作符周围添加适当的空格,以提高可读性。
2. 行长度:- 一行代码不应超过79个字符。
超过该长度时,应进行换行。
- 运算符的前部分应该放在换行之前,并在下一行进行缩进。
3. 命名规则:- 变量和函数名应该使用小写字母,并用下划线将多个单词连接起来(例如:my_variable)。
- 类名应使用驼峰命名法(例如:MyClass)。
4. 注释:- 代码中应该添加适当的注释,以解释代码的目的和功能。
- 注释应该尽量清晰和简明,并遵循约定俗成的注释风格。
5. 导入:- 导入语句应放在文件的顶部,并按照标准库、第三方库和本地库的顺序分组导入。
- 每个导入应该在独立的行上。
6. 空行:- 在类和函数的定义之间应该有两个空行。
- 在函数内部的不同逻辑块之间应该有一个空行。
7. 异常处理:- 使用try-except-else-finally结构来处理异常情况。
- 不要使用裸露的except语句,应该明确捕获特定类型的异常。
8. 字符串:- 使用单引号或双引号来表示字符串,但是在一个项目中保持一致性。
- 对于多行字符串,使用三重引号。
9. 模块级别的变量和函数:- 在模块的顶部定义全局变量和常量。
- 在模块的底部定义主要函数和逻辑。
10. 文件命名:- 文件名应该使用小写字母,并用下划线将多个单词连接起来(例如:my_module.py)。
以上是Python代码规范的一些基本要求,具体的规范可以参考PEP 8(Python Enhancement Proposals的第8号提案),它是Python社区关于代码规范的官方指南。
遵循这些规范将使你的代码更易读、易维护,并且更符合Python社区的共识。
Python编码规范
Python编码规范Python是一种高级编程语言,其简单、易学、功能强大、灵活等特点使其在软件开发和数据科学领域得到广泛应用。
编写Python代码的质量和效率,不仅取决于编程者的经验和能力,更取决于编程规范的遵循程度。
本文将介绍Python编码规范的相关要点,以期对读者在编写Python代码时提供参考和指导。
一、命名规范在Python编程中,命名是代码可读性和可维护性的核心。
在命名时,我们需要遵循以下规范:1.变量名应该小写,不同的单词之间使用下划线(_)分割。
示例:name = "Tom"password_hash = "xxxxxx"2.类名应该采用驼峰命名法,即每个单词的首字母大写,不使用下划线。
示例:class Person:pass3.函数名应该使用小写字母,不同的单词之间使用下划线(_)分割。
示例:def add_numbers(x, y):return x + y4.常量名应该全部大写,单词之间用下划线(_)分割。
示例:MAX_NUMBER = 100二、缩进和空格Python不像其他编程语言有强制的大括号({})来表示代码块,而是基于缩进来识别代码块。
因此,缩进和空格的使用对Python代码的可读性和可维护性至关重要。
1.缩进应该使用四个空格,而不是制表符。
示例:if age > 18:print("成年人")2.在括号、中括号和花括号周围不应添加空格。
在操作符周围应该有一个空格。
示例:list1 = [1, 2, 3]if x == 10 and y > 20:z = x + y3.行长度应该限制在80个字符以内,如果行长度超过80个字符,在操作符后进行换行。
示例:if age >= 18 and country == "China" \and city == "Beijing":print("你已经成年了")三、注释规范在编写Python代码时,注释是非常重要的。
Python代码规范
Python代码规范Python是一种高级编程语言,被广泛地应用于许多领域,如数据分析、机器学习、网络编程等。
Python拥有丰富的库和模块,因此在编写Python程序时,代码规范非常重要。
在本文中,我们将深入探讨Python代码规范。
一、命名规范命名规范是Python代码规范的基础。
在Python中,变量、函数和类的命名应该遵循以下规则:1. 变量命名应该以小写字母开头,多个单词之间使用下划线分隔,例如:student_name, age。
2. 函数命名应该以小写字母开头,多个单词之间使用下划线分隔,例如:calculate_salary, show_information。
3. 类命名应该以大写字母开头,多个单词之间使用驼峰命名法,例如:Student, BookInformation。
4. 模块名应该以小写字母开头,多个单词之间使用下划线分隔,例如:student_database, finance_analysis。
二、代码风格Python强制的代码风格是PEP 8。
PEP 8包含Python的代码风格和编程规范,具体包括以下内容:1. 每行代码长度不超过79个字符。
2. 使用4个空格缩进。
3. 函数和类的定义后使用两个空行分隔。
4. 模块级函数和类的定义前使用一个空行分隔。
5. 函数命名应该使用动词或动词短语,如print_student_information()。
6. 类命名应该使用名词或名词短语,如Student, BookInformation。
7. 避免不必要的空格。
三、注释规范注释是代码文档的一部分,它能够帮助阅读者理解代码的用途和特点。
在Python中,注释应该遵循以下规范:1. 单行注释应该在代码行的末尾使用#,多行注释应该使用三个引号。
2. 注释应该清晰明了,解释代码的作用和细节,并且应该是易于理解的自然语言。
3. 应该在代码中添加足够的注释,避免让其他读者看不懂。
四、代码组织规范代码组织规范包括文件和函数的结构和排列方式。
软件工程中的软件编码标准与规范
软件编码标准的持续优化
与时俱进
不断调整和改进编码标准
定制化
结合实际项目需求和团队特点进行定制化
对软件开发者的建议
遵守编码标准和规 范
严格遵守编码标准 确保代码质量
不断学习和提升编 码能力
持续学习新知识 参与技术交流
总结与展望
软件编码标准是软件工程中非常重要的一部分,通过遵守标准 和规范可以提高团队的开发效率和代码质量。未来软件开发将 面临更多挑战和机遇,需要持续学习和适应新技术。同时,软 件编码标准需要不断优化,以适应不断变化的软件开发环境。 对软件开发者来说,遵守标准和持续学习提升编码能力是非常
代码质量与安全性
确保每行代码都符合规范 减少错误和bug产生的可 能性
促进团队合作和知识共享 提高代码质量
维护公共代码库的整洁性 减少潜在的安全漏洞
● 03
第3章 常见的软件编码标准规范
JavaScript编码规范
在软件工程中,JavaScript是一种常用的编程语言, 为了确保代码质量和规范性,通常会使用ESLint进行 代码检查。在编写JavaScript代码时,需要遵循命名 规范、统一缩进风格以及良好的注释规范,这些都是
学习他人的成功经验和失 败教训
避免重复犯错
保持对行业动态的敏感度 避免质量问题
培训团队成员遵守新 标准
制定新的规则和流程
找出问题根源并制 定改进计划
确保团队全员理解 和执行新标准
根据实际情况优化 编码标准
软件编码标准的效果评估
比较改进前后的代码质量和团队效率
检验编码标准改进效果
收集用户反馈和建议
从用户角度评估编码标准效果
不断优化和改进编码标准
Python开发编码规范
1.Python Coding Rule---hoxide 初译dreamingk 校对发布040724---xyb 重新排版040915---ZoomQuiet MoinMoin 美化0506101.1.介绍这篇文档所给出的编码约定适用于在主要的Python 发布版本中组成标准库的Python 代码.请查阅相关的关于在Python 的C 实现中C 代码风格指南的描述.这篇文档改编自Guido 最初的《Python 风格指南》一文.并从《Barry's style guide 》中添加了部分内容.在有冲突的地方,Guide 的风格规则应该是符合本PEP 的意图(译注:就是当有冲突时,应以Guido 风格为准)这篇PEP 也许仍然尚未完成(实际上,它可能永远不会结束).1.2.一致性的建议愚蠢得使用一致性是无知的妖怪(A Foolish Consistency is the Hobgoblin of Little Minds)呆板的坚持一致性是傻的没边了!--Zoomq在这篇风格指导中的一致性是重要的.在一个项目内的一致性更重要.在一个模块或函数内的一致性最重要.但最重要的是:知道何时会不一致--有时只是没有实施风格指导.当出现疑惑时,运用你的最佳判断.看看别的例子,然后决定怎样看起来更好.并且要不耻下问!打破一条既定规则的两个好理由:当应用这个规则是将导致代码可读性下降,即便对某人来说,他已经习惯于按这条规则来阅读代码了.为了和周围的代码保持一致而打破规则(也许是历史原因)--虽然这也是个清除其它混乱的好机会(真正的XP 风格).1.3.代码的布局(Code lay-out)1.3.1.缩进(Indentation)使用Emacs 的Python-mode 的默认值:4个空格一个缩进层次.对于确实古老的代码,你不希望产用Python 进行开发时的编码风格约定原文:PEP 008《Style Guide forPython Code 》下载(中文pdf):PythonCodingRule生混乱,可以继续使用8空格的制表符(8-space tabs).Emacs Python-mode自动发现文件中主要的缩进层次,依此设定缩进参数.1.3.2.制表符还是空格?(Tabs or Spaces)永远不要混用制表符和空格.最流行的Python缩进方式是仅使用空格,其次是仅使用制表符.混合着制表符和空格缩进的代码将被转换成仅使用空格.(在Emacs中,选中整个缓冲区,按ESC-x去除制表符(untabify).)调用python命令行解释器时使用-t选项,可对代码中不合法得混合制表符和空格发出警告(warnings).使用-tt时警告(warnings)将变成错误(errors).这些选项是被高度推荐的.对于新的项目,强烈推荐仅使用空格(spaces-only)而不是制表符.许多编辑器拥有使之易于实现的功能.(在Emacs中,确认indent-tabs-mode是nil).1.3.3.行的最大长度(Maximum Line Length)周围仍然有许多设备被限制在每行80字符;而且,窗口限制在80个字符使将多个窗口并排放置成为可能.在这些设备上使用默认的折叠(wrapping)方式看起来有点丑陋.因此,请将所有行限制在最大79字符(Emacs准确得将行限制为长80字符),对顺序排放的大块文本(文档字符串或注释),推荐将长度限制在72字符.折叠长行的首选方法是使用Pyhon支持的圆括号,方括号(brackets)和花括号(braces)内的行延续.如果需要,你可以在表达式周围增加一对额外的圆括号,但是有时使用反斜杠看起来更好.确认恰当得缩进了延续的行.Emacs的Python-mode正确得完成了这些.一些例子:切换行号显示lang=en id=CA-8ada9855556deb262fcd69a4b5b0900c89ad5f20_000dir=ltr1 class Rectangle(Blob):2def__init__(self,width,height,3color='black',emphasis=None,highlight=0):4if width==0and height==0and\color=='red'and emphasis=='strong'or\highlight>100:5raise ValueError,"sorry,you lose"6if width==0and height==0and(color=='red'or7emphasis is None): 8raise ValueError,"I don't think so"9Blob.__init__(self,width,height,10color,emphasis,highlight)1.3.4.空行(Blank Lines)用两行空行分割顶层函数和类的定义,类内方法的定义用单个空行分割.额外的空行可被用于(保守的(sparingly))分割一组相关函数(groups of related functions).在一组相关的单句中间可以省略空行.(例如.一组哑元(a set of dummy implementations)).当空行用于分割方法(method)的定义时,在'class'行和第一个方法定义之间也要有一个空行.在函数中使用空行时,请谨慎的用于表示一个逻辑段落(indicate logical sections).Python接受contol-L(即^L)换页符作为空格;Emacs(和一些打印工具)视这个字符为页面分割符,因此在你的文件中,可以用他们来为相关片段(sections)分页.1.3.5.编码(Encodings)(PEP263)Python核心发布中的代码必须始终使用ASCII或Latin-1编码(又名ISO-8859-1).使用ASCII的文件不必有译码cookie(coding cookie).Latin-1仅当注释或文档字符串涉及作者名字需要Latin-1时才被使用;另外使用\x转义字符是在字符串中包含非ASCII(non-ASCII)数据的首选方法.作为PEP263实现代码的测试套件的部分文件是个例外.Python2.4以后内核支持Unicode了!不论什么情况使用UTF-8吧!这是王道!--ZoomQuiet1.4.导入(Imports)通常应该在单独的行中导入(Imports),例如:No:import sys,osYes:import sysimport os但是这样也是可以的:from types import StringType,ListTypeImports通常被放置在文件的顶部,仅在模块注释和文档字符串之后,在模块的全局变量和常量之前.Imports应该有顺序地成组安放.标准库的导入(Imports)相关的主包(major package)的导入(即,所有的email包在随后导入)特定应用的导入(imports)你应该在每组导入之间放置一个空行.对于内部包的导入是不推荐使用相对导入的.对所有导入都要使用包的绝对路径.从一个包含类的模块中导入类时,通常可以写成这样:from MyClass import MyClassfrom foo.bar.YourClass import YourClass如果这样写导致了本地名字冲突,那么就这样写import MyClassimport foo.bar.YourClass即使用"MyClass.MyClass"和"foo.bar.YourClass.YourClass"1.5.空格(Whitespace in Expressions and Statements)Guido不喜欢在以下地方出现空格:"spam(ham[1],{eggs:2})".Always write this as"spam(ham[1],{eggs:2})".紧挨着圆括号,方括号和花括号的,如:"spam(ham[1],{eggs:2})".要始终将它写成"spam(ham[1],{eggs:2})"."if x==4:print x,y;x,y=y,x".Always write this as"if x==4:print x,y;x,y=y,x".紧贴在逗号,分号或冒号前的,如:"if x==4:print x,y;x,y=y,x".要始终将它写成"if x==4:print x,y;x,y=y,x".紧贴着函数调用的参数列表前开式括号(open parenthesis)的,如"spam(1)".要始终将它写成"spam(1)".slicing,as in:"dict['key']=list[index]".Always write this as"dict['key']=list[index]".紧贴在索引或切片(slicing?下标?)开始的开式括号前的,如:"dict['key']=list[index]".要始终将它写成"dict['key']=list[index]".在赋值(或其它)运算符周围的用于和其它并排的一个以上的空格,如:切换行号显示lang=en id=CA-4ea043ff9659dbf88b552ac03175acd233409a61_001dir=ltr1 x=12y=23long_variable=3要始终将它写成切换行号显示lang=en id=CA-b9958e5a6e368d5632a88d50311ea71e85728f54_002dir=ltr1 x=12y=23long_variable=3(不要对以上任意一条和他争论---Guido养成这样的风格超过20年了.)1.5.1.其它建议(Other Recommendations)始终在这些二元运算符两边放置一个空格:赋值(=),比较(==,<,>,!=,<>,<=,>=,in,not in,is,is not),布尔运算(and,or,not).*按你的看法在算术运算符周围插入空格.始终保持二元运算符两边空格的一致.一些例子:切换行号显示lang=en id=CA-37280c81ab86daf5140befd245c7302d96ac01c5_003dir=ltr1 i=i+12submitted=submitted+13x=x*2-14hypot2=x*x+y*y5c=(a+b)*(a-b)6c=(a+b)*(a-b)不要在用于指定关键字参数或默认参数值的'='号周围使用空格,例如:切换行号显示lang=en id=CA-e2b7edf7b5962feddd8f63075e47f14d29b561ce_004dir=ltr1 def complex(real,imag=0.0):2return magic(r=real,i=imag)不要将多条语句写在同一行上.No:if foo=='blah':do_blah_thing()Yes:if foo=='blah':do_blah_thing()No:do_one();do_two();do_three()Yes:do_one()do_two()do_three()1.6.注释(Comments)同代码不一致的注释比没注释更差.当代码修改时,始终优先更新注释!注释应该是完整的句子.如果注释是一个短语或句子,首字母应该大写,除非他是一个以小写字母开头的标识符(永远不要修改标识符的大小写).如果注释很短,最好省略末尾的句号(period?结尾句末的停顿?也可以是逗号吧,)注释块通常由一个或多个由完整句子构成的段落组成,每个句子应该以句号结尾.你应该在句末,句号后使用两个空格,以便使Emacs的断行和填充工作协调一致(译按:应该说是使这两种功能正常工作,"."给出了文档结构的提示).用英语书写时,断词和空格是可用的.非英语国家的Python程序员:请用英语书写你的注释,除非你120%的确信这些代码不会被不懂你的语言的人阅读.我就是坚持全部使用中文来注释,真正要发布脚本工具时,再想E文的;开发时每一瞬间都要用在思量中,坚决不用在E文语法,单词的回忆中!--ZoomQUiet约定使用统一的文档化注释格式有利于良好习惯和团队建议!--CodeCommentingRule1.6.1.注释块(Block Comments)注释块通常应用于跟随着一些(或者全部)代码并和这些代码有着相同的缩进层次.注释块中每行以'#'和一个空格开始(除非他是注释内的缩进文本).注释块内的段落以仅含单个'#'的行分割.注释块上下方最好有一空行包围(或上方两行下方一行,对一个新函数定义段的注释).1.6.2.行内注释(Inline Comments)(inline?内联?翻成"行内"比较好吧)一个行内注释是和语句在同一行的注释.行内注释应该谨慎适用.行内注释应该至少用两个空格和语句分开.它们应该以'#'和单个空格开始.x=x+1#Increment x如果语意是很明了的,那么行内注释是不必要的,事实上是应该被去掉的.不要这样写:x=x+1#Increment xx=x+1#Compensate for border但是有时,这样是有益的:x=x+1#Compensate for border1.7.文档化(Documentation Strings)Conventions for writing good documentation strings(a.k.a."docstrings")are immortalized inPEP257.应该一直遵守编写好的文档字符串(又名"docstrings")的约定(?实在不知道怎么译) Documentation Strings--文档化字符;为配合pydoc;epydoc,Doxygen等等文档化工具的使用,类似于MoinMoin语法,约定一些字符,以便自动提取转化为有意义的文档章节等等文章元素!--Zoomq为所有公共模块,函数,类和方法编写文档字符串.文档字符串对非公开的方法不是必要的,但你应该有一个描述这个方法做什么的注释.这个注释应该在"def"这行后.PEP257描述了好的文档字符串的约定.一定注意,多行文档字符串结尾的"""应该单独成行,例如:"""Return a foobangOptional plotz says to frobnicate the bizbaz first."""对单行的文档字符串,结尾的"""在同一行也可以.实际上Python自个儿就使用文档化编码维护着所有内置对象的使用说明\不信的话常试:#python>>>import time>>>dir(time)['__doc__','__file__','__name__','accept2dyear','altzone','asctime','clock','ctime','daylight', 'gmtime','localtime','mktime','sleep','strftime','strptime','struct_time','time','timezone','tzname', 'tzset']>>>help(time.time)Help on built-in function time in module time:time(...)time()->floating point numberReturn the current time in seconds since the Epoch.Fractions of a second may be present if the system clock provides them.1.8.版本注记(Version Bookkeeping)(我觉得叫"注记"更好)如果你要将RCS或CVS的杂项(crud)包含在你的源文件中,按如下做.切换行号显示lang=en id=CA-3a6927d7c3a87cbec851b837d54e40784ac00934_005dir=ltr1 __version__="$Revision:1.4$"2#$Source:E:/cvsroot/python_doc/pep8.txt,v$这个行应该包含在模块的文档字符串之后,所有代码之前,上下用一个空行分割.对于CVS的服务器工作标记更应该在代码段中明确出它的使用如:在文档的最开始的版权声明后应加入如下版本标记:#文件:$id$#版本:$Revision$这样的标记在提交给配置管理服务器后,会自动适配成为相应的字符串,如:#文件:$Id:ussp.py,v1.222004/07/2104:47:41hd Exp$#版本:$Revision:1.4$----HD1.9.命名约定(Naming Conventions)Python库的命名约定有点混乱,所以我们将永远不能使之变得完全一致---不过还是有公认的命名规范的.新的模块和包(包括第三方的框架)必须符合这些标准,但对已有的库存在不同风格的,保持内部的一致性是首选的.1.9.1.描述:命名风格(Descriptive:Naming Styles)有许多不同的命名风格.以下的有助于辨认正在使用的命名风格,独立于它们的作用.以下的命名风格是众所周知的:b(单个小写字母)B(单个大写字母)小写串如:getname带下划的小写串如:_getname大写串如:GETNAME带下划的大写串如:_GETNAMECapitalizedWords(首字母大写单词串)(或CapWords,CamelCase--这样命名是由于它的字母错落有致的样子而来的.这有时也被当作StudlyCaps.如:GetNamemixedCase(混合大小写串)(与首字母大写串不同之处在于第一个字符是小写如:getName) Capitalized_Words_With_Underscores(带下划线的首字母大写串)(丑陋!)还有一种使用特别前缀的风格,用于将相关的名字分成组.这在Python中不常用,但是出于完整性要提一下.例如,os.stat()函数返回一个tuple,他的元素传统上有象st_mode,st_size,st_mtime等等这样的名字.X11库的所有公开函数以X开头.(在Python中,这个风格通常认为是不必要的,因为属性和方法名以对象作前缀,而函数名以模块名作前缀.)另外,以下用下划线作前导或结尾的特殊形式是被公认的(这些通常可以和任何习惯组合(使用?)):_single_leading_underscore(以一个下划线作前导):弱的"内部使用(internal use)"标志.(例如,"from M import*"不会导入以下划线开头的对象).single_trailing_underscore_(以一个下划线结尾):用于避免与Python关键词的冲突,例如."Tkinter.Toplevel(master,class_='ClassName')".__double_leading_underscore(双下划线):从Python1.4起为类私有名.__double_leading_and_trailing_underscore__:特殊的(magic)对象或属性,存在于用户控制的(user-controlled)名字空间,例如:__init__,__import__或__file__.有时它们被用户定义,用于触发某个特殊行为(magic behavior)(例如:运算符重载);有时被构造器(infrastructure)插入,以便自己使用或为了调试.因此,在未来的版本中,构造器(松散得定义为Python解释器和标准库)可能打算建立自己的魔法属性列表,用户代码通常应该限制将这种约定作为己用.欲成为构造器的一部分的用户代码可以在下滑线中结合使用短前缀,例如.__bobo_magic_attr__.1.9.2.说明:命名约定(Prescriptive:Naming Conventions)1.9.2.1.应避免的名字(Names to Avoid)永远不要用字符`l'(小写字母el(就是读音,下同)),O'(大写字母oh),或I'(大写字母eye)作为单字符的变量名.在某些字体中,这些字符不能与数字1和0分开.当想要使用'l'时,用'L'代替它.1.9.2.2.模块名(Module Names)模块应该是不含下划线的,简短的,小写的名字.因为模块名被映射到文件名,有些文件系统大小写不敏感并且截短长名字,模块名被选为相当短是重要的---这在Unix上不是问题,但当代码传到Mac或Windows上就可能是个问题了.当一个用C或C++写的扩展模块有一个伴随的Python模块,这个Python模块提供了一个更高层(例如,更面向对象)的接口时,C/C++模块有一个前导下划线(如:_socket)Python包应该是不含下划线的,简短的,全小写的名字.1.9.2.3.类名(Class Names)几乎没有例外,类名总是使用首字母大写单词串(CapWords)的约定.1.9.2.4.异常名(Exception Names)如果模块对所有情况定义了单个异常,它通常被叫做"error"或"Error".似乎内建(扩展)的模块使用"error"(例如:os.error),而Python模块通常用"Error"(例如:xdrlib.Error).趋势似乎是倾向使用CapWords异常名.1.9.2.5.全局变量名(Global Variable Names)(让我们希望这些变量打算只被用于模块内部)这些约定与那些用于函数的约定差不多.被设计可以通过"from M import*"来使用的那些模块,应该在那些不想被导入的全局变量(还有内部函数和类)前加一个下划线).1.9.2.6.函数名(Function Names)函数名应该为小写,可能用下划线风格单词以增加可读性.mixedCase仅被允许用于这种风格已经占优势的上下文(如:threading.py)以便保持向后兼容. 1.9.2.7.方法名和实例变量(Method Names and Instance Variables)这段大体上和函数相同:通常使用小写单词,必要时用下划线分隔增加可读性.使用一个前导下划线仅用于不打算作为类的公共接口的内部方法和实例变量.Python不强制要求这样;它取决于程序员是否遵守这个约定.使用两个前导下划线以表示类私有的名字.Python将这些名字和类名连接在一起:如果类Foo有一个属性名为__a,它不能以Foo.__a访问.(执著的用户(An insistent user)还是可以通过Foo._Foo__a得到访问权.)通常,双前导下划线应该只用来避免与类(为可以子类化所设计)中的属性发生名字冲突.1.9.2.8.继承的设计(Designing for inheritance)始终要确定一个类中的方法和实例变量是否要被公开.通常,永远不要将数据变量公开,除非你实现的本质上只是记录.人们总是更喜欢给类提供一个函数的接口作为替换(Python2.2的一些开发者在这点上做得非常漂亮).同样,确定你的属性是否应为私有的.私有与非公有的区别在于:前者永远不会被用在一个派生类中,而后者可能会.是的,你应该在大脑中就用继承设计好了你的类.私有属性必须有两个前导下划线,无后置下划线.非公有属性必须有一个前导下划线,无后置下划线.公共属性没有前导和后置下划线,除非它们与保留字冲突,在此情况下,单个后置下划线比前置或混乱的拼写要好,例如:class_优于klass.最后一点有些争议;如果相比class_你更喜欢klass,那么这只是一致性问题.1.10.设计建议(Programming Recommendations)同象None之类的单值进行比较,应该永远用:'is'或'is not'来做.当你本意是"if x is not None"时,对写成"if x"要小心--例如当你测试一个默认为None的变量或参数是否被设置为其它值时.这个其它值可能是一个在布尔上下文中为假的值!基于类的异常总是好过基于字符串的异常.模块和包应该定义它们自己的域内特定的基异常类(base exception class),基类应该是内建的Exception类的子类.还始终包含一个类的文档字符串.例如:切换行号显示lang=en id=CA-85383e2ff1c52a648bf6b0895889148c3785d05b_006dir=ltr1 class MessageError(Exception):2"""Base class for errors in the email package."""使用字符串方法(methods)代替字符串模块,除非必须向后兼容Python2.0以前的版本.字符串方法总是非常快,而且和unicode字符串共用同样的API(应用程序接口)在检查前缀或后缀时避免对字符串进行切片.用startswith()和endswith()代替,因为它们是明确的并且错误更少.例如:No:if foo[:3]=='bar':Yes:if foo.startswith('bar'):例外是如果你的代码必须工作在Python1.5.2(但是我们希望它不会发生!).对象类型的比较应该始终用isinstance()代替直接比较类型.例如:No:if type(obj)is type(1):Yes:if isinstance(obj,int):检查一个对象是否是字符串时,紧记它也可能是unicode字符串!在Python2.3,str和unicode有公共的基类,basestring,所以你可以这样做:切换行号显示lang=en id=CA-4965ed48058c3e9ac1a9e94e99d6cbb2616c3ef6_007dir=ltr1 if isinstance(obj,basestring):在Python2.2类型模块为此定义了StringTypes类型,例如:切换行号显示lang=en id=CA-eb717319e47e22096478e1c13c966237327e41d1_008dir=ltr1 from types import StringTypes2if isinstance(obj,StringTypes):在Python2.0和2.1,你应该这样做:切换行号显示lang=en id=CA-01709e679fdc65154a55f48d7dfb4a0d9ed1c5ca_009dir=ltr1 from types import StringType,UnicodeType2if isinstance(obj,StringType)or\isinstance(obj,UnicodeType):对序列,(字符串(strings),列表(lists),元组(tuples)),使用空列表是false这个事实,因此"if not seq"或"if seq"比"if len(seq)"或"if not len(seq)"好.书写字符串文字时不要依赖于有意义的后置空格.这种后置空格在视觉上是不可辨别的,并且有些编辑器(特别是近来,reindent.py)会将它们修整掉.不要用==来比较布尔型的值以确定是True或False(布尔型是Pythn2.3中新增的)No:if greeting==True:Yes:if greeting:No:if greeting==True:Yes:if greeting:--ZoomQuiet(2005-01-26)。
Python编程规范
Python编程规范Python作为一种流行的编程语言,广泛应用于各个领域的开发中。
为了使Python代码易读、易维护和一致性良好,编程规范成为必要的一部分。
本文将介绍一些Python编程规范的准则,帮助开发者写出高质量的Python代码。
1. 命名规范在Python中,命名规范对于代码的可读性和可维护性非常重要。
以下是一些常见的命名规范的示例:1.1 模块名和包名:使用小写字母和下划线的组合,避免使用特殊字符和空格。
例如,`my_module`。
1.2 类名:使用驼峰命名法(CamelCase)的方式命名,每个单词首字母大写。
例如,`MyClass`。
1.3 函数和方法名:使用小写字母和下划线的组合,描述性好,采用动词或动词短语。
例如,`calculate_average()`。
1.4 变量名:同样使用小写字母和下划线的组合,描述性好,尽量避免使用单个字符或不具有描述性的名称。
例如,`count`。
2. 缩进与空格在Python中,缩进是非常重要的,它决定了代码块的层次结构。
建议使用4个空格作为一个缩进级别,而不是使用制表符。
在代码中应该适当添加空格,以提升代码的可读性。
例如,在运算符周围和逗号后面添加一个空格。
3. 注释注释是代码中非常关键的一部分,可以增加代码的可读性和可维护性。
以下是一些关于Python注释的准则:3.1 对函数、类和模块添加文档字符串(docstring),用于描述其功能和用法。
3.2 在代码中适当添加行注释,解释代码的意图或实现细节。
3.3 避免不必要或过度的注释,让代码本身尽可能地具有自描述性。
4. 导入规范在Python中,导入模块是非常常见的,为了保持代码的整洁性,建议按照以下准则进行导入:4.1 每个导入语句只导入一个模块,避免使用通配符导入(如`from module import *`)。
这样可以避免命名冲突和代码可读性问题。
4.2 将导入语句放在文件的顶部,即在模块注释之后。
python编码总结(编码类型、格式、转码)
python编码总结(编码类型、格式、转码)本⽂详细总结了python编码。
分享给⼤家供⼤家参考,具体如下:【所谓unicode】unicode是⼀种类似于符号集的抽象编码,它只规定了符号的⼆进制代码,却没有规定这个⼆进制代码应该如何存储。
也就是它只是⼀种内部表⽰,不能直接保存。
所以存储时需要规定⼀种存储形式,⽐如utf-8和utf-16等。
理论上unicode是⼀种能够容纳全世界所有语⾔⽂字的编码⽅案。
(其他编码格式不再多说)【所谓GB码】GB就是“国标”的意思,即:中华⼈民共和国国家标准。
GB码是⾯向汉字的编码,包括GB2312(GB2312-80),GBK,GB18030,表⽰范围从⼩到⼤递增,⽽且基本是向下兼容的。
此外经常遇到⼀种叫做CP936的编码,实际上可以⼤概看做是GBK。
【判断编码】1、使⽤isinstance(s, str)来判断⼀个字符串是否为⼀般字符串(str为ascii类型的字符串,utf-8、utf-16、GB2312、GBK等都是ascii类型的字符串);使⽤isinstance(s, unicode)来判断⼀个字符串是否为unicode编码形式的字符串(unicode编码的字符串才是unicode类型的字符串)。
2、使⽤type()或者.__class__在编码正确的情况下:例如:stra = "中", 则使⽤type(stra)的结果是<type 'str'>,表明为ascii类型字符串;例如:strb = u"中", 则使⽤type(strb)的结果是<type 'unicode'>,表明为unicode类型字符串。
tmp_str = 'tmp_str'print tmp_str.__class__ #<type 'str'>print type(tmp_str) #<type 'str'>print type(tmp_str).__name__ #strtmp_str = u'tmp_str'print tmp_str.__class__ #<type 'unicode'>print type(tmp_str) #<type 'unicode'>print type(tmp_str).__name__ #unicode3、最好的办法是使⽤chardet判断,特别是在web相关的操作中,例如抓取html页⾯内容时,页⾯的charset标签只是标⽰编码,有时候不对,⽽且页⾯内容中⼀些中⽂可能超出了标⽰编码的范围,此时⽤charset检测最为⽅便准确。