# -*- coding: utf-8 -*-

# python:2.x

__author__ = 'Administrator'

#分解代码

#小就是美,这也适用所有级别的代码,当一个函数,类或者一个代码太大时,应该对其进行分解

#一个函数或者一个方法的内容不应该起过一个屏幕,也就是大约25到30行,否则它将很难跟踪和理解

#关于代码生可以参看eric raymond所著的art of unix programming(中文版<unix编码艺术>)中章节

#类的方法数量应该有一定的限制,当方法超过10个时,即使创建者对其也很难做出完整描绘,一个常见的方法是分离功能并且在该类之外创建多个类

#一个模块的大小也应该有一定的限制,当它超过500行时,应该被分解为多个模块

#这个工作将会影响API,并且意味着在包级别上需要付出被额外的工作来确保代码分解和组织的方式不会使API难以使

#换句话说,API应该问题是从用户角度来测试,以确保它可用,易于记忆和简明.

#使用Egg

"""

当应用程序不断成长时,主文件夹下面的包数量也会变大,例如,像ZOPE这样的框架在根包zope命名空间中就有超过50个包

为了避免使整个代码言库都在同一个文件夹里面,并能单独发布每个包,可以使用python eggs:http://peak.telecommnuity.com/devcenter/pythoneggs

来解决,它们提供了一个构建命名空间的包的简单方法,就像JAVA中提供的JAR一样

例如,如果希望将 acme.templates作为单独的包分发,可以使用setuptools(用于建立的python egg程序库)来构建一个基于egg的包,在acme文件夹中的特殊方法__init__.py里面添加以下内容

http://peak.telecommunity.com/devcenter/setuptools#namespace-packages

try:

__import__('pkg_resources').declare_namespace(__name__)

except ImportError:

from pkgutil import extend_path

__path__==extend._path(__path__,__name__)

然后,acme文件夹可以保存templates文件夹,并使其能够位于acme.templates命名空间之下,acme.pdf甚至可以从独立蝗acme文件夹中被分离出来

遵循相同规则,来自相同组织的包可以通过egg收集在相同命名空间中,即使它们互不相关,所有来自ingeniweb包都使用iw命名空间,并且可以使用前缀

http://pypi.python.org/pypi?%Aaction=search&term=iw/&submit=search,在cheeseshop上找到

除了命名空间之外,以egg形式分发应该程序也对模块化有帮助,因为可以视每个egg为一个独立组件

"""

#使用deprecation过程

#当包已经被发布被第三方代码使用时,对API修改就必须小心进行了,处理这种修改最简单的方法是遵循一个deprecation过程,在此是2个版本中间发行版本

#例如

class S(object):#版本1

def run_script(self,s1,s2):

print 'work'

import warnings

class S1(object):#版本1.5

def run_script(self,s1,s2):

print 'work'

warnings.warn(('run_scriptwill'),DeprecationWarning)

return self.run(s1,s2)

def run(self,s1,s2=None):

print 'word'

class S3(object):#版本2

def run(self,s1,s2=None):

pass

#warnings模块将在第一次调用时警告用户,并且魅力下一个调用,这个模块的另一个功能是创建过滤器,用来管理影响应用程序警告信息。

#docs.python.org/lib/warning-filter.html

#有用工具

#pylint:一个非常灵活的元代码分析器

#除了一些质量保证方便试题之外,它还能够检查指定源代码是否遵循某种命名约定,默认设置对应pep8,一个pylint脚本提供了一个shell报告输出

#要安装pylint,可以通过easy_install来使用logiab.installer egg,如下

#图片

#注意,pylint总会在某些情况下给出不好的评级或者抱怨,例如一个被模块本身的代码使用import语句在某些情况下也是很好的(使其在命名空间中可用)

#如果调用采用混合大小写的方法命名程序库,那么它也可能降低评级,在任何情况下,全局评估不像c中的lint那么重要,它只是一个指出潜在改进的工作,

# 调优它第一件要做事情就是,使用-generate-rcfile选项在原始目录下创建一个.pylinrc配置文件,如下

#图片

#在windows下面,~文件夹必须替换成用户文件夹,一般位于documents and settings文件夹中(环境变量)

#配置文件中首先需要修改的是,在reports小节中将reports变量设置为no,以避免生成冗长的报告,在例子中,只需要 用这个工作侦测名称,当完成这个修改之后,这个工具将只会显示警告,如下

#图片

#clonedigger:http://clonedigger.sourceforge.net是一个很好的工具,它尝试访问代码树以侦测代码中相似之处,它基于网站上所说明相当复杂算法,有效地补充了pylint.

#要安装它,可以使用 easy_install,如下

#easy_install CloneDigger

#将得到一个可被用于侦测重复代码的clondigger命令,命令选项可以在http://clonedigger.sourceforge.net/documentation.html上找到

