python基础要点(4)-模块
.模块的命名
#模块的文件名就是模块的名字加上.py
创建一个模块:test.py
使用这个模块:import test
.模块的命名空间
#给定一个模块名后就只能有一个模块被导入到Python解释器中,所以不同模块间不会出现命名交叉。
#即使不同模块间有相同的函数名也不会产生冲突,例:test.add(),test1.add() 不会产生冲突
.如何搜索模块
(1)当导入一个模块时,会在路径中搜索该模块,即在文件系统预定的路径下查找模块。
(2)默认的搜索路径是在安装python时设定的,它可以在一个或两个地方修改。
(3)制定搜索模块的路径设定是在:PYTHONPATH环境变量或在python的shell中
(4)sys.path存放了可搜索模块的所有路径,该变量可以通过函数修改,也可以通过交互式工具修改
(5)sys.path.append(mymodule_dir) 可以添加自己模块的位置
.命名空间
(1)命名空间是名称(标识符)到对象的映射
(2)在执行期间有两到三个命名空间:局部命名空间,全局命名空间,内建命名空间
(3)python解释器先加载内建命名空间,它由__builtins__模块中的名字构成,然后是执行模块的全局命名空间,若在执行期间还要调用函数,就出现第三个命名空间:局部命名空间。
(4)
.导入模块
(1)一个模块只被加载一次,无论它被导入多少次。
基本语法:
import module1
...
import moduleN
或
import module1,...,moduleN
.导入模块的顺序
import 系统模块
import 第三方模块
import 自定义模块
.from-import 语句
#可以在模块里导入制定模块的属性
#这种语法把模块的名称导入到当前模块的命名空间,就可以不用module.fun()来使用变量了。
from module import name1,...,nameN
也可以
from module import * # 不推荐
.当导入的模块中的全局变量和当前模块的变量名相同时
# 此时被导入模块的变量名会覆盖当前模块的变量名
# 变量只影响局部命名空间,而不会改变导入模块的变量
1 # imptee.py #
2 #############
3 foo = 'abc'
4 def show():
5 print 'foo from imptee:', foo
6
7 #############
8 # impter.py #
9 #############
10 from imptee import foo, show
11
12 show()
13 foo = 123
14 print 'foo from impter:', foo
16 show()
输出:
foo from imptee: abc
foo from impter: 123
foo from imptee: abc
要解决这个问题,唯一的办法是,把调用的函数前面加上模块的名称:
show()改成imptee.show()
阅读(1359) | 评论(0) | 转发(0) |