第12章 模块

1、基本概念

模块的文件名就是模块名字.py

每个模块都定义了自己唯一的名称空间

模块的搜索路径:会被保存在 sys 模块的 sys.path 变量里

  >>>sys.path

  >>>sys.path.append( …… )  #修改python的搜索路径

  >>>sys.path.insert( ... )

2、命名空间

python在执行期间有两个或三个活动的名称空间。分别是:局部名称空间, 全局名称空间和内建名称空间, 但局部名称空间在执行期间是不断变化的, 所以说"两个或三个"。 从名称空间中访问这些名字依赖于它们的加载顺序, 或是系统加载这些名称空间的顺序。

Python 解释器首先加载内建名称空间。 它由 __builtins__ 模块中的名字构成。 随后加载执行模块的全局名称空间, 它会在模块开始执行后变为活动名称空间。

3、导入模块

(1)推荐的import模块的顺序

  Python 标准库模块

  Python 第三方模块

  应用程序自定义模块

(2)from-import语句

在模块里导入指定的模块属性(指定名称):from module import name1[ , name2[,... nameN] ]

(3)扩展的import语句

即指定别名:

  import Tkinter as tk

  from cgi import FieldStorage as form

(4)被导入到导入者作用域的名字

只从模块导入名字的另一个副作用是那些名字会成为局部名称空间的一部分。 这可能导致覆盖一个已经存在的具有相同名字的对象。 而且对这些变量的改变只影响它的局部拷贝而不是所导入模 块的原始名称空间。 也就是说, 绑定只是局部的而不是整个名称空间。

举例:

 

#############
# imptee.py #
#############
foo = 'abc'
def show():
  print 'foo from imptee:', foo
#############
# impter.py #
#############
from imptee import foo, show
show()
foo = 123
print 'foo from impter:', foo
show()

运行结果是:

  foo from imptee: abc
  foo from impter: 123
  foo from imptee: abc

解决办法:

  使用 import 和完整的标识符名称(句点属性标识)。

#############
# impter.py #
#############
import imptee
imptee.show()
imptee.foo = 123
print 'foo from impter:', imptee.foo
imptee.show()

此时的运行结果是:

  foo from imptee: abc
  foo from impter: 123
  foo from imptee: 123

注意点:

  a 不要滥用 "from module import *"

4、模块内建函数

(1)__import__()

  导入模块函数,功能同import语句:

  sys = __import__('sys')   功能同 import sys

(2)globals() 和 locals()

  分别返回调用者全局和局部名称空间的字典

(3)reload()

  重新导入一个已经导入的模块:reload( module )

5、包

包是一个有层次的文件目录结构, 它定义了一个由模块和子包组成的 Python 应用程序执行环境。包可用来解决如下问题:

  为平坦的名称空间加入有层次的组织结构
  允许程序员把有联系的模块组合到一起
  允许分发者使用目录结构而不是一大堆混乱的文件
  帮助解决有冲突的模块名称

与类和模块相同, 包也使用句点属性标识来访问其元素。用标准的 import 和 from-import 语句导入包中的模块。

(1)目录结构

Phone/

  __init__.py

  common_util.py

  Voicedta/

    __init__.py

    Pots.py
    Isdn.py

  Fax/

    __init__.py

    G3.py

  Mobile/

    __init__.py

    Analog.py

    igital.py

  Pager/

    __init__.py

    Numeric.py

可以这样导入子包:

  import Phone.Mobile.Analog
  Phone.Mobile.Analog.dial()

也可使用 from-import 实现不同需求的导入:

  from Phone import Mobile
  Mobile.Analog.dial('555-1212')

  

  from Phone.Mobile import Analog
  Analog.dial('555-1212')

  from Phone.Mobile.Analog import dial
  dial('555-1212')

6、模块的其他特性

自动载入的模块

阻止属性导入

不区分大小的导入

源代码编码

导入循环

模块执行