#output.html是它生成的一个html输入,其中包含了clonedigger一个工作报告

python高级编程之选择好名称:完2的更多相关文章

  1. python高级编程之选择好名称:完

    由于时间关系,python高级编程不在放在这边进行学习了,如果需要的朋友可以看下面的网盘进行下载 # # -*- coding: utf-8 -*- # # python:2.x # __author ...

  2. python高级编程之选择好名称:命名指南

    # # -*- coding: utf-8 -*- # # python:2.x # __author__ = 'Administrator' #命名指南 #一组常用的命名规则可以被应用到变量,方法函 ...

  3. python高级编程之选择好名称:pepe8和命名最佳实践

    # # -*- coding: utf-8 -*- # # python:2.x # __author__ = 'Administrator' # my_list=['a','b','c','d'] ...

  4. python高级编程技巧

    由python高级编程处学习 http://blog.sina.com.cn/s/blog_a89e19440101fb28.html Python列表解析语法[]和生成 器()语法类似 [expr  ...

  5. Python高级编程之生成器(Generator)与coroutine(二):coroutine介绍

    原创作品,转载请注明出处:点我 上一篇文章Python高级编程之生成器(Generator)与coroutine(一):Generator中,我们介绍了什么是Generator,以及写了几个使用Gen ...

  6. 第三章:Python高级编程-深入类和对象

    第三章:Python高级编程-深入类和对象 Python3高级核心技术97讲 笔记 3.1 鸭子类型和多态 """ 当看到一直鸟走起来像鸭子.游泳起来像鸭子.叫起来像鸭子 ...

  7. 第十一章:Python高级编程-协程和异步IO

    第十一章:Python高级编程-协程和异步IO Python3高级核心技术97讲 笔记 目录 第十一章:Python高级编程-协程和异步IO 11.1 并发.并行.同步.异步.阻塞.非阻塞 11.2 ...

  8. python高级编程:有用的设计模式3

    # -*- coding: utf-8 -*-__author__ = 'Administrator'#python高级编程:有用的设计模式#访问者:有助于将算法从数据结构中分离出来"&qu ...

  9. python高级编程:有用的设计模式2

    # -*- coding: utf-8 -*- __author__ = 'Administrator' #python高级编程:有用的设计模式 #代理 """ 代理对一 ...

随机推荐

  1. Zedboard甲诊opencv图像处理(四)

    接着上一篇博客,继续改进,现在为了是图像处理结果更加稳定,我实在没有办法了,只好先提取手指,再提取指甲. 把手指从背景里面提出来还是挺简单的,可惜的是我研究这么半天还是这结果,好沮丧. 怎么办呢,时间 ...

  2. 多封装,少开放。强烈建议C++标准添加class之间的注入机制

    近日在改动了一下下引擎代码(为了自己的组件),发现有些接口是仅仅有特定类及其内部函数才去訪问,却不使用友元声明的形式进行数据訪问--当然使用了普通非virtual的形式也就是意味着不建议重载. 故此: ...

  3. 为iPhone 6设计自适应布局

    Apple从iOS 6加入了Auto Layout后开始就比较委婉的开始鼓励.建议开发者使用自适应布局,但是到目前为止,我感觉大多数开发者一直在回避这个问题,不管是不是由于历史原因造成的,至少他们在心 ...

  4. JavaScript总结(二) 系统分析

    学习Javascript的时候.遇到了一个问题. 看了牛腩的视频,感觉讲的太简单和基础,像认识一位新朋友.但仅有一面之缘就结束了. 再看姜浩的视频.又看得迷迷糊糊,让我找到了当初看两位台湾专家讲VB. ...

  5. Caused by: java.lang.ClassNotFoundException: javassist.ClassPool

    1.错误原因 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help ...

  6. App版本更新时对SQLite数据库升级或者降级遇到的问题

    SQLite是Android内置的一个很小的关系型数据库.SQLiteOpenHelper是一个用来辅助管理数据库创建和版本升级问题的抽象类.我们可以继承这个抽象类,实现它的一些方法来对数据库进行自定 ...

  7. iOS9TableView分割线默认不显示,只有滑动的时候才显示 解决办法

    只有iOS9和iPhone6 plus模拟器上TableView分割线不会显示,后来终于找到了原因: 由于iPhone6 plus的分辨率较高,开发的时候同常都使用command + 3 或者 com ...

  8. js中的因数分解

    方法一: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8& ...

  9. Android studio快捷键Mac版本

    为了方便大家记住这些小技巧和快捷键,我把它写成了一个插件,欢迎大家下载使用:http://chunsheng.me/EasyShortcut/ 快捷键 描述 通用------------------- ...

  10. PHP第二课笔记

    ★Php的基本概念 快速入门案例 test.php <html> <body> //<?php  ?>是运行在服务端 <?php   echo 'hello' ...