知识内容:

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. 设置ip地址、掩码、网关、DNS

    @echo offcolor f8mode con cols=40 lines=8echo.echo.echo      设置IP为:echo.set /p ip=              192. ...

  2. jQuery prop() 方法

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. PowerCollections

    Wintellect 的Power collections 库 BigList<String> str = new BigList<String>(); str.Add(&qu ...

  4. sql server merge into 与update 批量更新1 百万测试数据的性能比较

    1. 1百万的测试数据的生成 declare @index int;  begin  set @index=0;  while @index<1000000  begin  insert int ...

  5. sql 变量赋值

    mysql 的变量赋值如下: set @name='app' ; or set @name:='appfirst'; or with select select @appname:='you name ...

  6. spring4 知识点

    1 bean的 创建 1,直接在配置文件里面写一个带有@Bean注解的方法(返回值就是那个bena对象),(name等于 方法名) 2,使用 FactoryBean 接口(三个方法分别是创建,类型,单 ...

  7. 线性模型的fit,predict

    线性模型的fit其实一个进行学习的过程,根据数据和标签进行学习:predict则是基于fit之后形成的模型,来决定指定的数据对应于标签(y_train_5)的值. 下面的是手写字母判断是否为“5” s ...

  8. Joyoi公路乘车(原tyvj1015)

    题目:http://www.joyoi.cn/problem/tyvj-1015 水题.连优化都不用. #include<iostream> #include<cstdio> ...

  9. hosts,No web site is configured at this address.

    解决办法: IIS管理器->右击网站->属性->网站——>IP地址一项->选择全部未分配-> 确定关闭 问题解决.

  10. dede模块管理一片空白或没有列表内容的解决办法

    为什么dede后台模块管理,打开之后一片空白,又或者没有列表,插件与其他模块的使用也是正常的. 这主要是因为我们在安装模块,然后又卸载模块,卸载的时候选择了删除安装文件,就会出这个问题. 这里面分为两 ...