Python学习笔记(十三):模块基础

以Mark Lutz著的《Python学习手册》为教程,每天花1个小时左右时间学习,争取两周完成。 --- 写在前面的话


2013-7-22 22:00 学习笔记

1,每一个Python文件都是一个模块。模块将变量名封装进了自包含的软件包,这一点可以避免变量名的冲突。

2,导入模块不同于C语言中的#include,并非只是把一个文本内容插入到另一个文件中。导入其实是运行时运算。

3,import会依次搜索以下目录:

  1. 程序的主目录
  2. PYTHONPATH目录
  3. 标准链接库目录
  4. 任何.pth文件的内容

这个四个组件组合起来就是sys.path。

4,import b 会加载如下文件:

  • 源代码文件b.py
  • 字节码文件b.pyc
  • 目录b(包导入)
  • 编译扩展模块(通常用C/C++编写),导入时使用动态链接(Linux的b.so以及Windows的b.dll或b.pyd)
  • 用C编写的编译好的内置模块,并通过静态链接至Python
  • ZIP文件组件,导入时会自动解压缩
  • 内存内映像(对于frozen可执行文件)
  • Java类(在Jython中)
  • .NET组件(在IronPython中)

如果在相同目录下找到b.py和b.so,Python会遵循一定的标准进行挑选,但这个挑选顺序并不能保证永远不变,因此不要依赖这个挑选标准。

5,以字节码的形式分发程序,可以避免公开源代码。

6,第三方扩展通常使用标准链接库中的distutils工具来自动安装,一般会附带一个setup.py脚本。

7,from会把变量名复制到另一个作用域,避免使用模块来引用。*表示复制模块中的所有变量。例如:

import module1
module1.printer('hello world')

from module1 import printer
printer('hello world')

from module1 imort *
printer('hello world')

8,默认情况下,import导入只发生一次,因为该开销较大。

9,import和from都是赋值语句。前者将整个模块对象赋值给一个变量名,后者将一个或多个变量名赋值给另一个模块中同名的对象。from语句会让变量的位置变得更隐秘和模糊。

10,模块M的命名空间可以通过属性__dict__或dir(M)获得。

11,需要注意模块导入后的作用域。例如有一个模块文件moda.py

X = 88

def fun():
	global X
	X = 99
导入该模块:

X = 11
import moda
moda.fun()
print X,moda.X
输出结果为:

11 99

12,reload是Python中的内置函数,而不是语句。传递给reload函数的是已经存在的模块对象,而不是变量名。关于reload有一些注意点:

  • reload会在模块当前命名空间内执行模块文件的新代码
  • 文件中顶层赋值语句会使得变量名换成新值
  • 重载会影响所有使用import读取模块的客户端
  • 重载不会影响之前使用from来读取模块属性的客户端








  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值