首页 > 代码库 > python基础之模块与包

python基础之模块与包

一、模块

1、什么是模块?
一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。


2 为何要使用模块?
如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。
随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用。


3.如何使用模块?

开辟名称空间的三种方法:
类、函数、模块

3.1 import

示例文件:spam.py,文件名spam.py,模块名spam

#spam.py
print(from the spam.py)

money=1000

def read1():
    print(spam->read1->money,1000)

def read2():
    print(spam->read2 calling read)
    read1()

def change():
    global money
    money=0

(1)模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行(import语句是可以在程序中的任意位置使用的,且针对同一个模块很import多次,为了防止你重复导入,python的优化手段是:第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载大内存中的模块对象增加了一次引用,不会重新执行模块内的语句),如下 

#test.py
import spam #只在第一次导入时才执行spam.py内代码,此处的显式效果是只打印一次‘from the spam.py‘,当然其他的顶级代码也都被执行了,只不过没有显示效果.
import spam
import spam
import spam

‘‘‘
执行结果:
from the spam.py
‘‘‘

我们可以从sys.module中找到当前已经加载的模块,sys.module是一个字典,内部包含模块名与模块对象的映射,该字典决定了导入模块时是否需要重新导入。

(2)每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间,这样我们在编写自己的模块时,就不用担心我们定义在自己模块中全局变量会在被导入时,与使用者的全局变量冲突

#测试一:money与spam.money不冲突
#test.py
import spam 
money=10
print(spam.money)

‘‘‘
执行结果:
from the spam.py
1000
‘‘‘
#测试二:read1与spam.read1不冲突
#test.py
import spam
def read1():
    print(========)
spam.read1()

‘‘‘
执行结果:
from the spam.py
spam->read1->money 1000
‘‘‘
#测试三:执行spam.change()操作的全局变量money仍然是spam中的
#test.py
import spam
money=1
spam.change()
print(money)

‘‘‘
执行结果:
from the spam.py
1
‘‘‘

(3)总结:首次导入模块spam时会做三件事:

 

python基础之模块与包