首页 > 代码库 > 模块与包
模块与包
一:模块
一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。
模块分类有:1:内建模块,python‘自带’的模块,如os、sys
2:自定义模块,自己写的模块
3:第三方模块,别人写好的模块、如一些开源的库
二:如何使用模块
1:import spam
<1>:创建名称空间,用来存放spam.py中定义的名字 <2>:基于刚刚创建的名称空间来执行spam.py <3>:创建名字spam指向该名称空间,spam.名字操作,都是以spam.py为准 def read1(): print("test read1") money=12344 spam.read1() spam.read2() print(spam.money) #这个money是寻找的spam内的money print(money) #这个是寻找自己下的money spam.change() print(spam.money) from spam import money,read1,read2 money==100000 print(money) read1() read2()
文件名spam.py,模块名spam
#spam.py
print(‘from the spam.py‘)
money=1000
def read1():
print(‘spam->read1->money‘,money)
def read2():
print(‘spam->read2 calling read‘)
read1()
def change():
global money
money=0
测试一:money与spam.money不冲突 import spam money=10 print(spam,money) 测试二:read1与spam.read1不冲突 import spam def read1(): print(‘---‘) spam.read1() 测试三:执行spam.change()操作的全局变量money仍然是spam中的 import spam money=1 spam.change() print(money)
总结:首次导入模块spam时会做三件事:
1.为源文件(spam模块)创建新的名称空间,在spam中定义的函数和方法若是使用到了global时访问的就是这个名称空间。
2.在新创建的命名空间中执行模块中包含的代码,见初始导入import spam
3.创建名字spam来引用该命名空间
2:from...import...
python中的变量赋值不是一种存储操作,而只是一种绑定关系 from spam import money,read1 money=100 #将当前位置的名字money绑定到了100 print(money) #打印当前的名字 read1() #读取spam.py中的名字money,仍然为1000 from spam import*#将模块spam中所有的名字都导入到当前名称空间 print(money) print(read1) print(read2) print(change) import os # 导入os模块 from os import listdir # 从os模块中导入listdir对象 from os import listdir, path, getcwd # 从os模块中导入listdir、path、getwcd (多个) from os import getcwd as pwd # 从os模块中getcwd别名为pwd from sys import * # 从sys模块中导出所有对象
把模块当成脚本来执行
我们可以通过模块的全局变量__name__来查看模块名:
当做脚本运行:
__name__ 等于‘__main__‘
当做模块导入:
__name__=
作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
if __name__ == ‘__main__‘:
二:包
1:包是从文件夹级别组织模块
无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高警觉:这是关于包才有的导入语法
2:绝对导入和相对导入
<1>: 绝对导入
以顶点的包为起点, 逐层获取导入内容
<2>:相对导入
. 表示当前文件所在的路径
.. 表示当前文件所在的路径的上一层路径
相对导入只能使用from .. import 的方式
模块与包