zoukankan      html  css  js  c++  java
  • python编程规范系列--建议01~07

      本系列来自《编写高质量代码 改善python程序的91个建议》的读书笔记整理。

    本书主要内容

        1)容易被忽视的重要概念和常识,如代码的布局和编写函数的原则等;
        2)编写python程序管用的方法,如利用assert语句去发现问题,使用enumerate()获取序列迭代的索引和值等;
        3)语法中的关键条款,如有节制地使用from…import语句,异常处理的几点基本原则等;
        4)常见库的使用,如按需选择sort()或者sorted(),使用Queue使多线程更安全等;
        5)python设计模式的使用,如用发布订阅模式实现松耦合,用状态模式美化代码等;
        6)python内部机制,如名字查找机制,描述符机制等;
        7)开发工具的使用,如pip等各种开发工具的使用,各种代码测试用具的使用等;
        8)python代码的性能分析,优化的原则,工具,技巧,以及常见性能问题的解决等。

    本章主要内容

            建议1:理解pythonic概念
            建议2:编写pythonic代码
            建议3:理解python与C语言的不同之处
            建议4:在代码中适当添加注释
            建议5:通过适当添加空行使代码布局更为优雅,合理
            建议6:编写函数的4个原则
            建议7:将常量集中到一个文件

    建议1:理解pythonic概念

        1)pythonic:充分体现python自身特色的代码风格。
        2)举例:
    1 # 交换两个变量的值,packaging/unpackaging机制
    2 x = 2
    3 y = 3
    4 x, y = y, x
    5 print x, y
    1 # 字符串格式化
    2 print 'Hello %(name)s!' % {'name': 'Tom'}
    1 # 字符串格式化
    2 print 'Hello {name}!'.format(name='Tom')
        3)python的包和模块结构: (1) 包和模块的命名采用小写,单数形式且短小;(2)包通常作为命名空间,如只包含空的__init__.py文件。

    建议2:编写pythonic代码

        1)要避免劣化代码:(1)避免只用大小写来区分不同的对象;(2)避免使用容易引起混淆的名称;(3)不要害怕过长的变量名;
        2)pep8检测工具:
    1 C:>pip install -U pep8
    2 
    3 C:UsersAdministratorDesktopzxt>pep8 --first database.py
    4 database.py:83:1: E302 expected 2 blank lines, found 1
    5 
    6 >pep8 --show-source --show-pep8 waijiao.py

    建议3:理解python与C语言的不同之处

        1)缩进{}
        2)'"
        3)三元操作符?:
        4)switch...case
    1 n = raw_input("please input a number:")
    2 if n == "0":
    3 print "You typed zero."
    4 elif n == "1":
    5 print "You are in top."
    6 elif n == "2":
    7 print "N is an even number."
    8 else:
    9 print "Error!"
    用跳转可以实现:
    1 def func():
    2      return {
    3          "0": "You typed zero.",
    4          "1": "You are in top.",
    5          "2": "N is an even number."
    6      }.get(n, "Error!")

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

        1)使用块或者行注释的时候仅注释复杂的操作,算法,难以理解的技巧或者不够一目了然的代码;
        2)注释和代码隔开一定的距离;
        3)给外部可访问的函数和方法添加文档注释(ddocstring)(""" """);
        4)推荐文件头部包含copyright申明。模块描述等。
     1 """
     2 Requests HTTP library
     3 ~~~~~~~~~~~~~~~~~~~~~
     4 Requests is an HTTP library, written in Python, for human beings. Basic GET
     5 usage:
     6    >>> import requests
     7    >>> r = requests.get('https://www.python.org')
     8    >>> r.status_code
     9    200
    10    >>> 'Python is a programming language' in r.content
    11    True
    12 ... or POST:
    13    >>> payload = dict(key1='value1', key2='value2')
    14    >>> r = requests.post('http://httpbin.org/post', data=payload)
    15    >>> print(r.text)
    16    {
    17      ...
    18      "form": {
    19        "key2": "value2",
    20        "key1": "value1"
    21      },
    22      ...
    23    }
    24 The other HTTP methods are supported - see `requests.api`. Full documentation
    25 is at <http://python-requests.org>.
    26 :copyright: (c) 2015 by Kenneth Reitz.
    27 :license: Apache 2.0, see LICENSE for more details.
    28 """

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

        1)在一组代码表达完一个完整的思路之后,应该用空白进行间隔;
        2)尽量保持上下文语义的易理解性(如调用函数写在被调用函数之上);
        3)避免过长的代码行,每行最好不要超过80个字符;
        4)不要为了保持水平对齐而使用多余的空格;
        5)空格是使用要能在需要强调的时候警示读者:
            (1)二元运算符的左右两边应该有空格;
            (2)逗号和分号前不要使用空格;
            (3)函数名和左右括号之间,序列索引操作时序列名和[ ]之间不要空格,函数默认参数两侧不需要空格;
            (4)强调前面的操作符的时候使用空格。

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

        1)函数设计尽量短小,嵌套层次不宜过深(最好控制在3层以内);
        2)函数声明应该做到合理,简单,易于使用;
        3)函数参数设计应该考虑向下兼容;
        4)一个函数只做一件事,尽量保证函数语句粒度的一致性。

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

    示例:const.py
     1 # -*-coding:UTF-8 -*-
     2 
     3 import sys
     4 
     5 
     6 class _const(object):
     7 
     8     class ConstError(TypeError):
     9         pass
    10 
    11     class ConstCaseError(ConstError):
    12         pass
    13 
    14     def __setattr__(self, name, value):
    15         if self.__dict__.has_key(name):
    16             raise self.ConstError, "Can't change const.{name}".format(name=name)
    17         if not name.isupper():
    18             raise self.ConstCaseError, 'const name "{name}" is not all uppercase'.format(name=name)
    19         self.__dict__[name] = value
    20 
    21 
    22 sys.modules[__name__] = _const()
  • 相关阅读:
    一个简单XQuery查询的例子
    《Microsoft Sql server 2008 Internals》读书笔记第七章Special Storage(1)
    《Microsoft Sql server 2008 Internals》读书笔记第八章The Query Optimizer(4)
    《Microsoft Sql server 2008 Internal》读书笔记第七章Special Storage(4)
    SQL Server中SMO备份数据库进度条不显示?
    《Microsoft Sql server 2008 Internal》读书笔记第七章Special Storage(5)
    《Microsoft Sql server 2008 Internal》读书笔记第七章Special Storage(3)
    《Microsoft Sql server 2008 Internal》读书笔记第八章The Query Optimizer(2)
    省市三级联动的DropDownList+Ajax的三种框架(aspnet/Jquery/ExtJs)示例
    FireFox意外崩溃时的手工恢复命令
  • 原文地址:https://www.cnblogs.com/zhangbc/p/10285549.html
Copyright © 2011-2022 走看看