9、python全栈之路-模块与包

九、模块与包

http://www.cnblogs.com/Eva-J/articles/7292109.html#_label7

1、模块

1.1 什么是模块

常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。

但其实import加载的模块分为四个通用类别: 

1 使用python编写的代码(.py文件)

2 已被编译为共享库或DLL的C或C++扩展

3 包好一组模块的包

4 使用C编写并链接到python解释器的内置模块

1.2 为何要使用模块

如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。

随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用

1.3 模块导入规则

python建议一行只导入一个模块 多个模块分多行导入

1.4 模块导入顺序

先导入内置的,再导入第三方的,再导入自己写的

1.5 模块的命名空间

模块有自己的命名空间

1.6 import的用法

#导入模块干了哪些事:

#1 执行源文件

#2 以一个源文件的全局名称空间

#3 在当前位置拿到一个模块名,指向2创建的名称空间

1.7 as起别名

1.8 from...import

#优点:使用源文件内的名字时无需加前缀,使用方便

#缺点:容易与当前文件的名称空间内的名字混淆

1.8.1 from...import

1.8.2 from 模块名 import 名字 as 重命名

如果你导入的模块过大,而你要用的功能很少‘‘

1.8.3 from 模块名 import *

__all__和*配合,__all__只能约束*,import *时列表里面加功能名

__all__=[] 列表里面加字符串

有文件用from my_module import *导入模块时,只能导入__all__列表里面的方法

1.9 模块的搜索路径

1.9.1 sys.modules

可以通过sys.modules找的内存中已经加载了哪些写模块

1.9.2模块的查找顺序

模块的查找顺序是:内存中已经加载的模块->内置模块->sys.path路径中包含的模块

python程序的修改必须重新加载才能生效,自定义的模块名一定不要与python自带的模块名重名

1.9.3 sys.path

#注意:自定义的模块名一定不要与python自带的模块名重名

#内存中--》内置模块————》sys.path

sys.path第一个值是执行文件的当前目录

添加模块路径到环境变量

import sys
#print(sys.path)
sys.path.insert(0,r‘C:\Users\Administrator\PycharmProjects\python18期周末班\day5\模块\模块的搜索路径\aaa‘)
print(sys.path)

1.10、__name__、__main__

区分python文件的两种用途

用途一:当作脚本文件使用

用途二:当作模块使用

__name__:文件当作脚本运行时__name__等于__main__,文件当作模块被加载运行时__name__等于模块名

所以在写模块脚本时可以加判断条件 if __name__ == ‘__main__‘:,这样就可以区分python模块与脚本的用法,写模块时应该这样写。

1.11 relod()

import importlib

importlib.reload() 如果在导入模块后执行某个方法前修改了模块中的这个方法,用reload()这个方法可以立即导入修改的方法不需要重新导入模块,只能用于测试环境

2、包

2.1 注意

1、无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高警觉:这是关于包才有的导入语法

2. 包是目录级的(文件夹级),文件夹是用来组成py文件(包的本质就是一个包含__init__.py文件的目录)

3. import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件

强调:

  1. 在python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包报错

  2. 创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包即模块,包是文件的集合

2.2 __init.py__

用执行文件执行__init.py__中导入的包时,路径以执行文件为准,所以要有from...import形式导入,执行文件导入包是实际执行包下面的__init__.py文件。

2.3 绝对导入和相对导入

当包内的文件要导入包内其他文件的时候,即如果包的模块之间存在引用关系:

绝对路径的导入 :导入的路径会随着包与文件之间关系的变化而变化在包内部、外部都可以执行

相对路径的导入 :一次写好的模块的导入关系,不需要关心模块和文件之间的关系只能在包的外面执行

2.3.1 绝对导入

2.3.2 相对导入

3、项目开发规范

3.1 bin

bin目录中固定有一个start.py文件作为启动文件

所有的代码以start.py为出发点 start.py调core里的core.py文件

start.py开头固定写

import os
import sys
BaseDir = os.path.dirname(os.path.dirname(os.getcwd()))
sys.path.append(BaseDir)

from ChoiceCourses.core import core
core.main()

os.getcwd()取当前文件路径

os.path.dirname 取目录

3.2 conf

放配置文件

3.3 core

放核心文件,目录中要有一个core.py文件存放输入输出之类的代码或者字典

在文件内调用其他模块用绝对路径

