python中的模块及包及软件⽬录结构规范
知识内容:
1.模块的定义与分类
2.模块的导⼊
3.模块与包
4.不同⽬录下的模块调⽤
⼀、模块的定义与分类
1.什么是模块
模块就是实现了某个功能的代码集合,模块是由⼀⼤堆代码构成的
类似于函数式编程和⾯向过程编程,函数式编程则完成⼀个功能,其他代码⽤来调⽤即可,提供了代码的重⽤性和代码间的耦合。⽽对于⼀个复杂的功能来,可能需要多个函数才能完成(函数⼜可以在不同的.py⽂件中),n个 .py ⽂件组成的代码集合就称为模块。
如:os 是系统相关的模块;re是处理正则表达式相关的模块
2.模块的分类
模块可以分为三种:
⾃定义模块
内置标准模块(⼜称标准库)
开源模块
⼆、模块的导⼊
1.3种导⼊模块的⽅式:
import 模块名              使⽤这种⽅式导⼊模块后如要使⽤模块中的对象可以使⽤以下⽅法:  模块名(别名).对象名
from 模块名 import 对象名
导⼊⼀个模块中的所有对象: from 模块名 import *
注:  不推荐使⽤最后⼀种
2.为模块或对象起别名
import 模块名 as 别名
from 模块名 import 对象名 as 别名
1import numpy as np
2import pandas as pd
3from bs4 import BeautifulSoup as Bf
3.在⼀⾏导⼊多个模块
1import re, numpy, pandas
4.导⼊模块的顺序
(1) 导⼊python标准库中的模块(python环境⾃带模块),⽐如说os\sys\re\math
(2) 导⼊第三⽅库模块,⽐如说numpy\scrapy
(3) 导⼊⾃⼰定义或者开发的本地模块
⽰例:
1 # __author__ = "wyb"
2 # date: 2018/3/9
3
4 import os # 导⼊python⾃带模块os
5 import sys # 导⼊python⾃带模块sys
6 import requests # 导⼊python第3⽅模块requests
7 # import package # 导⼊⾃⼰写的模块package
8
9 from bs4 import BeautifulSoup # 从bs4包中导⼊BeautifulSoup模块10 from math import sqrt # 从math模块中导⼊sqrt函数
5.模块搜索路径
模块的查顺序是:内存中已经加载的模块->内置模块->sys.path路径中包含的模块
搜索路径:
当⼀个命名为spam的模块被导⼊时 解释器⾸先会从内建模块中寻该名字 不到,则去sys.path中该名字 sys.path从以下位置初始化
1 执⾏⽂件所在的当前⽬录
2 PTYHONPATH(包含⼀系列⽬录名,与shell变量PATH语法⼀样)
3 依赖安装时默认指定的
强调:⾃定义的模块名千万不要跟python标准库的模块名重复,否则后果很严重
三、模块与包
1.使⽤模块的好处
⼤⼤提⾼代码的可维护性
提⾼代码复⽤性
注:
使⽤模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们⾃⼰在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。
2.什么是包
你也许还想到,如果不同的⼈编写的模块名相同怎么办?为了避免模块名冲突,Python⼜引⼊了按⽬录来组织模块的⽅法,称为包(Package),如下所⽰:
⼀个⽂件夹中管理多个模块⽂件,这个⽂件夹就称为包,包⾥也可以含有⽂件夹
注: 每⼀个包⽬录下⾯都会有⼀个__init__.py的⽂件,这个⽂件是必须存在的,否则,Python就把这个⽬录当成普通⽬录,⽽不是⼀个包。__init__.py可以是空⽂件,也可以有Python代码,因为__init__.py本⾝就是⼀个模块。
⾃⼰创建模块时要注意命名,不能和Python⾃带的模块名称冲突。例如,系统⾃带了sys模块,⾃⼰的模块就不可命名为sys.py,否则将⽆法导⼊系统⾃带的sys模块
3.导⼊包中的模块
导⼊包的本质: 执⾏__init__.py
所以导⼊包中的模块不能直接使⽤import package_name再使⽤dule_name.function_name(),这样做会报错
真正的做法应该是from package_name import module_name 然后module_name.function_name(),这样做才是对的
四、不同⽬录下的模块调⽤
1.问题需求
项⽬⽬录下的bin⽬录⾥⾯的atm.py是程序的启动⼊⼝,由此启动项⽬,⽽core⽬录⾥的main.py是程序的主⼊⼝,那么如何能实现让atm.py能调⽤main.py运⾏程序呢?
2.解决问题
(1)在main.py()中写⼊:
1# 项⽬程序的主⼊⼝,不在此写主要逻辑,只是在这⾥调⽤项⽬其他模块
2
3def login():
4print("welcome to my atm")
(2)在atm.py中获取整个软件⽬录的跟⽬录:
1import os
2import sys
3
4# 获取该项⽬整个外层的路径: D:\wyb\python\oldboy\2.进阶(函数,内置⽅法,模块,⽂件操作、字符编码)\软件⽬录结构规范\ATM
5 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))python新手适合的软件
6print(BASE_DIR)
7
8 sys.path.append(BASE_DIR)  #添加环境变量
9
10from core import main
11
12 main.login()  # 输出welcome to my atm

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。