Python核心编程读笔 11:模块的更多相关文章

  1. Python核心编程读笔 2

    第三章 python基础 一.语句和语法 \n 标准的行分隔符 \ 继续上一行 ; 将两个语句连接在一行 : 分开代码块的头和体 代码块以缩进块的形式体现 python文件以模块的形式组织 二.变量赋 ...

  2. Python核心编程读笔 1

    第一章 欢迎来到Python世界 1 Python特点: 高级的可进行系统调用的解释性语言 面向对象 可升级.扩展.移植 自动内存管理器(内存管理由Python解释器负责) 2 安装 Windows的 ...

  3. Python核心编程读笔 12:OOP

    第13章 面向对象编程 一.基本概念 1.object类是所有类的基类,如果你的类没有继承任何其他父类,object 将作为默认的父类. 2.python创建实例时无需new: myFirstObje ...

  4. Python核心编程读笔 10:函数和函数式编程

    第11章 函数和函数式编程 一 调用函数  1 关键字参数 def foo(x): foo_suite # presumably does some processing with 'x' 标准调用 ...

  5. Python核心编程读笔 13:执行环境

    第14章  执行环境 一.可调用对象 python有四种可调用对象:函数.方法.类.一些类的实例 1 函数 (1)内建函数(BIF) BIF是用c/c++写的,编译后放入python解释器,然后把它们 ...

  6. Python核心编程读笔 8: 文件和输入输出

    第九章 文件和输入输出 一.文件内建函数.方法.属性 1 文件内建函数 file_object = open(file_name, access_mode='r', buffering=-1) 工厂函 ...

  7. Python核心编程读笔 7: 条件和循环

    第八章 条件和循环 一.if python中的条件表达式:很奇葩!!! smaller = (x < y and [x] or [y])[0] 或者: smaller = x if x < ...

  8. Python核心编程读笔 5: python的序列

    第六章 序列:字符串.列表.元组 一.序列 (1)序列类型操作符 seq[ind] 获得下标为 ind 的元素 seq[ind1:ind2] 切片操作 seq * expr 序列重复 expr 次 s ...

  9. Python核心编程读笔 4

    第五章 数字 二.整形 1 布尔型 2 标准整数类型 3 长整型 数字后面加L,能表示非常非常大的数字 目前,整形和长整型逐渐统一!!! 三.双精度浮点数 四.复数 有关复数的几个概念: 表示虚数的语 ...

随机推荐

  1. python中pip的使用和安装

    Ubuntu下安装pip的方法   安装pip的方法: Install pip and virtualenv for Ubuntu 10.10 Maverick and newer   $ sudo ...

  2. HDU 4081 MST

    这道题在LRJ的书上看到,今天回过头来继续看这题,发现很多东西都已经明白了. 题意:有N个城市,每个城市有一个坐标和人口. 现在要建一些边使得他们都联通,花费就是这些边的长度,然后有一条边可以免费.问 ...

  3. 3D 转换

    用X.Y.Z分别表示空间的3个维度,三条轴互相垂直.如下图 1.左手坐标系 2.透视(perspective) 电脑显示屏是一个2D平面,图像之所以具有立体感(3D效果),其实只是一种视觉呈现 ,通过 ...

  4. html form表单提交数据并后台获取

    前台: HTML的代码:(关键是要在form里设置enctype="multipart/form-data",这样才能在提交表单时,将文件以二进制流的形式传输到服务器) <h ...

  5. OC——NSString和NSMutableString

    int main(int argc, const char * argv[]) { @autoreleasepool { //----------------NSString------------- ...

  6. C#l连接OPC进行数据交互

    步骤 :引用 OPCNETAPI.DLL&&OPCNETAPI.COM.DLL 1.查询服务器      2. 连接服务器  3. 读取数据     4.写入数据 1.查询服务器 :根 ...

  7. zoj1076 Gene Assembly

    这道和zoj1025一样,本质是贪心算法,首先要求任意最长的序列,我们只要保证最长就行,也就是在一幅图中找一个最长的链,首先我们需要根据y排序(输入为x,y),因为y大的肯定在y小的后面,然后就直接贪 ...

  8. hdu 4707 Pet hdu 2013 Asia Regional Online —— Warmup

    一道简单的搜索题目,建一个树,根节点是 0 ,连接的两个节点的距离是 1 ,求 到 根节点长度是2的节点的个数. #include<stdio.h> #include<string. ...

  9. VC++客户端 缩小包的尺寸

    图片压缩: 1. 背景图片尺寸一般为100-300KB,使用纯色图片可缩小至1-3KB,方法得当可缩小1M多: 2. .ico一般为100-200KB,16x16一直到256x256,可减去其中几种尺 ...

  10. Android 混淆文件project.properties和proguard-project.txt

    参考文档:http://blog.csdn.net/xueyepiaoling/article/details/8202359 http://glblong.blog.51cto.com/305861 ...