首页 > 代码库 > 模块与包

模块与包

一:模块

一个模块就是一个包含了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 的方式

 

 

模块与包