一、概念

通常的Python程序的构架是指:将一个程序分割为源代码文件的集合以及将这些部分连接在一起的方法。

Python的程序构架可表示为:

一个Python程序就是一个模块的系统。它有一个顶层文件(启动后可运行程序)以及多个模块文件(用来导入工具库)。

注:标准库模块:Python中自带的实用模块,也称为标准链接库,这个集合体大约有200多个模块,包含于平台不相关的常见程序设计任务:操作系统接口、对象永久保存、文字匹配模式、网络和Internet脚本、GUI建构等。注意:这些工具都不是Python语言的组成部分,但是,可以在任何安装了标准Python的情况下,导入适当的模块来使用。

二、模块

概念:模块是Python 中最高级别的组织单元,它将程序代码和数据封装起来以便重用。其实,每一个以扩展名 .py 结尾的Python文件都是一个模块。

模块的三个角色:

1)代码重用;

2)系统 命名空间的划分(模块可理解为变量名的封装,即模块就是命名空间);

3)实现共享服务和数据。

程序和模块:Python中,程序是作为一个主体的、顶层的文件来构造的,配合有零个或多个支持的文件,而后者这些文件都可以称作模块(顶层的文件也可以作为模块使用,但一般情况不作为模块)。

顶层文件:包含了程序的主要的控制流程:即需要运行来启动应用的文件。

模块文件:可看做是工具的仓库(即装满了工具),这些工具是用来收集顶层文件(或其他可能的地方)使用的组件。

顶层文件与模块文件:顶层文件使用了在模块文件中定义的工具,为这些模块也使用了其他模块所定义的工具。

模块的执行环境:模块包含变量、函数、类以及其他的模块(如果导入的话),而函数也有自己的本地变量。下图描述了模块内的情况以及与其他模块的交互,即 模块的执行环境:

可见:模块可以被导入,但模块也会导入和使用其他模块,这些模块可以用Python或其他语言(如,C语言)写成。

三、import(导入)

概念:一个文件可通过导入一个模块(文件)读取这个模块的内容,即导入从本质上讲,就是在一个文件中载入另一个文件,并且能够读取那个文件的内容。一个模块内的内容通过这样的属性(object . attribute)能够被外界使用。

导入是Python中程序结构的重点所在。

1、import a module 四种方式

1) import X:导入模块X,并在当前命名空间(namesapce)创建该模块的引用。可以使用:X.name引用定义在模块X中的属性。

2) from X import * :导入模块X,并在当前命名空间,创建该模块中所有公共对象(名字不以__开头)的引用。即你能使用普通名字(直接是name)去引用模块X中的属性,但是X本身没有定义,不能使用X.name。并且如果命名空间中原来有同名的name定义时,它将会被新的name取代。

3) from X import a, b, c:导入模块X,并在当前命名空间创建该模块给定对象的引用。

4) X = __import__('X'):类似(1)import X,区别在于:该方式显示指定了X为当前命名空间中的变量。使用方法一致。

2、当 import a module时,Python都做了哪些事情?

import a moudle时,首先,Python解释器会检查module registry(sys.moudles)部分,查看是否该模块先前就已经导入,如果sys.modules 中已经存在(即已注册),则使用当前存在的模块对象即可。如果 sys.modules 中还不存在,则:

1)创建一个新的、空的module对象(本质上是一个字典);

2)在sys.modules字典中插入该模块对象;

3)加载该模块代码所对应的对象(如果需要,可以先编译好(编成位码))。

然后在新的模块命名空间、执行该模块代码对象(code object)。所有由该代码指定的变量均可以通过该模块对象引用。

注:上述步骤只有在模块第一次执行时才会执行。在这之后,导入相同模块时,会跳过这些步骤,而只提取内存中已加载的模块对象。这是个有意设计的结果。因为导入(找文件--将其编译成字节码--运行代码)是一个开销很大的操作以至于每个程序运行不能够重复多于一次。若想要Python 在同一次会话中再次运行文件(不停止和重新启动会话),需要调用内置的reload(重载)函数(该函数返回值为一个Python模块对象)。

3、import 搜索路径顺序

1)程序的主目录:即程序(顶层)文件所在的目录(有时候不同于当前工作目录(指启动程序所在目录))。

2)PYTHONPATH (环境变量)目录

3)标准链接库目录

4)任何 .pth 文件的内容(如果存在的话):安装目录下找到该文件,以行的形式加入所需要的目录即可。

以上四个组件组合起来就变成了 sys.path,其保存了模块搜索路径在机器上的实际配置,可以通过打印内置的sys.path 列表来查看这些路径。导入时,Python会由左至右搜索列表中的每个目录,知道找到对应的module为止。

