python_day20_自己定义模块和模块的调用_包(Package)以及包之间的调用
#Author:"haijing"
#date:2018/10/13
# 模块:一个.py文件就是一个模块
# python标准库模块 re模块、time模块
# 第三方模块
# 应用程序自定义模块
# import calculate #此时可以将calculate看做一个对象 calculate=calculate.py all code
#调用自己写的模块calculate.py和当前文件在同一个文件夹下
#通过搜索路径找到caculate.py之后,将calculate.py中所有的代码都执行一下,如果是函数定义则为该函数分配空间
# 如果在当前文件夹下找不到,则接着往上去找
# print(calculate.x)
# print(calculate.add(1,2)) #打印3
#创建两个.py文件,即两个模块
#只调用calculate.py中部分函数的方法 (提高效率)
# from calculate import add #只调用calculate.py中的add()函数
# print(add(1,3)) #打印4
# d(1,3)) #打印4
# from calculate import add,sub #调用calculate.py中的add()函数和sub()函数 常用*****
# print(ad
# import calculate,time #同时调用自己写的calculate模块和系统time模块
# from calculate import * #可以引用函数和变量 很少用
#
# def add(x,y): #会覆盖掉calculate中的add()函数
# return x+y+2
# print(add(1,2)) #调用本py文件中的add()函数,而不去调用calculate中的add()函数
# from calculate import add as plus #将calculate下的add()函数改名字为plus()
#搜索路径 sys.path
# import sys
# print(sys.path)
#包package:存储一个个.py文件,会比普通的文件夹多一个init文件,并以此来区分包和文件夹
#可以在day20下新建一个包(Python Package)名字为web,并在web下加入main.py和looger.py模块
#调用web(包)下的logger.py
# from web import logger
# logger.log() #打印logger 在别的地方执行logger.py下的log()函数
# from web.logger import log #只拿出logger.py下的log()函数
# log() #打印logger
# from web.web2 import logger #如果在web包下还有一个web2包,在web2包下有一个logger.py,则这样调用
import web #会执行__init__.py文件下的东西,只是加载了__init__.py,与main.y和logger.py无关系
print()
#包的具体应用
(1)模块bin.py中的内容:
#Author:"haijing"
#date:2018/10/13
#程序启动入口
#这样可以正确执行,但是脱离了这个电脑,就不能执行了啊,因为定义的目录肯定不一样
# import sys
# sys.path.append('D:\\PyCharmPro\\pro02\\week03\\day20\\ATM') #手动添加上ATM的绝对路径
# from module import main
#隐藏的错误:由于bin是在module的下级目录,所以可能找不到module目录,但pycharm会自动的为你添加上D:\\PyCharmPro\\pro02\\week03\\day20\\ATM目录
#所以现在手动的去添加D:\\PyCharmPro\\pro02\\week03\\day20\\ATM这个绝对路径
# main.main()
#改进
import os
import sys
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #将bin.py的爷爷级目录赋给BASR_DIR
sys.path.append(BASE_DIR) #把bin.py的爷爷级目录添加到python解释器的搜索路径中
#加上以上四行代码,这个程序移植到任何人的电脑上都可以执行
from module import main #这一句会执行一遍main.py中所有可执行的语句,包括main.py中的main()
from conf import settings
main.main()
settings.shoppings()
settings.aas()
# import sys
# print(sys.path.append('D:\\PyCharmPro\\pro02\\week03\\day20\\ATM'))
# print(__file__) #打印D:/PyCharmPro/pro02/week03/day20/ATM/bin/bin.py 这个为相对路径
# import os
# import sys
# print(os.path.abspath(__file__)) #把相对路径(D:/PyCharmPro/pro02/week03/day20/ATM/bin/bin.py)改为绝对路径(D:/PyCharmPro/pro02/week03/day20/ATM/bin/bin.py)
# print(os.path.dirname(os.path.abspath(__file__))) #找到bin.py的父亲级目录D:\PyCharmPro\pro02\week03\day20\ATM\bin
# print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))#找到bin.py的爷爷级目录D:\PyCharmPro\pro02\week03\day20\ATM
# BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #将bin.py的爷爷级目录赋给BASR_DIR
# sys.path.append(BASE_DIR) #把bin.py的爷爷级目录添加到python解释器的搜索路径中
(2)模块main.py中的内容:
#Author:"haijing"
#date:2018/10/13
#放配置信息
# import logger #一般不能这样调用,以为如果main()函数在别的包(比如bin)中去调用的时候,此时会找不到logger()
from module import logger #这样在别的包中的bin.py中调用main()就不会找不到logger()了
def main():
logger.logging()
# main()
(3)模块settings.py中的内容:
#Author:"haijing"
#date:2018/10/13
def shoppings():
print('shoppings')
def aas():
print('okaas')
(4)模块logger.py中的内容:
#Author:"haijing"
#date:2018/10/13
def logging():
print('logger')
2018.10.13
haijing in building 2,Hangzhou