Python行间距调整 python行与行之间必须对齐 您所在的位置:网站首页 python行与行之间必须对齐 Python行间距调整 python行与行之间必须对齐

Python行间距调整 python行与行之间必须对齐

2024-03-31 06:40| 来源: 网络整理| 查看: 265

无规矩不成方圆,在编码过程中遵循编码规范能提高开发效率,使自己的代码根据可读性和可维护性

1、不要在行尾加“;”,不要使用“;”将两行代码放在同一行。 2、每行不超过80个字符,注释和长的导入语句除外。 3、不要使用反斜杠“\”连接行,在Python中会把(),[],{}中的行隐式连接起来。 4、尽量不要在返回语句、条件语句这个使用括号,除非用于行连接。 5、缩进代码不要Tab、空格混用。Python是严格的使用缩进来写模块的,模块中的代码的缩进量必须一样。不能在代码块中出现不同的缩进。 6、适当使用空行来区分不同的定义和方法。空行不是语法的一部分,但是是代码的一部分。 7、括号中不要出现空格。不要在逗号, 分号, 冒号前面加空格, 但应该在它们后面加(除了在行尾)。 参数列表, 索引或切片的左括号前不应加空格。 当’=’用于指示关键字参数或默认参数值时, 不要在其两侧使用空格。 在二元操作符两边都加上一个空格, 比如赋值(=), 比较(==, , !=, , =, in, not in, is, is not), 布尔(and, or, not). 至于算术操作符两边的空格该如何使用, 需要你自己好好判断. 不过两侧务必要保持一致。 8、#!先用于帮助内核找到Python解释器, 但是在导入模块时, 将会被忽略. 因此只有被直接执行的文件中才有必要加入#!. 9、注释应该使用正确的风格,对于函数之类的应该在文档中,注明参数,函数的作用及函数的输入输出。 以下函数,包括函数, 方法, 以及生成器. 一个函数必须要有文档字符串, 除非它满足以下条件: 外部不可见 非常短小 简单明了 文档字符串应该包含函数做什么, 以及输入和输出的详细描述. 通常, 不应该描述”怎么做”, 除非是一些复杂的算法. 文档字符串应该提供足够的信息, 当别人编写代码调用该函数时, 他不需要看一行代码, 只要看文档字符串就可以了. 对于复杂的代码, 在代码旁边加注释会比使用文档字符串更有意义. 关于函数的几个方面应该在特定的小节中进行描述记录, 这几个方面如下文所述. 每节应该以一个标题行开始. 标题行以冒号结尾. 除标题行外, 节的其他内容应被缩进2个空格. Args: 列出每个参数的名字, 并在名字后使用一个冒号和一个空格, 分隔对该参数的描述.如果描述太长超过了单行80字符,使用2或者4个空格的悬挂缩进(与文件其他部分保持一致). 描述应该包括所需的类型和含义. 如果一个函数接受*foo(可变长度参数列表)或者**bar (任意关键字参数), 应该详细列出*foo和**bar. Returns: (或者 Yields: 用于生成器) 描述返回值的类型和语义. 如果函数返回None, 这一部分可以省略. Raises: 列出与接口有关的所有异常. 10、类:如果类没有继承自任何其他的类,应该显示继承自object类。 继承自 object 是为了使属性(properties)正常工作, 并且这样可以保护你的代码, 使其不受Python 3000的一个特殊的潜在不兼容性影响. 这样做也定义了一些特殊的方法, 这些方法实现了对象的默认语义, 包括 new, init, delattr, getattribute, setattr, hash, repr, and str 。 11、避免在循环中用+和+=操作符来累加字符串. 由于字符串是不可变的, 这样做会创建不必要的临时对象, 并且导致二次方而不是线性的运行时间. 作为替代方案, 你可以将每个子串加入列表, 然后在循环结束后用 .join 连接列表. (也可以将每个子串写入一个 cStringIO.StringIO 缓存中.) 12、文件和socket 在文件和sockets结束时, 显式的关闭它. 除文件外, sockets或其他类似文件的对象在没有必要的情况下打开, 会有许多副作用, 例如: 它们可能会消耗有限的系统资源, 如文件描述符. 如果这些资源在使用后没有及时归还系统, 那么用于处理这些对象的代码会将资源消耗殆尽. 持有文件将会阻止对于文件的其他诸如移动、删除之类的操作. 仅仅是从逻辑上关闭文件和sockets, 那么它们仍然可能会被其共享的程序在无意中进行读或者写操作. 只有当它们真正被关闭后, 对于它们尝试进行读或者写操作将会跑出异常, 并使得问题快速显现出来. 而且, 幻想当文件对象析构时, 文件和sockets会自动关闭, 试图将文件对象的生命周期和文件的状态绑定在一起的想法, 都是不现实的. 因为有如下原因: 没有任何方法可以确保运行环境会真正的执行文件的析构. 不同的Python实现采用不同的内存管理技术, 比如延时垃圾处理机制. 延时垃圾处理机制可能会导致对象生命周期被任意无限制的延长. 对于文件意外的引用,会导致对于文件的持有时间超出预期(比如对于异常的跟踪, 包含有全局变量等).

