week5:模块

一、模块的概念

1.1 好处:

提高了代码的可维护性,其次,编写代码不必从0开始,当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括python内置的模块和来自第三方的模块。

1.2 模块有3种:

python标准库:(而标准库,指的是你安装Python程序(解释器)后,在安装目录里存在模块),参考:http://www.liujiangblog.com/course/python/51

第三方模块:(Python内置的标准库之外的所有模块都称为第三方模块)

应用程序自定义模块:(.py文件就是一个模块)

1.3 模块调用函数的方法

bin.py

#第1种方法
# import sys
# import calculate    #解释器通过搜索路径找到calculate.py后,将calculate=calculate.py all ccode
#
# print(calculate.add(1, 2))
# print(calculate.sub(2, 1))
#
# #print(a)  #name 'a' is not defined
# print(calculate.a)  #3
#
# print(sys.path)  #搜索路径
##第2种方法
# import calculate, sys
# print(calculate.add(1, 2))
# print(calculate.sub(2, 1))
#
# #print(a)  #name 'a' is not defined
# print(calculate.a)  #3
#
# print(sys.path)  #搜索路径
##第3种方法

# from calculate import add, sub##只需要从模块种调用某几个函数,不需要编译完
# print(add(1, 4))
# print(sub(3, 6))
##第4种方法把所有的函数都搞过来,尽量不用

# from calculate import *
# print(add(1, 2))
# print(a)
##第5种方法 改名字
#from calculate import add as plus

calculate.py

print('ok')
a = 3

def add(x, y):
    return x+y

def sub(x, y):
    return x-y

bin.py和calculate.py 在同一个包下面

二、包(package)

paython新建种,有directory(目录,文件夹),paython package(里面有init.py文件)。

模块是用来组织函数的,包是用来组织模块的。

##包调用模块的方法

# from web import logger
# logger.logger()
#如果多加一层
# from web.web2 import logger
# logger.logger()
##如果直接调用函数
# from web.web2.logger import logger
# logger()

三、__file__

bin.py

from module import main

main.main()

logger.py 

def logging():
    print('logging')

main.py 

import logger

def manin():
    logger.logging()

对bin.py进行运行,结果错误。把main.py改为

from moudle import logger

def main():
    logger.logging()

 对bin.py进行运行,结果为logging,但是有隐藏错误。python自己做了一件事情,把bain.py改为

from module import main

main.main()

import sys
print(sys.path)

运行结果多了一个地址, 'C:\\Users\\asus\\PycharmProjects\\ATM',python自己加上的,才能保证程序的正确运行。

验证:找到bin文件地址,复制到终端(cmd)

 在cmd执行 是错误的

解决问题:添加绝对路径

import sys
sys.path.append('C:\\Users\\asus\\PycharmProjects\\ATM')
from module import main

main.main()

在pychrm cmd执行成功

但是这种方法有局限性,传到别的计算机,就不能执行了。因此把绝对路径改为相对路径。

import sys
sys.path.append('C:\\Users\\asus\\PycharmProjects\\ATM')
from module import main

main.main()

print(__file__)

在pychrm cmd执行,输出结果为:C:/Users/asus/PycharmProjects/ATM/bin/bin.py

把bin.py改为

import sys
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
# sys.path.append('C:\\Users\\asus\\PycharmProjects\\ATM')

from module import main

main.main()

print(__file__)


#print(os.path.abspath(__file__))
#print(os.path.dirname(os.path.abspath(__file__)))
#print(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# sys.path.append(BASE_DIR)

这样在cmd pycharm 运行结果都是一样为logging,且可以在其他计算机上运行

四 、__name__

bin.py

import foo

foo.hello() ##hello

foo.py

def hello():
    print('hello')

#hello()
#print(__name__)

if __name__=='__main__':
    hello()

bin.py和foo.py 在同一个包下面

五、软件目录结构规范

5.1、"设计项目目录结构"的原因:

(1)可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等。从而非常快速的了解这个项目。

(2)可维护性高: 定义好组织规则后,维护者就能很明确地知道,新增的哪个文件和代码应该放在什么目录之下。这个好处是,随着时间的推移,代码/配置的规模增加,项目结构不会混乱,仍然能够组织良好。

5.2、举例

 

5.3、应用 

 

猜你喜欢

转载自blog.csdn.net/MaHilda/article/details/82148893