pyhton模块(module)是一个python文件。
1、模块的引入
使用import或者from...import语句引入模块:
import module1 [,module2,module3...]
from modname import name1[,name2,name3...]
from ...import ...:从模块中导入一个指定的部分到当前的命名空间中
from...import *:一次性把time模块下的所有方法都引入进来,
在调用模块中的函数时,必须这样引用:模块名.函数名
2、搜索路径
当导入一个模块,python解析器对模块位置的搜索顺序为
1)当前目录
2)若不在当前目录,python则搜索在shell变量pythonpath下的每个目录
3)若都找不到,python会查看默认路径
模块搜索路径存储在system模块的sys.path变量中,变量包含当前目录,pythonpath和由安装过程决定的默认目录
windows下查看python的路径:
在cmd中输入set path,即可打开系统环境变量path变量,查看一下是否有python的目录
windows下设置pythonpath:
set pythonpath=c:\python35\lib
3、命名空间和作用域
命名空间是一个包含了变量名称们(键)和它们各自相应的对象们(值)的字典
若一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量
每个函数都有自己的命名空间,类的方法的作用域规则和普通函数一样
若要给全局变量在一个函数里赋值,必须使用global语句
4、dir()函数
dir()函数一个排好序的字符串列表,内容是一个模块里定义过的名字。返回的列表容纳了在一个模块里定义的所有模块、变量、函数。
eg:
import math
content=dir(math)
print(content)
输出结果:
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
5、python中的包
简单讲,包就是文件夹,python 2中的包中必须包含__init__py文件,该文件内容可以为空,__init__用于标识当前文件夹是一个包.
6、模块调用
例如:创建一个目录project,并在目录下创建两个文件:support.py、add.py
其中,add.py调用了support.py.
我们会发现在project目录下多了一个__pycache__/support.cpython-35.py文件,该文件的作用是:为了提高模块加载的速度,每个模块都会在__pycache__文件夹中放置该模块的预编译模块,命名为module.version.pyc
7、跨目录模块调用
若被调用的文件与调用文件不在同一目录下,假设文件目录结构如下:
project/
|——model/
| |___pub.py
|____count.py
count.py
from model.pub from add
print(add(4,5))
7、跨目录模块调用
例如:目录结构如下
project/
|-----model/
| |----count.py
| |----new_count.py
|----test.py
count.py代码如下
class A():
def add(self,a,b):
return a+b
new_count.py代码如下:
from count import A
class B(A):
def sub(self,a,b):
return a-b
resule=B().add(2,5)
print(resule)
输出结果:7
test.py代码如下
from model import new_count
test=new_count.B()
test.add(2,5)
Traceback (most recent call last):
File "D:\project\test.py", line 1, in <module>
from model import new_count
File "D:\project\model\new_count.py", line 1, in <module>
from count import A
ImportError: cannot import name 'A'
分析问题:通过上面介绍的搜索路径可知,找不到该模块。
解决办法:将导入模块所在的目录添加到系统环境变量path下即可。
import sys
sys.path.append('模块所在目录')