一.模块介绍
1.什么是模块
模块就是一系列功能的集合体
2.模块的来源
1).内置的模块
2).第三方的模块
3).自定义模块
3.模块的类别
1).使用python编写的.py文件
2).已被编译为共享库或DLL的C或C++扩展
3).把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包
4).使用C编写并链接到python解释器的内置模块
4.为何要用模块
1).使用内置的或者第三方模块的好处是:拿来主义,可以极大提升开发效率
2).使用自定义模块的好处是:可以减少代码冗余(抽取我们自己程序中要公用的一些功能定义成模块,然后程序的各部分组件 都去模块中调用共享的功能
5.如何用模块
大前提:一定要区分开谁是执行文件,谁是被导入模块
二.使用模块之import
1.import的使用
文件名是spam.py,模块名则是spam
首次导入import spam 模块发生3件事
1).会产生一个模块的名称空间
2).执行文件spam.py,将执行过程中产生的名字都放到模块的名称空间中
3).在当前执行文件的名称空间中拿到一个模块名,该名字指向模块的名称空间
之后导入import spam,都是直接引用第一次导入的成果,不会重新执行文件
在执行文件中访问模块名称空间中名字的语法:模块名.名字
print(spam.x)#指明道姓地跟spam要名字x,肯定不会与当前执行文件中的名字冲突
总结:import导入模块,在使用时必须加上前缀:模块名.
优点:指明道姓的向某一个名称空间要名字,肯定不会与当前名称空间中的名字冲突
缺点:但凡应用模块中的名字都需要加前缀,不够简洁
2.被导入的模块有独立的名称空间
每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间,这样我们在编写自己的模块时,就不用担心我们定义在自己模块中全局变量会被导入时,与使用者的全局变量冲突
# spam.py:
# --------------------------------------
# print("from the spam.py")
# money = 1000
# def read1():
# print("spam 模块:", money)
#
# def read2():
# print("spam 模块")
# read1()
#
# def change():
# global money
# money = 0
#
# -----------------------------------------
import spam
# money=10
# print(spam.money)
"""
from the spam.py
1000
spam 模块: 1000
"""
# def read1():
# print("------------")
# spam.read1()
"""
from the spam.py
spam 模块: 1000
"""
# import spam
#
# money=1
#
# spam.change()
#
# print(money)
"""
from the spam.py
1
"""
3.为模块名起别名
为已经导入的模块起别名的方式对编写可扩展的代码很有用
import spam as sm