美文网首页
第一章 引论

第一章 引论

作者: HelloWorld__ | 来源:发表于2019-10-28 10:40 被阅读0次
    建议1:理解Pythonic的概念

    对于Pythonic的概念,众人各有自己的看法,但大家心目中都认同一个共具体的指南,那就是Tim Peters的《The Zen of Python》(Python之禅)。

    (1) 在这一充满禅意的诗篇中,有几点风场深入人心

    * 美胜丑,显胜隐,简胜杂,杂胜乱,平胜陡,疏胜密。
    * 找到简单问题的一个方法,最好是唯一的方法。
    * 难以解释的实现,源自不好的注意;如有非常棒的注意,他的实现肯定易于解释。
    

    (2) Python的包和模块结构日益规范化

    * 包和模块的命名采用小写、单数形式,而且短。
    * 包通常仅作为命名空间,如只包含空的__init__.py文件。
    
    建议2:编写Pythonic代码

    (1) 避免而劣化代码

    * 避免只用大小写来区分不同的对象。
    * 避免使用容易引起混淆的名称。如字母O与数值0,字母l与数值1等。
    * 不要害怕过长的变量名。
    

    (2) 深入认识Python有助于编写Pythonic代码

    * 学习官方手册中的Language Reference和Library Reference。掌握语言特性和库特性,以后许多“惯用法”自然而然就掌握了。
    * 不断学习Python新版本,及时掌握它的变化趋势。
    * 深入学习业界公认的比较Pythonic的代码,比如Flask、gevent、requests等
    

    (3) python编码风格指南PEP8

    * 它包括了对代码布局、注释、命名规划等方面要求。
    * PEP8也不是唯一的编程规范,有些公司制定的编程规范也有参考意义,比如Google Python Style Guide
    
    建议3:理解Python与C语言的不同之处
    * Python使用严格的代码缩进方式分隔代码块
    * Python中 '和"没有明显区别,仅仅在输入字符串内容,存在微小差异
    
    建议4:在代码中添加适当注释

    Python中有3种形式的代码注释:块注释、行注释以及文档注释
    (1) 使用块或者行注释的时候,仅仅在注释那些复杂的操作、算法,还有恳望别人难以理解的技巧活不够一目了然的代码
    (2) 注释和代码隔开一定的距离,同时在块注释之后最好留几行空白再写代码,例如下面,第一行阅读性更好

    x = x + 1          # increace x by 1
    x = x + 1 # increace x by 1
    

    (3) 给外部可访问的函数和方法添加文档注释,推荐的函数注释如下

    def max(num1, num2):
        """compare two numbers,return the max.
            Args:
                    num1: int,double,float
                    num2: int,double,float
            Returns: 
                    int,double,float, return the max number.
        """
        if num1 >= num2:
            return num1
        if num2 > num1:
            return num1
    

    (4) 推荐在文件头中包含copyright申请、模块描述,如有必要,可以考虑加入坐着信息以及变更记录

    """
        Licensed Materials - Property of CorpA
        (C) CopyRight A Corp. 1999, 2011 All Rights Reserved
        CopyRight statement and purpose...
        ------------------------------------------------
        File Name        :  comments.py
        Description      :  description waht the main function of this file
    
        Author:  Author name
        Change Activity:
                  list the change activity and time and author information.
    """
    
    建议5:通过适当添加空行使代码布局更为优雅、合理

    (1) 示例一:

    import random
    
    guesses_made = 0
    
    name = raw_input("Hello! What is your name?\n")
    
    number = random.randint(1, 20)
    
    print("Well, {0}, I am thinking of a number between 1 and 20".format(name))
    
    while guesses_made < 6:
        guess = int(raw_input("Take a guess: "))
        guesses_made += 1
    
        if guess < number:
            print("You guess is too low.")
        if guess > number:
            print("You guess is too high.")
        if guess == number:
            break
    
    if guess == number:
        print("Good job!")
    else:
        print("Nope. The number is {0}".format(number))
    

    (2) 尽量保持上下文语义的易理解性。如当一个函数需要调用另一个函数的时候,尽量将他们放在一起,最好调用者在上,被调者在下,如下面代码:

    def A():
        B()
    
    def B():
        pass
    

    (3) 避免过长的代码行,每行最好不要超过80个字符
    (4) 不要为了保持水平对齐而使用多余的空格,如下反例:

    x =                    5
    Year =              2013
    name =             "Jam"
    d2 = {"spam": "eggs": 3}
    
    建议6:编写函数的4个原则
    1 函数设计要尽量短小,嵌套层次不宜过深。
    2 函数声名应该做到合理、简单、易于使用。
    3 函数参数设计应考虑向下兼容。
    4 一个函数只做一件事,尽量保证函数语句粒度的一致性。
    
    建议7:将常亮集中到一个文件

    Python中存在常量吗?很多人的答案是否定的。实际上Python的内建命名空间是支持一小部分常量的,如我们熟悉的True、False、None等,只是Python没有提供定义常量的直接方式。那么,在Python中应该如何使用常量呢?一般来说有以下两种方式:
    1 通过命令风格来提醒使用者改变量代表的意义为常量,如:MAX_OVERFLOW、TOTAL
    2 通过自定义类实现常量功能

    # FileName: const.py
    
    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.{}".format(name)
            if not name.isupper():
                raise self.ConstCaseError, \
                      "const name {} is not all uppercase".format(name)
                self.__dict__[name] = value
    import sys
    sys.modules[__name__] = _const()
    
    # 使用以上定义常量
    
    import const
    
    print(const.COMPANY)
    

    相关文章

      网友评论

          本文标题:第一章 引论

          本文链接:https://www.haomeiwen.com/subject/oxivvctx.html