知识内容:

1.模块的定义与分类

2.模块的导入

3.模块与包

4.不同目录下的模块调用

一、模块的定义与分类

1.什么是模块

模块就是实现了某个功能的代码集合,模块是由一大堆代码构成的

类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。

如:os 是系统相关的模块;re是处理正则表达式相关的模块

2.模块的分类

模块可以分为三种:

  • 自定义模块
  • 内置标准模块(又称标准库)
  • 开源模块

自定义模块 和开源模块的使用参考 http://www.cnblogs.com/wupeiqi/articles/4963027.html

二、模块的导入

1.3种导入模块的方式:

  • import 模块名               使用这种方式导入模块后如要使用模块中的对象可以使用以下方法:  模块名(别名).对象名
  • from 模块名 import 对象名
  • 导入一个模块中的所有对象: from 模块名 import *

注:  不推荐使用最后一种

2.为模块或对象起别名

  • import 模块名 as 别名
  • from 模块名 import 对象名 as 别名
 import numpy as np
import pandas as pd
from bs4 import BeautifulSoup as Bf

3.在一行导入多个模块

 import 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路径中包含的模块

官网解释:https://docs.python.org/3/tutorial/modules.html#the-module-search-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再使用package_name.module_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()中写入:

 # 项目程序的主入口,不在此写主要逻辑,只是在这里调用项目其他模块

 def login():
print("welcome to my atm")

(2)在atm.py中获取整个软件目录的跟目录:

 import os
import sys # 获取该项目整个外层的路径: D:\wyb\python\oldboy\2.进阶(函数,内置方法,模块,文件操作、字符编码)\软件目录结构规范\ATM
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(BASE_DIR) sys.path.append(BASE_DIR) #添加环境变量 from core import main main.login() # 输出welcome to my atm

python中的模块及包及软件目录结构规范的更多相关文章

  1. 小白的Python之路 day4 软件目录结构规范

    软件目录结构规范 为什么要设计好目录结构? "设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题.对于这种风格上的规范,一直都存在两种态度: 一类同 ...

  2. 7th,Python基础4——迭代器、生成器、装饰器、Json&pickle数据序列化、软件目录结构规范

    1.列表生成式,迭代器&生成器 要求把列表[0,1,2,3,4,5,6,7,8,9]里面的每个值都加1,如何实现? 匿名函数实现: a = map(lambda x:x+1, a) for i ...

  3. python基础-软件目录结构规范

    一.定义目录结构目的 可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等.从而非常快速的了解这个项目. 可维护性高: 定义好组织规则 ...

  4. Python-迭代器&生成器&装饰器&软件目录结构规范-Day5

    目录Day-Python-迭代器&生成器 21.生成器 21.1.生成器引入 21.2.生成器作用 31.3.创建生成器的方法 31.4.用函数来实现复杂的生成器 51.5.把函数变成生成器通 ...

  5. 7.json&pickle及软件目录结构规范

    json(可以序列化简单数据类型,用于不同语言之间的数据交换传输)import jsonjson.dumps() 写入json.loads() 读取json.dump(info,f) == f.wri ...

  6. python中的模块和包

    模块 一 什么是模块 模块就是一组功能的集合体,可以通过导入模块来复用模块的功能. 比如我在同一个文件夹定义两个.py文件,分别命名为A.py和B.py,那么可以通过在A文件里通过import B来使 ...

  7. 面试---Python中的模块和包是什么?

    python模块是: 自我包含并且有组织的代码片段为模块. 表现形式为:写的代码保存为文件.这个文件就是一个模块.sample.py 其中文件名smaple为模块名字. python包是: 包是一个有 ...

  8. Python中的模块与包

    标准库的安装路径 在import模块的时候,python是通过系统路径找到这些模块的,我们可以将这些路径打印出来: >>> pprint.pprint(sys.path) ['', ...

  9. [19/10/16-星期三] Python中的模块和包、异常、操作文件

    一.模块 # 模块(module) # 模块化,模块化指将一个完整的程序分解为一个一个小的模块 # 通过将模块组合,来搭建出一个完整的程序 # 不采用模块化,统一将所有的代码编写到一个文件中 # 采用 ...

随机推荐

  1. xdoj 1044---炸红花 (话说 小时候经常玩这个被虐。。。。qwq)

    // 我真的好笨 只会枚举 话说那个ac的370b到底是怎么做的 /(ㄒoㄒ)/~~ #include <iostream> #include <algorithm> usin ...

  2. 一致性哈希算法(Consistent Hashing Algorithm)

    一致性哈希算法(Consistent Hashing Algorithm) 浅谈一致性Hash原理及应用   在讲一致性Hash之前我们先来讨论一个问题. 问题:现在有亿级用户,每日产生千万级订单,如 ...

  3. HDU 4647 Another Graph Game 想法类

    解题思路:若没有边权,则对点权从大到小排序即可.. 考虑边,将边权拆成两半加到它所关联的两个点的点权中即可. ..因为当两个人分别选择不同的点时,这一权值将互相抵消. 以上摘自杭电的解题报告. 至于为 ...

  4. L3-021 神坛 (30 分)

    在古老的迈瑞城,巍然屹立着 n 块神石.长老们商议,选取 3 块神石围成一个神坛.因为神坛的能量强度与它的面积成反比,因此神坛的面积越小越好.特殊地,如果有两块神石坐标相同,或者三块神石共线,神坛的面 ...

  5. test20180922 世界第一的猛汉王

    题意 分析 由于异色点必有连边,所以一个点的covered减去两个点共有的covered就是可存在的环数,十分巧妙. 代码 #include <bits/stdc++.h> using L ...

  6. Finally什么时候会被执行

    PS:有return意味着程序结束,他一定会在程序结束前执行: PS:    return返回前 会把数据存储到指定的位置,基本类型是不会改变的.引用类型是会影响修改的值的

  7. php获取并删除数组的第一个和最后一个元素

    php中如何获取并删除数组的第一个或者最后一个元素?其实这两个过程都可以通过php自带的函数 array_pop 和 array_shift 来完成,下面就具体介绍一下如何来操作.(1)使用 arra ...

  8. Telnet 工具远程连接服务器

    1.启动tomcat 2. 使用telnet命令  打开CMD,输入telnet  localhost 8080 3.显示如下界面,说明已经连接成功 4. 复制如下代码到连接成功的界面 HEAD / ...

  9. 【shell】awk命令

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  10. IntelliJ IDEA常用设置

    IntelliJ IDEA进入设置界面. “File”->“Settings”,进入如下界面: 界面主题设置    CTR+鼠标滚动键改变编辑区字体大小.设置鼠标在系统类上指定时间显示注释. 设 ...