1. 什么是模块
1)模块的英文为:Modules 2) 模块是一个扩展名为“.py”的文件 3) 模块的作用: (1) 规范代码,易于阅读 (2) 提高开发效率:方便其他程序使用已经编写好的代码 (3) 避免函数名和变量名冲突
2. 自定义模块
2.1 创建模块
1)创建模块实际上就是创建一个.py文件 2)创建的模块名不要与python自带的标准模块名相同 3) 模块中可以包含变量、函数、类
2.2 导入模块
1)导入模块有两种方式: (1)import语句导入模块 (2) from…import… 语句导入模块 2)在导入模块时,会将所有没有缩进的代码都执行一遍
2.2.1 import 语句导入
(1)使用import语句方式导入,导入模块中所有工具 (2)当模块名较为复杂,可以使用 as 关键字给模块起别名 (3)调用模块中的变量、函数、类时需要在前面加上模块名:模块名.工具 (4) 导入多个模块时,推荐每个导入模块占据一行 语法格式:
import 模块名 [as 别名]
actor = '我最喜爱的演员名是cdm'
print(actor)
def income(income1, income2):
return income1*0.6+income2*0.8
class Action(object):
def __init__(self, ac_name, tv_name):
self.ac_name = ac_name
self.tv_name = tv_name
def eval(self, score):
print('%s 主演的电视剧 [%s],观众评分: %.1f' % (self.ac_name, self.tv_name, score))
这里也可以看出,虽然掉导入模块时,没有调用actor函数,但是因为导入一个模块时自动执行所有没有缩进的代码,所以,actor函数依然执行了。
2.2.2 使用from … import 语句导入模块
(1) 这种方法导入模块中的部分工具 (2)不需要通过模块名.作为前缀,可以直接使用模块提供的函数、变量和类
这里也可以看出,虽然掉导入模块时,没有调用actor函数,但是因为导入一个模块时自动执行所有没有缩进的代码,所以,actor函数依然执行了。
2.2.3 以主程序形式执行
要想解决上面没有调用actor函数,确执行的情况,可以使用python的内置函数__name__. 在实际开发中,开发人员通常会创建模块后增加一些测试代码,比如actor函数的print(actor),再比如在模块中创建对象测试,但是这些代码在导入模块时是不需要被执行的。
actor = '我最喜爱的演员名是cdm'
print(actor)
def income(income1, income2):
return income1*0.6+income2*0.8
class Action(object):
def __init__(self, ac_name, tv_name):
self.ac_name = ac_name
self.tv_name = tv_name
def eval(self, score):
print('%s 主演的电视剧 [%s],观众评分: %.1f' % (self.ac_name, self.tv_name, score))
dww = Action('大胃王', 18)
dww.eval(9.2)
print('输出的', __name__)
在调用模块中执行结果:
可以看到,在输入__name__的主程序中执行,输出结果为:main;当作为模块导入其他模块时,输出结果为被导入模块的模块名。 因此,可以通过添加__name__ == 'main’来判断是否在主程序执行,在主程序执行,就输出测试代码,查看代码能够正常运行;而作为模块导入时,不执行测试代码。
actor = '我最喜爱的演员名是cdm'
if __name__ =="__main__":
print(actor)
def income(income1, income2):
return income1*0.6+income2*0.8
class Action(object):
def __init__(self, ac_name, tv_name):
self.ac_name = ac_name
self.tv_name = tv_name
def eval(self, score):
print('%s 主演的电视剧 [%s],观众评分: %.1f' % (self.ac_name, self.tv_name, score))
if __name__ =="__main__":
dww = Action('大胃王', 18)
dww.eval(9.2)
print('输出的', __name__)
导入其他模块时,执行效果: 可以看到并没有输出ac_income中的测试代码。
3. 包
1)包是一个分层次的目录结构,他将一组功能相近的模块组织在一个目录下 2)包具有以下作用: (1)避免模块名重名引发的冲突 (2) 规范代码 3)包与文件夹的区别 (1) 包简单理解是文件夹,不过,在该文件夹中必须存在一个名为:init.py的文件 4)包的命名方式与变量名一样,命名不符合规范会导致导入包时出现问题
3.1 创建包
在创建python包时,会自动创建__init__.py文件文件 (1)init.py 文件在导入包时会默认加载,自动执行; (2) 可以将一些初始化的函数、变量、类放在__init__.py文件中
3.2 导入包
导入包与导入模块一样,有两种方法: 1)使用import语句导入包 2)使用from…import…语句导入包
3.2.1 使用import语句导入包
可以看到,当导入包时,还不能使用包中的模块,解决办法: 1)在__init__.py文件中使用
from . import 模块名
导入模块 之后,可以看到,已经可以使用包里面的income模块 2) 使包名.模块名的方式导入
3.2.2 使用from… import 语句导入包
1) 方式一:使用这种方式,调用模块中工具时,需要使用模块名.
from 包名 import 模块名
2) 方式二: 可以直接使用工具名(变量、函数、类名)
from 包名.模块名 import 工具名
3) 方式三: 若要导入包中所有内容,可以使用 *星
from 包名 import *
可以看到,直接使用*导入包中所有内容时,包下的模块无法正常使用,此时需要在 init.py文件中通过__all__函数定义可以通过 * 星 访问的模块名 可以看到,在__init__.py文件中,通过__all__ 定义了可以通过 * 星 访问的模块income,在使用时income模块可以正常使用,但未通过__all__暴漏的actor模块不能正常使用。 4)方式四:加载模块下的全部定义(工具)
from 包名.模块名 import *
4. 第三方模块的下载与安装
pip install md 安装md模块
pip uninstall md 卸载md模块
pip list 查看已安装的第三方模块
help('modules') 查看已有的标准模块和第三方模块
|