文档章节

Python 模块和包

lionets
 lionets
发布于 2014/04/16 21:19
字数 1112
阅读 1281
收藏 6

模块是用来组织 Python 代码的方法;而包是用来组织模块的。 <br />

模块(module)


模块支持从逻辑上组织Python代码。这些代码段可能是类、函数,也可能是普通变量,他们可能功能相关但又彼此独立。这些自我包含(功能独立)并且有组织的代码片段就是模块(module)。每个代码段都可以通过import导入,他们被称为模块属性。 <br /> ###模块和文件 如果说模块是按照逻辑组织代码的方法,那么文件就是物理层上组织模块的方法。因此,一个文件被看做是一个独立的模块,一个模块也可以被看做是一个文件。 <br /> ###搜索路径 Python 对模块的搜索路径保存在一个名为PYTHONPATH的环境变量里。这个变量是在解释器打开时生成的,其内容完全依赖于 Python 的安装位置。在解释器里面,也可以通过sys.path来访问它,并进行修改。sys.pathPATHONPATH 在开头多了一个元素,这个元素指向的是所运行脚本的地址,如果你是直接以交互式 shell 的方式打开的解释器,并没有运行任何脚本,那么这个元素就会是一个空字符串。

使用sys.modules还可以查看当前已导入的模块和他们的来源。sys.modules是一个字典,键是模块名,值是对应模块的物理地址。 <br /> ###命名空间与作用域 命名空间是名称(标识符)到对象的映射。向命名空间添加名称的操作叫做绑定标识符,改变一个名称的绑定叫做重新绑定,删除一个名称叫做解除绑定。

在程序运行期间,始终有两到三个活动的命名空间,他们分别是:局部、全局和内建命名空间。解释器的加载顺序是内建→全局→局部,并且后加载的命名空间的作用域优先级更高。 <br /> ###import 语句 在需要多行导入的场合,推荐的导入风格为:在文件的开头导入全部模块,并按以下顺序进行

  1. 标准库模块
  2. 第三方模块
  3. 自定义模块

当被导入的时候,模块属性的名称被导入的命名空间视import语句的作用域而定。如果是在文件开头,就被导入全局命名空间,如果是在函数等局部作用域内,就被导入局部命名空间。

当模块被导入时,这个模块(文件)实际上会被加载并执行。这也就是为什么模块属性大都用函数或类封装着的原因,模块中另一种常见的__name__检查操作也是出于相同的原因:

lang:python
...
if __name__ = '__main__':
	pass

但重复导入不会导致重复加载,加载执行过程只在第一次导入某模块时发生,除非显式调用reload(module)内建函数。 <br /> ###导入钩子和 __import__ 对于需要创建自定义导入器的场合(即导入钩子),一种方式是覆盖__import__(module_name)方法,但是这很麻烦,因为实现方法的代码要全部手写。另一种方式是编写一个可调用的import类,然后通过sys模块注册它即可。

import类的实现方法:略 <br /> ##包(package)

如果说对应于模块的物理层结构是文件的话,那么对应于包的物理层结构就是文件夹。包即为通过目录结构组织的模块集合,可以通过.来访问和导入。

  • package\
    • __init__.py
    • child_package1\
      • __inti__.py
      • foo.py
    • child_package2\
      • __init__.py
      • bar.py

类似于模块拥有顶层代码,可以在被import时执行,包(或子包,即子文件夹)目录结构里也有一个__init__.py文件可以执行类似的初始化功能。 因此,__init__.py文件的存在可以看做是“本文件夹是一个包”的象征,即使里面可能是空的。在创建包的时候,不要忘记添加这个文件,否则导入时会引发一个ImportWarning警告,不过除非给解释器传递了-Wd选项,否则解释器会简单忽略这个警告。

© 著作权归作者所有

上一篇: TCP 和 HTTP 简介
下一篇: Django 1.6 部署
lionets
粉丝 94
博文 101
码字总数 135303
作品 0
朝阳
程序员
私信 提问
Python札记44_模块(sys、copy)

Python的强大不仅体现在它拥有强大的自有模块(标准库),同时还体现在它有海量的第三方库。 模块的自信来自于,模块是拿来即用的,不用自己编写 什么是模块 模块在Python中就是一个.py的程序...

皮皮大
07/15
0
0
《Python从小白到大牛》第4章 Python语法基础

本章主要为大家介绍Python的一些语法,其中包括标识符、关键字、常量、变量、表达式、语句、注释、模块和包等内容。 标识符和关键字 任何一种计算机语言都离不开标识符和关键字,因此下面将详...

tony关东升
2018/06/26
0
0
Python类、模块、包的区别

类 类的概念在许多语言中出现,很容易理解。它将数据和操作进行封装,以便将来的复用。 模块 模块,在Python可理解为对应于一个文件。在创建了一个脚本文件后,定义了某些函数和变量。你在其...

幕三少
2018/06/06
0
0
如何简单地理解 Python 中的 if __name__ == '__main__'

昨天的分享:用 Python 带你看《我不是药神》 源码链接:https://pan.baidu.com/s/1Gnxc2iTWHrS7tGEveO4hQ 密码:27op 1. 摘要 通俗的理解name == 'main':假如你叫小明.py,在朋友眼中,你是...

xjtuhit
2018/07/20
0
0
关于 python ImportError: No module named 的问题

今天在 centos 下安装 python setup.py install 时报错:ImportError: No module named sysconfig, 当时急着用,就顺手直接源码编译了一把,make install 后就 ok 了。 然后又在 cygwin 下安...

大数据之路
2013/02/21
259.3K
8

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
5
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部