模块一共有三种:python标准库、第三方模块、应用程序自定义模块
模块之间的相互调用
程序目录如下所示:
calculate.py
print('ok')
x = 3
def add(x, y):
return x+y
def sub(s, y):
return s-y
bin.py
import calculate
# 解释器通过搜索路径找到calculate.py后,
# 将calculate = calculate.py all code
import sys
print(calculate.add(1, 2))
# 搜索路径 sys.path
print(sys.path)
print(calculate.x)
运行结果
从模块里调用方法
# 从模块里调用方法
from calculate import add
print(add(1, 4)) # ok 5
from calculate import add, sub
print(sub(3, 6)) # ok -3
调用多个模块时,可以import calculate,time 用逗号隔开
从一个模块里导入所有方法和变量时,用from calculate import *
将某个模块中的方法导入并修改名称时,用from calculate import add as plus
为了避免模块名冲突,Python又引入了按目录来组织模块的方法,成为包(Packages)。区分文件夹和包的方法是包下面有一个__init__文件。
目录结构
logger.py
def logger():
print('logging')
bin.py
# import web.logger
# logger.logger() # name 'logger' is not defined
# import的一定是一个模块
from web import logger
logger.logger() # logging
若包下面还有包,怎么调用?目录结构如下
调用web2下的logger模块
from web.web2 import logger
logger.logger() # logging
from web.web2.logger import logger
logger() # logging
搜索路径的时候,第一步是在当前路径下寻找
import web时是执行了web包下的__init__文件,如果__init__里面有内容,就会被执行。