python模块

一、模块

在Python中,一个.py文件就称之为一个模块(Module)。

为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。

举个例子,一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块。

现在,假设我们的abcxyz这两个模块名字与其他模块冲突了,于是我们可以通过包来组织模块,避免冲突。方法是选择一个顶层包名,比如mycompany,按照如下目录存放:

mycompany
├─ __init__.py
├─ abc.py
└─ xyz.py

引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。现在,abc.py模块的名字就变成了mycompany.abc,类似的,xyz.py的模块名变成了mycompany.xyz

请注意,每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是mycompany

类似的,可以有多级目录,组成多级层次的包结构。比如如下的目录结构:

mycompany
 ├─ web
 │  ├─ __init__.py
 │  ├─ utils.py
 │  └─ www.py
 ├─ __init__.py
 ├─ abc.py
 └─ utils.py

文件www.py的模块名就是mycompany.web.www,两个文件utils.py的模块名分别是mycompany.utilsmycompany.web.utils

自己创建模块时要注意命名,不能和Python自带的模块名称冲突。例如,系统自带了sys模块,自己的模块就不可命名为sys.py,否则将无法导入系统自带的sys模块。

mycompany.web也是一个模块,请指出该模块对应的.py文件。

 

1.搜索路径

当导入一个模块时,python解释器会对模块位置的搜索顺序是:

  • 当前目录
  • PYTHONPATH下
  • 默认路径

可以通过sys.path查看所搜索路径。

2.命名空间和作用域

一个 Python 表达式可以访问局部命名空间和全局命名空间里的变量。如果一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量。

python会认为任何函数内的变量都是局部的,如果在函数内想用全局变量,则需要在函数内用global声明。

3.dir()

dir()返回一个字符串列表,包含了模块中所有定义过的名字。例如dir(math)

4.globals()和local()

 

根据调用地方的不同,globals() 和 locals() 函数可被用来返回全局和局部命名空间里的名字。

 

如果在函数内部调用 locals(),返回的是所有能在该函数里访问的命名。

 

如果在函数内部调用 globals(),返回的是所有在该函数里能访问的全局名字。

 

两个函数的返回类型都是字典。所以名字们能用 keys() 函数摘取。

 

posted @ 2020-06-14 20:05  _STAyy  阅读(190)  评论(0编辑  收藏  举报