python - 模块,包

一.模块

  • 定义:有些功能开发者自己无法完成(例:与操作系统打交道,时间,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__)

 

 




    

 

 

 

    

 

posted @ 2019-08-05 10:33  书,生  阅读(135)  评论(0编辑  收藏  举报