一.模块
- 定义:有些功能开发者自己无法完成(例:与操作系统打交道,时间,1000取随机数,压缩文件,网络通信),需要借用已经实现的函数/类来完成这些功能
- 模块的分类:
1, 内置函数:安装python解释器的时候跟着安装的那些方法
2,自定义模块:你写的功能如果是一个通用功能,那么就把它当作一个模块
3,第三发模块/扩展模块:没在安装python解释器的时候跟着安装的那些方法
- 模块的导入顺序:先导入内置模块,再导入第三方模块,最后导入自定义模块
- 模块的重命名
import my_moudle as m
- 导入多个模块
# import os,my_moudle,sys # 1 横向导入 # PEF8规范 # 2 纵向导入 # import os # import sys # 所有的模块都应该尽量放在这个文件的开头
- 一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。
# import my_moudle # 要导入一个py文件的名字,但不会加.py后缀名 # import my_moudle # 模块的名字必须要满足变量命名的规范,一般情况下,模块都是小写开头
二.from...import
# from my_moudle import login # import login 知道了login这个名字,那么会在本文件中创建一个变量,指向这个模块命名空间中的login函数 # login() # from my_moudle 会找到my_moudle模块,开辟一块属于这个模块的命名空间,执行函数 # def login(): # print('hello world') # 当模块中导入的变量与方法 和 本文件中的变量重名时,那么这个名字只代表最后一次对它赋值的变量或方法 # login() # from my_moudle import login # 导入了什么 就能使用什么 # 不导入的变量 就不能使用 # 不导入并不意味着不存在,而是没有建立从文件到模块的其他名字的引用 # print(name)
- 导入多个
# from my_moudle import login,name # print(name) # login()
- 重命名
# from my_moudle import login as l,name as n # print(n) # l()
- *导入模块中的所有变量
# from my_moudle import * # print(name)
-
__all__ = [] 控制*导入的内容
#__all__ = ['login']
三.把模块当作脚本运行
- 运行py文件的两种方式:
# 1 以模块的方式运行 # import my_moudle # 2 以脚本的方式运行 # 直接运行pycharm解释器,cmd运行
# 在编写py文件的时候 # 所有不在函数和类中封装的内容都应该写在 # if __name__ == '__main__':下面
# if __name__ == '__main__': # print('路过人间,世人都善变') # print(__name__,type(__name__)) # '__main__'/'my_moudle'
# 在使用反射自己模块中的内容的时候 # import sys # sys.modules[__name__]
四.包
-
导入包 相当于执行了__init__.py文件
- 直接导入模块
# import book.letter.bookworm # book.letter.bookworm # import book.letter.bookworm as bookworm # bookworm.get() # from book.letter import bookworm # bookworm.get()
- 绝对导入
# import sys # sys.path.append('D:\python_worksapce\day24\模块导入的专题练习\core') # import main
- 相对导入
# import sys # lst = __file__.split('/') # base_path = '/'.join(lst[:-2]) # sys.path.append(base_path) # from core import main
如果使用了相对导入的模块只能被当作模块执行,不能被当作脚本执行
五.set去重机制
# class Employee: # def __init__(self,name,sex,age,partment): # self.name = name # self.sex = sex # self.age = age # self.partment = partment # # def __hash__(self): # return hash('%s%s' % (self.name,self.sex)) # # def __eq__(self, other): # if self.name == other.name and self.sex == other.sex: # return True # # employ_lst = [] # for i in range(200): # employ_lst.append(Employee('alex','male',i,'python开发部')) # for i in range(200): # employ_lst.append(Employee('wusir','male',i,'go开发')) # for i in range(200): # employ_lst.append(Employee('taibai','male',i,'爬虫')) # # employ_lst = set(employ_lst) # # print(employ_lst) # for Person in employ_lst: # print(Person.__dict__)