Python之模块与包


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('其他模块在调用本模块时,这里的代码是不会执行的')


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值