模块的导入 模块路径

day16

一丶模块的初识

#### 什么是模块:
# 模块就是一个py文件(这个模块存放很多相似的功能,函数的集合体)
   

### 模块的分类:
   # 内置模块: 标准库 ,python解释器自带的 ,200多种
   # 第三方库: 通过pip install 安装第三方库 6000个
   # 自己写的模块: 自己编写的特定功能的py文件
   
   
   #### 自定义模块:
       #   只是第一次引用时, 将此模块加载到内存,
       #   执行文件:   被引用文件

 

二丶模块的导入 import

 ### 语法 : import 模块名         , 只加载一次(导入就不会再次加载)  
### 调用格式 : 模块名 . XX功能

### 引用模块发送三件事:
           #1. 把要引入模块加载到内存
           #2. 在内存中创建一个以引入模块命名的名称空间
           #3. 通过引入模块的名字,以.的方式引入此模块的(变量,函数,类名)

           
###注意:            
# 通过import引入的模块,引入模块中的变量不会受到,当前模块相同名字的变量的影响
# 通过import 引入的模块, 他有自己的独立空间,与当前执行的文件没有关系.



### 起别名:   import ...模块 as ...缩写名  
   # 将一个名字较长的模块名 简化成一个 简单名字
import  tbjx as k
print(k.name)


### 同时调用多个模块 ,以,号分隔 (不建议使用, 会使代码清晰,不易维护)
import 模块1, 模块2 ,模块3

 

三丶from import

### 语法格式: from  xxx模块  import 变量  , 只加载一次  
from tbjx import func1

print(globals()) # 查看当前文件中的变量, 把需要用的具体变量,从引入模块拷贝一份.


### 特点:
# 优点: 使用起来方便 (更容易快速找到指定的要使用的 功能 )
# 缺点: 容易与当前执行文件产生覆盖效果(如果当前执行的文件中具有和导入的模块 相同名字的变量就会被覆盖.谁先加载,谁先被覆盖)


### 注意: (极端情况,一般没人这么折腾自己)
# 需求: 在引入一个模块的之后,去执行这个模块的中修改模块的某个变量的值. 不会对当前执行文件造成影响.

# 当前执行文件使用的是模块中同一个函数.(只有模块中的变量会被拷贝当前执行文件, 模块中的函数不会被拷贝)
# 引用模块中的函数,如果此模块用到一些变量,这些变量还是从此模块中寻找,不会改变当前执行文件的变量




### 起别名  
from tbjx import name as n


##多个导入:
from  tbjx import  name as n
from  tbjx import  read1 as r


###   * (尽量别用)
from xxx模块  import *

# 全部复制(模块中所有的都被全部加载到内存中), 效率低, 容易覆盖
# from .. import * 与__all__配合使用
# 在引入模块的文件中,创建一个列表 __all__=[变量1,变量2,函数名1,函数名2]   一般写在引入模块最上面




#####推荐:
# 当前执行的文件中 ,不要出现 与 引入模块相同的名字的变量.

 

四丶模块路径

### __name__ 的使用 ,判断当前文件是可执行的脚本,还是模块
# 1. py文件的第一个功能: 执行文件(承载代码)脚本(主动) ,直接打印(__name___)得到__main__
# 2. py文件的第二个功能: 模块(被执行)     直接打印(__name___)得到 模块名


# 补充:  
   #1.使用pycharm是,点击run 一个.py的文件,(文件包括👇下面的代码),就会打印True,此时的
     #   __name__==__main__ , so , 是一个主动执行脚本.
   
       if __name__ == '__main__':
  print(True)
           
   #2. 而且下面的代码,还具有测试功能
   
       def func1():
           print('in func1')

       def func2():
           print('in func2')
           return '执行 func2'
       func1()
       func2()

       if __name__ == '__main__':
           ret=func2()
           print('测试func2:'+ret)


           
           
           
### 模块的搜索路径
# 寻找模块的路径: 内存--->内置模块--->sys.path
# 只要找到这三个地方: 内存中,内置中 ,sys.path可以找到这个引用的模块的路径,这个模块就直接引用


   
### 主动的将一个模块的路径添加到 当前工作sys.path环境
import sys
print(sys.path) # 打印当前工作目录
print(sys.modules) # 打印当前文件中所有的模块
sys.path.append(r'XXX文件')   # xxx文件 和 你当前执行文件的父目录同级 ,xxx文件包含 tbjx.py文件
import tbjx1

 

posted on 2020-01-11 15:25  向往1  阅读(240)  评论(0编辑  收藏  举报

导航

……