一、在import模块的时候发生的事情

1、寻找模块
2、如果找到了,就开辟一块空间,执行这个模块
3、把这个模块中用到的名字都录到新开辟的空间中
4、创建一个变量来引用这个模块中

二、注意事项:
*1.模块不会被重复导入
*2.模块和文件之间的内存空间始终是隔离的
*3.模块的名字必须是符合变量命名规范的

简单模块导入实例:
import my_module
# my_module.read2()
# name = 'alex'
# my_module.read2()  # in read2 youhongliang
my_module.name = 'alex'
my_module.read2()  # in read2 alex

 

三、导入多个模块
3.1 注意事项:

    1、pep8规范

# import os
    # import time
    # import my_module
# 内置,第三方,自定义

    2、排列顺序

# import os
    
    # import django
    
    # import my_module
3.2 给模块起别名
import my_module as m
m.read2()     # in read2 youhongliang
# 起别名之后,原来的名字就不能用了

起别名的应用

def dump(method):         # (繁琐版)
    if method == 'json':
        import json
        with open('file','w') as f:
            json.dump([1,2,3],f)
    elif method == 'pickle':
        import pickle
        with open('file', 'w') as f:
            pickle.dump([1, 2, 3], f)

简化版

def dump(method):
    if method == 'json':      # (简化版)
        import json as m
    elif method == 'pickle':
        import pickle as m
    with open('file', 'w') as f:
        m.dump([1, 2, 3], f)

3.3   模块搜索路径

import sys
print(sys.path)
import my_module
注意:
  正常的sys.path中除了内置、扩展模块所在的路径之外
  只有一个路径是永远不会出问题
      你直接执行的这个文件所在的目录
  一个模块是否被导入,就看这个模块所在的目录在不在sys.path中

 如果我们在同级目录中添加一个文件件,然后在这个文件夹中添加一个模块。

  直接:  import my_module2        (报错) # ModuleNotFoundError    

  做一步处理:

import sys
sys.path.append('D:\骑士计划\第五周\Day26\glance')
import my_module2

四、两种运行一个py文件的方式

4.1    直接运行它 : cmd python xx.py(文件) pycharm 脚本

    脚本运行时 __name__ == '__main__'

  

  

# 导入它 : 模块
# 模块运行:__name__ == '模块名'


4.2 语法讲解:
在模块调用中,如果只想脚本中使用的,只需要用这个语法
if __name__ == '__main__':  # 作为模块时,不该有的东西放在这里
    print('in my_module2')  # 重要语法
    print(__name__)
    # 函数调用
五、模块 from ** import
from my_module import name
print(name)    # youhongliang
from my_module import read2
read2()     # in read2 youhongliang

5.1  在from import 的过程中发生了什么事儿

1、要找到my_module
2、开空间,执行my_module
3、所有的my_module中的名字都存储在my_module所属的空间中
4、建立一个引用name,read2分别取引用my_module空间中的名字
from my_module import name
from my_module import read2  # in mymodule 执行一次

区别:

name = 'alex'
from my_module import name
print(name)  # youhongliang

 # name = 'alex'
from my_module import name
name = 'alex'               # 直接覆盖
print(name)  # alex

小技巧:

from my_module import name,read1,read2  # 可以写多个
from my_module import name as n,read1 as r1,read2 as r2 # 同时起别名

5.2  * 与__all__

from my_module import *      # 指模块里的所有变量
print(name) #youhongliang
read1()     # in read1
read2()     # in read2 youhongliang

脚本中:
__all__ =['name','read1']  # 只有这两个可以调用