Python之模块与包

来源:互联网 发布:mac怎么切换输入法拼写 编辑:程序博客网 时间:2024/05/16 04:58


1、本地模块(自己创建的模块)


#! encoding:utf-8 -*-# 模块应用一import sysimport 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+ydef m(x,y):    return x-yprint('OK')a = 100


2、包调用


#! -*- encoding:utf-8 -*-# 一级包from web import loggerlogger.logger()# 二级包from web.web2 import loggerlogger.logger()# 只调用当前包里的某个函数from web.web2.logger import loggerlogger()# 如果只调用包,则会只会执行__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,osbase_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))     # 手动获取当前文件的绝对路径的上上级目录sys.path.append(base_path)                           # 把当前文件的上上级目录放到模块查找路径里,就可以调用不在同一级目录的模块了        from mudule import main,loggermain.main()       # logging:调用成功
#! -*- 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('其他模块在调用本模块时,这里的代码是不会执行的')


原创粉丝点击