如何编写清晰可读的的Python代码

2019-07-15  本文已影响0人  EchoPython

初衷

  1. python是一个入门十分容易的编程语言,但是想要写好python却是一件不容易的事情,如果不是专业使用python的人,只是将2. python作为一个脚本语言或者用来处理数据,到了掌握基本的语法之后,便不再寻求进步。但是相信每个学习python的人都知3. 道pythonic这个单词,这个词语很难定义,全靠心领神会,但大家心中都认同Tim Peters的《The Zen of Python》中提到的几点:

建议一:写pythonic代码

遍历容器:

for i in container:
    do_sth_with(i)

安全的处理文件:

with open(path,"r") as f:
    do_sth_with(f)

标准库

写pythonic需要对标准库有充分的理解,特别是内置函数和内置数据类型,比如,对于字符串格式化,一般写作这样:
print 'Hello %s!' % ('Jea',)
这样非常影响可读性,数量多了之后,很难清楚哪一个占位符对应哪一个参数,所以最好这样写:

print 'Hello %(name)s!' % {'name':'Jea'}
这样其实已经相当pythonic,但是想想%占位符,其实是从学习C语言的时候就深深扎根头脑了,在python中,还有更加pythonic的写法。

print '{greet} from {language}.'.format(greet = 'Hello world', language = 'Python')
其中str.format()非常清晰的表明了语句的意图,称为python最为推荐的字符串格式化方法。

pythonic的库或者框架

包和模块的命令采用小写、单数形式,而且短小。
包通常仅作为命名空间,如只包含空的init.py文件。

建议二:理解python和C语言的不同之处

“缩进”与“{}”
'与"
三元操作符 “?:”
python:  X if X<Y else Y
C:  X<Y:X:Y
swith...case

上述的区别相信使用过python的人都清楚,所以不再赘述

建议三:在代码中适当添加注释

python中有三种形式的代码注释:块注释、行注释以及文档注释

使用块注释或者行注释的时候仅仅注释哪些复杂的操作、算法,或者难以理解,不能一目了然的代码
给外部可访问的函数和方法(无论简单与否)添加文档注释。注释要清楚的描述方法的功能,并对参数、返回值以及可能发生的异常进行说明,使得外部调用它的人员仅仅看文档注释就能正确使用。较为复杂的内部方法也需要进行注释。推荐的函数注释如下:

def FuncName(parameter1, parameter2):
    """
    Describe what this function does:
     #such as "Find whether the special string is in the queue or not"
    Args:
        parameter1:parameter type, what is this parameter used for
        parameter2:parameter type, what is this parameter used for
    Returns:
        return type, return value
    """
        function body
        ···
        ···

头文件中包含copyright申明、模块描述等,如有必要,可以考虑加入作者信息以及变更记录。
"""
Licensed Materials - Property of CorpA
(C) Copyright A Corp. 1999, 2011 All Rights Reserved
Copyright statement and purpose...


File name :
Description :

Author:
xxxxxxxx:


"""

建议四:通过适当添加空行使代码布局更为优雅、合理

建议五:编写函数的4个原则*

建议六:将常量集中到一个文件

在python中如何使用常量呢,一般来说有一下两种方式:
class _const:
    class ConstError(TypeError): pass
    class ConstCaseError(ConstError): pass
    
    def __setattr__(self, name, value):
        if self.__dict__.has_key(name):
            raise self.ConstError, "Can't change const. %s" %name
        if not name.isupper():
            raise self.ConstCaseError, \
                'const name "%s" is not all uppercase' %name
        self.__dict__[name] = value

import sys
sys.modules[__name__] = _const()

上面定义了一个类用于约束常量定义,定义常量方式如下(建议将所有的常量定义在一个文件constant.py中):

import const
const.COMPANY = "IBM"
...
# 当在其他模块中引用这些常量时,按照如下方式进行即可:

from constant import const
print const.COMPANY
上一篇 下一篇

猜你喜欢

热点阅读