建议使用with语句管理文件

with open("hello.txt") as hello_file:for line in hello_file: print line

对于不支持使用”with”语句的类似文件的对象,使用 contextlib.closing():

import contextlib with contextlib.closing(urllib.urlopen("http://www.python.org/")) as front_page: for line in front_page: print line

Legacy AppEngine 中Python 2.5的代码如使用”with”语句, 需要添加 “from future import with_statement”.

13、TODO注释 为临时代码使用TODO注释, 它是一种短期解决方案. 不算完美, 但够好了. TODO注释应该在 所有开头处包含”TODO”字符串, 紧跟着是用括号括起来的你的名字, email地址或其它标识符. 然后是一个可选的冒号. 接着必须有一行注释, 解释要做什么. 主要目的是为了有一个统一的TODO格式, 这样添加注释的人就可以搜索到(并可以按需提供更多细节). 写了TODO注释并不保证写的人会亲自解决问题. 当你写了一个TODO, 请注上你的名字.

14、导入总应该放在文件顶部, 位于模块注释和文档字符串之后, 模块全局变量和常量之前. 导入应该按照从最通用到最不通用的顺序分组: 1.标准库导入 2.第三方库导入 3.应用程序指定导入 每种分组中, 应该根据每个模块的完整包路径按字典序排序, 忽略大小写. 15、Main 即使是一个打算被用作脚本的文件, 也应该是可导入的. 并且简单的导入不应该导致这个脚本的主功能(main functionality)被执行, 这是一种副作用. 主功能应该放在一个main()函数中. 在Python中, pydoc以及单元测试要求模块必须是可导入的. 你的代码应该在执行主程序前总是检查 if name == ‘main’ , 这样当模块被导入时主程序就不会被执行.

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

所有的顶级代码在模块导入时都会被执行. 要小心不要去调用函数, 创建对象, 或者执行那些不应该在使用pydoc时执行的操作. 16、命名规范:在所有的模块中应该有一致的命名规范 避免: 1.单字符名称, 除了计数器和迭代器. a,b,c之类的无意义的命名 2.包/模块名中的连字符(-) 3.双下划线开头并结尾的名称(Python保留, 例如init) 命名约定: 1.所谓”内部(Internal)”表示仅模块内可用, 或者, 在类内是保护或私有的. 2.用单下划线(_)开头表示模块变量或函数是protected的(使用import * from时不会包含). 3.用双下划线(__)开头的实例变量或方法表示类内私有. 4.将相关的类和顶级函数放在同一个模块里. 不像Java, 没必要限制一个类一个模块. 5.对类名使用大写字母开头的单词(如CapWords, 即Pascal风格), 但是模块名应该用小写加下划线的方式(如lower_with_under.py). 尽管已经有很多现存的模块使用类似于CapWords.py这样的命名, 但现在已经不鼓励这样做, 因为如果模块名碰巧和类名一致, 这会让人困扰.



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有