其中搜索路径的(1)和(3)是系统自动定义的,而(2)(4)可以用于拓展路径,从而加入自己的源代码目录。

另外:也可以使用sys.path在Python程序运行时临时修改模块搜索路径。

如:

import sys

sys.path.append('C:\\mydir')

注:以上sys.path的设置方法只是在程序运行时临时生效的,一旦程序结束,不会被保留下来。而前面介绍的四种路径配置方式则会在操作系统中永久保存下来。

References:

1、《Python 学习手册》第3章、第18章以及第19章

2、Importing Python Modules from effot.org

python程序框架_Python 程序构架浅析相关推荐

  1. python 常用库_Python程序员解决棘手问题的常用库

    无论做为Python大牛,还是一个Python菜鸟,在编程的道路上都会遇到诸多种很棘手的问题.如下介绍的内个库是Python诸多问题解决中,最常用到的.希望这些Python的库可以帮您快速解决遇到的棘 ...

  2. python基础框架_Python基础框架和工具-阿里云开发者社区

    Python基础框架和工具 最近在学Python金融大数据分析,在安装Python进行大数据分析的环境时遇到很多问题,例如:在安装pandas包时候就要到各种错误,总是缺少很多安装包,最后发现利用Py ...

  3. python任务调度框架_Python任务调度模块APScheduler

    一.APScheduler 是什么&APScheduler四种组成部分? APScheduler全程为Advanced Python Scheduler,是一款轻量级的Python任务调度框架 ...

  4. python企业级框架_Python六大开源框架对比:Web2py略胜一筹

    Python是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准库也是值得大家称赞的,Python甚至还自带 ...

  5. python 爬虫框架_Python常用的几个高效率的爬虫框架

    1.Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中.用这个框架可以轻松爬下来如亚马逊商品信息之类的数 ...

  6. python数据处理框架_python 最快 web 框架 Sanci 快速入门

    简介 Sanic 是一个和类Flask 的基于Python3.5+的web框架,它编写的代码速度特别快. 除了像Flask 以外,Sanic 还支持以异步请求的方式处理请求.这意味着你可以使用新的 a ...

  7. python企业级框架_Python六大开源框架对比:Web2py略胜一筹(转)

    Python是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准库也是值得大家称赞的,Python甚至还自带 ...

  8. python 服务器框架_python 服务器框架

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 而我的想法是,掌握一个类似于框架的高级工具是有用的,但是基础的东西可以让你永远不 ...

  9. python定时任务框架_Python定时任务框架APScheduler

    APScheduler是基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便.提供了基于日期.固定时间间隔以及crontab类型的任务,并且可以持久化任务.基 ...

最新文章

  1. 怎么逐步突破,成为Python高手?
  2. Silverlight Toolkit DataGrid - 单元格内容对齐样式
  3. python编程怎么建立工程_教你如何用Python脚本快速创建项目
  4. Android自定义控件前导基础知识学习(一)——Canvas
  5. linux 使用buildroot制作文件系统
  6. python开发笔记软件_图解Python编程神器Jupyter Notebook
  7. Qt treeWidget 查找指定字段内容的条目并跳转到该条目
  8. 最全ACM常用STL
  9. #define 喵 int_【Angew. Chem. Int. Ed.】具多样化不对称反应性的三氮唑芳基碘化物
  10. webpack loader使用
  11. 如何获取变量token的值
  12. 直觉模糊集的基本要素
  13. 基于MATLAB,应用SMOTE算法对小样本类进行过采样
  14. php 图片印章_PHP实现中文圆形印章的特效
  15. db mysql导入_db mysql导入数据库
  16. 计算机硬盘启动设置方法,如何在BIOS中设置硬盘启动
  17. Win10使用Geth搭建本地开发私有链(2021版)
  18. 微信小程序 修改 radio 默认 样式
  19. 从 HTTP 瞎逼逼到 HTTP/2
  20. html css语义化

热门文章

  1. 《OD学spark》20161022
  2. 【SAS】REG过程详解
  3. 内存管理2-set方法的内存管理
  4. Sun公司开源游戏服务器Project Darkstar Server——(Sun game server , 简称 sgs)学习笔记(二):多人游戏...
  5. 机动车辆保费计算器 1.1新版发布
  6. BCG、MFC如何支持《支持应用程序设置的回复、保存等》的?他是怎么实现的呢?
  7. SQL.H 通过此文件寻找sqlAPI编程的一种捷径
  8. 大数据_MapperReduce_Hbase的优化_RowKey设计原则---Hbase工作笔记0028
  9. DataLoader, when num_worker 0, there is bug
  10. echarts中国地图描绘