Python-编码规范相关
Posted qingaoaoo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python-编码规范相关相关的知识,希望对你有一定的参考价值。
Python风格规范
分号:不要在行尾加分号, 也不要用分号将两条命令放在同一行.
行长度:每行不超过80个字符
括号:宁缺毋滥的使用括号
缩进:用4个空格来缩进代码
空行:顶级定义之间空两行, 方法定义之间空一行
注释:确保对模块, 函数, 方法和行内注释使用正确的风格
类:如果一个类不继承自其它类, 就显式的从object继承. 嵌套类也一样.
字符串:即使参数都是字符串, 使用%操作符或者格式化方法格式化字符串. 不过也不能一概而论, 你需要在+和%之间好好判定.
文件和sockets:在文件和sockets结束时, 显式的关闭它.
导入格式:每个导入应该独占一行。模块,三方库,指定程序
语句:通常每个语句应该独占一行
访问控制:在Python中, 对于琐碎又不太重要的访问函数, 应该直接使用公有变量来取代它们, 这样可以避免额外的函数调用开销. 当添加更多功能时, 你可以用属性(property)来保持语法的一致性. (译者注: 重视封装的面向对象程序员看到这个可能会很反感, 因为他们一直被教育: 所有成员变量都必须是私有的! 其实, 那真的是有点麻烦啊. 试着去接受Pythonic哲学吧)
命名:module_name, package_name, ClassName, method_name, ExceptionName, function_name, GLOBAL_VAR_NAME, instance_var_name, function_parameter_name, local_var_name.
应该避免的名称:单字符名称, 除了计数器和迭代器,包/模块名中的连字符(-),双下划线开头并结尾的名称(Python保留, 例如__init__)
命名约定:所谓”内部(Internal)”表示仅模块内可用, 或者, 在类内是保护或私有的.
用单下划线(_)开头表示模块变量或函数是protected的(使用import * from时不会包含).
用双下划线(__)开头的实例变量或方法表示类内私有.
将相关的类和顶级函数放在同一个模块里. 不像Java, 没必要限制一个类一个模块.
对类名使用大写字母开头的单词(如CapWords, 即Pascal风格), 但是模块名应该用小写加下划线的方式(如lower_with_under.py). 尽管已经有很多现存的模块使用类似于CapWords.py这样的命名, 但现在已经不鼓励这样做, 因为如果模块名碰巧和类名一致, 这会让人困扰.
Main:即使是一个打算被用作脚本的文件, 也应该是可导入的. 并且简单的导入不应该导致这个脚本的主功能(main functionality)被执行, 这是一种副作用. 主功能应该放在一个main()函数中.
什么是PEP8,并列具PEP8编码规范
Python Enhancement Proposal(Python增强建议书),PEP8是一种编程规范,内容是一些关于如何让你的程序更具可读性的建议;
1、不要在一句import中多个库,比如importos,sys不推荐
2、顶级定义之间空两行,比如函数或者类定义.方法定义、类定义与第一个方法之间,都应该空一行
3、三引号进行注释;逗号、冒号、分号前不要加空格.
4、4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格
了解Python之禅么?
编程语言 Perl 曾在互联网领域长期占据着统治地位,早期的大多数交互式网站使用的都是 Perl 脚本,正是基于“解决问题的办法有多个”的 Perl座右铭,过于强调灵活性会导致大型项目难以维护,正是鉴于 Perl 语言遇到的问题,经验丰富的程序员在编写 Python 代码时就有了避繁就简的理念,最终在某一天由一个叫 Tim Peters 的人撰写了出来,即 “Python之禅”。它并非出自 Python 创始人之手,但已被官方认可为编程原则。
在编辑器中查看。新建 .py 文件,文件名随便取,键入 import this,并运行代码,会有控制台输出 “Python之禅”的内容:
1. Beautiful is better than ugly.美胜于丑。
2. Explicit is better than implicit.显式优于隐式。
3. Simple is better than complex. 简单胜于复杂。
4. Complex is better than complicated.复杂总比凌乱好。
5. Flat is better than nested. 扁平比嵌套的好。
6. Sparse is better than dense.间隔胜于紧凑。
7. Readability counts.重视可读性。
8. Special cases aren’t special enough to break the rules.
9. Although practicality beats purity.
特殊情况不足以打破规则,即使特例很实用,也不可违背这些规则。
10. Errors should never pass silently.
11. Unless explicitly silenced.
错误是很正常的,要勇于面对和改正,要是你确定不想改,也可以选择pass。
12. In the face of ambiguity, refuse the temptation to guess.
13. There should be one-- and preferably only one --obvious way to do it.
14. Although that way may not be obvious at first unless you’re Dutch.
面对多种可能(歧义),不要尝试去猜测,而是应该尽量找一种,最好是唯一一种明显的解决方案,不过,如果你不是Python之父的话,这种解决方案一开始可能并不明显。
15. Now is better than never.
16. Although never is often better than right now.
做也许好过不做,但动手前要细思量。
17. If the implementation is hard to explain, it’s a bad idea.
18. If the implementation is easy to explain, it may be a good idea.
如果你无法向人解释清楚你的方案,那肯定不是一个好方案;反之亦然。
19. Namespaces are one honking great idea – let’s do more of those!
命名空间是一个绝妙的理念,我们应该多加利用。
结尾语:可以看到,Python之禅讲的不仅是编程理念,更是人生处世之哲学。原来每一个热爱代码的优秀编程者都是哲学家。Python的出身没有 Java、Go那么万众瞩目,早期的Python,在Java、PHP、JS、C++等的重重包围下,尽管受众不广,但仍然得以生存,主要因为Python的设计哲学使其具备了十足的生命力。在这种设计哲学的指引下,Python 逐渐发展成为了一个特别简明友好、容易上手、功能强大的语言。
了解docstring么?
docstring就是一堆代码中的注释。任何编程语言都有注释,不过Python的docstring可以通过help函数直接输出一份有格式的文档,这个就厉害了。代码写完,注释写完,一个help调用,就有文档看了。
docstring可以写在三个地方:模块或包,对象,函数。
了解类型注解么?
https://www.jianshu.com/p/b863c4b29b52
Python对象的命名规范,例如方法或者类等
文件名:全小写,可使用下划线
包:应该是简短的、小写的名字。如果下划线可以改善可读性可以加入。如mypackage。
模块:与包的规范同。如mymodule。
类:总是使用首字母大写单词串。如MyClass。内部类可以使用额外的前导下划线。
函数&方法:函数名应该为小写,可以用下划线风格单词以增加可读性。如:myfunction,my_example_function。
*注意*:混合大小写仅被允许用于这种风格已经占据优势的时候,以便保持向后兼容。
函数和方法的参数:总使用“self”作为实例方法的第一个参数。总使用“cls”作为类方法的第一个参数。
如果一个函数的参数名称和保留的关键字冲突,通常使用一个后缀下划线好于使用缩写或奇怪的拼写。
全局变量:对于from M import *导入语句,如果想阻止导入模块内的全局变量可以使用旧有的规范,在全局变量上加一个前导的下划线。
*注意*:应避免使用全局变量
变量:变量名全部小写,由下划线连接各个单词。如color = WHITE,this_is_a_variable = 1
*注意*:1.不论是类成员变量还是全局变量,均不使用 m 或 g 前缀。
2.私有类成员使用单一下划线前缀标识,多定义公开成员,少定义私有成员。
3.变量名不应带有类型信息,因为Python是动态类型语言。如 iValue、names_list、dict_obj 等都是不好的命名。
常量:常量名所有字母大写,由下划线连接各个单词如MAX_OVERFLOW,TOTAL。
异常:以“Error”作为后缀。
缩写:命名应当尽量使用全拼写的单词,缩写的情况有如下两种:
1.常用的缩写,如XML、ID等,在命名时也应只大写首字母,如XmlParser。
2.命名中含有长单词,对某个单词进行缩写。这时应使用约定成俗的缩写方式。
例如:function 缩写为 fn
text 缩写为 txt
object 缩写为 obj
count 缩写为 cnt
number 缩写为 num,等。
前导后缀下划线
一个前导下划线:表示非公有。
一个后缀下划线:避免关键字冲突。
两个前导下划线:当命名一个类属性引起名称冲突时使用。
两个前导和后缀下划线:“魔”(有特殊用图)对象或者属性,例如__init__或者__file__。绝对不要创造这样的名字,而只是使用它们。
*注意*:关于下划线的使用存在一些争议。
特定命名方式
主要是指 __xxx__ 形式的系统保留字命名法。项目中也可以使用这种命名,它的意义在于这种形式的变量是只读的,这种形式的类成员函数尽量不要重载。如
class Base(object):
def __init__(self, id, parent = None):
self.__id__ = id
self.__parent__ = parent
def __message__(self, msgid):
# …略
其中 __id__、__parent__ 和 __message__ 都采用了系统保留字命名法。
附:Google Python命名规范
module_name, package_name, ClassName, method_name, ExceptionName, function_name, GLOBAL_VAR_NAME, instance_var_name, function_parameter_name, local_var_name.
Python中的注释有几种?
这些问题属于基本的编程语言问题,遇到的时候一定要完整、准确的回答,给面试者留下一个好的印象
1、单行注释
是在代码前面或者要注释的内容前面加上’#‘,目的是明确一行代码的作用和说明,代码可能不是一个人在写,但是多人合作的情况下,你要保证自己的代码别人能很快的理解,也是保证一段时间以后自己(忘记的情况下)也能很快的想起一行代码的意义
2、多行注释
多行注释有两种,""" """ 和‘‘‘ ‘‘‘,但是需要注意的是,相同的引号里面不要出现同类型的引号就好了。
3、编码注释
# -*- coding: UTF-8 -*- 常常出现在代码的最上面,用来标注代码的编码方式,常见于python2’,python3以后默认编码方式是utf-8,就不需要加这一行注释了
4. 平台注释
如果需要使Python程序运行在Windows平台上,需在Python文件的上方加上 #!/usr/bin/python 注释说明。
此外,注释是养成良好代码习惯必不可少的方法,有利于自己更方便了大家,希望我们在以后的编程中,合理规范的使用。
如何优雅的给一个函数加注释?
可以使用 docstring 配合类型注解
如何给变量加注释?
Python代码缩进中是否支持Tab键和空格混用.
不支持
是否可以在一句import中导入多个库?
可以,但是不建议,出于操作便利性的原因,与代码本身无关:
更易于阅读:import fred 比 import barney, betty, wilma, fred, bambam, pebbles 更容易找。
更易于搜索:能通过关键词马上 import fred 搜寻到位置,而 import barney, fred 不行。
更易于编辑:插入和移除更快捷;
更易于维护:一旦模块有所修改,能根据报错的行数知道是哪个模块出错了,而一行 import 会很麻烦;
如果漏掉或者添加模块,你还能通过行数和变更位置感知到。
总结:多行 import 更多地是为了方便编辑(复制、粘贴、删除)以及维护,而提到的易于搜索似乎无足轻重,因为多数人应该会把 import 写在 Python 文件开头,搜索文件前部应该是不难的。
在给Py文件命名的时候需要注意什么?
尽量不要使用与系统命名一样的文件
例举几个规范Python代码风格的工具
PEP8、
如何让程序更具可读性:
适当地加入非前导空格,适当的空行以及一致的命名;
以上是关于Python-编码规范相关的主要内容,如果未能解决你的问题,请参考以下文章