从大局着眼从细节着手,在总体上把握住python程序的组织结构、工作机制原理,有利于有条不紊地开展深入学习研究与应用,能始终保持胸有成竹,从容不迫面对错综复杂局面。

一、组织层次结构

(一)从Python在处理功能复用和功能颗粒度划分的角度来分,由大到小:

1、包(Package),对应于一个含有“_init_.py”文件的文件夹(如没有,又当成包来调用,有的关联软件会在文件夹内生成一个__pycache__子文件夹),可以看成一种Python工程Project,包下面可以继续创建子包。

     包内包含了模块。

2、模块(Module),包含①类、②函数、③变量、④代码。

3、类(Class),包含函数、变量。

4、函数,实现某种功能。

(二)相关命令语句和变量属性

1、import导入模块

   (1)import  模块

   (2)import  模块 as 重命名

   (3)from module  import  member(模块、函数、变量)

   (4)from package.subpackage import module

   (5)import module与from module import * 两种模块导入的区别

          区别1:
              import module 引用共享变量时,要使用module.变量名。而from module import * 直接使用变量名即可

         区别2:
              import module方式操作module的变量时,本地不会创建新变量,操作的是目标模块的变量。from module import *方            式 操作module变量时,实质上是在本地创建一个与目标模块相同的变量名,并且默认与目标模块变量指向同一个内存空            间。

 2、__all__ = ['num1',]规定外部能引入的模块、函数、变量

 3、当包发生调用时,_init_.py内容会首先自动被执,这样可以在此设置__all__ ,当多个模块文件都需要用到一些模块文件时,可以在一个包的__init__.py文件中引入这些需要的模块文件,然后多个模块就可以共用。

4、__name__变量,是Python的内置变量,用于指代当前模块。为了区分主执行文件还是被调用的文件,Python引入了一个变量__name__,当文件是被调用时,__name__的值为模块名,当文件被执行时,__name__为'__main__'(如果文件是作为主程序调用,其值就设为main,如果是作为模块被其他文件导入,它的值就是其文件名)。这个特性,为测试驱动开发提供了支持,可以在每个模块中写上测试代码,这些测试代码仅当模块被Python直接执行时才会运行,代码和测试完美的结合在一起。
5、__path__变量,指定了包的搜索路径。

6、__init__ 方法与__new__方法,用在初始化一个类实例,__init__是在类实例创建之后调用,而 __new__方法正是创建这个类实例的方法。

二、项目结构

       一个好的项目结构会让我们在开发中更加得心应手,事半功倍。

       对于Web项目,我们通常采用Flask或Django等框架,会有一套适合这种项目的工程目录。
       对于爬虫项目,通常有Scrapy等开源框架,也会提供一套适合这种项目的工程目录。
1、一位网友总结的Python通用目录结构

ProjectName 
 │ readme 项目说明文档 
 │ requirements.txt 存放依赖的外部Python包列表 
 │ setup.py 安装、部署、打包的脚本 
 ├─ bin 存放脚本,执行文件等 
 │ └─ projectname 
 ├─ docs 文档和配置 
 │ └─ abc.rst 
 │ └─ conf.py 配置文件 
 └─ projectname 工程源码(包括源码、测试代码等) 
 │ main.py 程序入口 
 │ init.py 
 └─ tests 测试代码 
 └─ test_main.py 
 └─ init.py