包用相对路径 因为包是在外部调

项目用绝对路径 因为项目在自己内部调

3.4 db

存放所有数据

3.5 lib

存放别人写的模块,不需要pip安装可以直接用的模块,非自己写的模块

3.6 log

存放日志文件

时间: 2024-10-10 14:03:51

9、python全栈之路-模块与包的相关文章

Python全栈之路----常用模块----hashlib加密模块

加密算法介绍 HASH       Python全栈之路----hash函数 Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值. 简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数. HASH主要用于信息安全领域中加密算法,他把一

python 全栈之路

python 全栈之路 一. python 1. Python基础知识部分 Python Python那点事 Python windows和linux下 安装 Python2,Python3 Python 开启入坑之路 Python 基本数据类型 Python 那些零碎的知识点 Python -函数 Python - 面对对象 Python - 模块 Python - 文件操作 Python - python中经常踩得的坑 2. Python - 网络编程 3. Python - 并发编程 二.

Python全栈之路系列之赋值与运算符

Python全栈之路系列之赋值与运算符 在继续下面的文章之前我们先来浏览一下Python为我们提供的几种运算符,定义两个变量,分别是a和b,a的值是10,b的值是20. 算术运算符 运算符 描述 实例 + 加,两个对象相加 a+b=30 - 减,两个对象相减,可能会得到负数 a-b=-10 * 乘,两数相称或是返回一个被重复若干次的字符串 a*b=200 / 除,两个对象相除 b/a=2 % 取膜,返回除法的余数 b%a=0 ** 幂,返回x的y次幂 a**b=10000000000000000

Python全栈之路_01

Python全栈之路 前言:因为Python主要是在Linux和widows操作系统上使用所以,首先就介绍Pyhton在这两个平台上的安装和一些基础知识 Linux系统下安装Pyhton 1.工具 虚拟机:VMware workstation 12 Pro Linux系统:CentOS 64 位 VMware虚拟机安装很简单就不说明了. 在虚拟机安装CentOS 需要注意的是: 运行内存分配1G左右即可 可以开机按F2进入bios界面boot目录下选择启动设备选择Hard Drive为优先启动位

Python全栈之路----函数----返回值

函数外部的代码想要获取函数的执行结果,就可以在函数里用return语句,把结果返回. def stu_register(name,age,course='PY',country='CN'): print('----注册学生信息----') print('姓名:',name) print('年龄:',age) print('国籍:',country) print('课程:',course) if age > 22: return False else: return True registriat

Python全栈之路系列----之-----re模块(正则表达式)

正则表达式并不是python中的一部分,正则表达式适用于处理字符串的强大工具,拥有自己独特的语法,以及独立的处理引擎.在提供了正则表达式的语言中都它的语法是都一样的 re模块本质上和正则表达式没有一毛钱的关系,re模块是python提供给我们方便操作正则的工具而已 正则表达式概念 使用单个字符串规则来描述匹配一系列符合某个句法规则的字符串 是对字符串操作的一种逻辑公式 应用场景:处理文本和数据 正则表示是过程:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功:否则匹配失败 正

18.python全栈之路:模块

模块 一.模块:用一个或者多个.py文件来实现某个功能的代码集合,提供了代码的重用性和代码间的耦合. 而对于一个复杂的功能而言,可能需要多个函数相互调用才能完成,函数也可以在不同的.py文件 中,这n个.py文件的代码集合就称为模块 二.模块与库的关系:一个库可能包含了很多的模块,但一个库至少有一个模块 模块的种类: 内置模块:类似于sys,os,getpass,socket,time.... 自定义模块: 第三方模块 三.导入自定义模块的方法与注意事项: 注意事项1:尽量避免使用IDE添加的模

Python全栈之路----常用模块----sys模块

sys.argv  命令行参数 List,第一个元素是程序本身路径 #test.py import sys print(sys.argv) D:\ProgramLearning\Py_program>python test.py ['test.py'] D:\ProgramLearning\Py_program>python test.py run web ['test.py', 'run', 'web'] sys.exit(n)  退出程序,正常退出时 exit(0) >>>

Python全栈之路----常用模块----subprocess模块

我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本的模块在python2有os.system, >>> os.system('uname -a') Darwin Alexs-MacBook-Pro.local 15.6.0 Darwin Kernel Version 15.6.0: Sun Jun 4 21:43:07 PDT 2017; root:xnu-3