1、本地模块(自己创建的模块)
#! encoding:utf-8 -*-
# 模块应用一
import sys
import md # 先找到本地文件模块解释一遍
print(sys.path) # ['/media/liu/软件/python-learn/day20', '/usr/lib/python35.zip',
# '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload',
# '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages'] 环境变量路径
print(md.a)
print(md.s(3,4))
print(md.m(10,5))
# 模块应用 二
from md import s,m,a # 从本地模块加载指定函数,不全部加载
print(s(6,6))
print(m(3,1))
print(a)
# 模块应用 三
from md import * # 加载完全本地模块,但如果当前定义了一个重复的函数名,会覆盖模块里的函数
print(s(5,6))
print(m(9,3))
print(a)
# 模块应用 四
from md import s as jia # 为模块里的函数改名字
print(jia(7,3))
# print(__file__) # 显示当前文件
#! -*- encoding:utf-8 -*-
# md.py 这个是上面调用的本地模块
def s(x,y):
return x+y
def m(x,y):
return x-y
print('OK')
a = 100
2、包调用
#! -*- encoding:utf-8 -*-
# 一级包
from web import logger
logger.logger()
# 二级包
from web.web2 import logger
logger.logger()
# 只调用当前包里的某个函数
from web.web2.logger import logger
logger()
# 如果只调用包,则会只会执行__init__.py ,不会加载包里面的模块,如果在这里面写入调用该包里的模块,也是有效的
import web
#! -*- encoding:utf-8 -*-
# web包下面的logger.py模块
def logger():
print('web1')
#! -*- encoding:utf-8 -*-
# web下面的__init__.py模块
print('web d')
#! -*- encoding:utf-8 -*-
# web2下面的logger.py模块
def logger():
print('web2')
模块包就是在文件夹里有个__init__.py文件,这个文件夹就是包。调用时,包必须在同一级目录。解释器是根据sys.path函数的模块搜寻路径来找模块的。
下面是调用不同级目录里模块的办法
#! -*- encoding:utf-8 -*-
import sys,os
base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 手动获取当前文件的绝对路径的上上级目录
sys.path.append(base_path) # 把当前文件的上上级目录放到模块查找路径里,就可以调用不在同一级目录的模块了
from mudule import main,logger
main.main() # logging:调用成功
print(__file__) # 获取当前执行的文件绝对路径 print(os.path.dirname(os.getcwd())) # 获取当前目录的上级目录
#! -*- encoding:utf-8 -*-
# mudeleb包下的main.py模块
from mudule import logger # 此处注意:虽然main.py跟logger.py在同一级目录里,但调用这两个模块是在其他目录执行的,所以这个要写清
# 其他目录的模块调用这里的模块时,就相当于在其他目录该代码了,所有要写来自来自哪个包
def main():
logger.logger()
#! -*- encoding:utf-8 -*-
# mudule包下面的logger.py模块
def logger(): #功能模块
print('logging:调用成功')
3、测试当前模块功能的写法
#! -*- encoding:utf-8 -*-
# if __name__=='__main__' 对当前文件执行的代码
def hello():
print('hello')
if __name__=='__main__': # 程序会判断是否在当前模块运行的,是就执行下面代码
print('其他模块在调用本模块时,这里的代码是不会执行的')