Python -- 自定义模块

模块的分类:

  • 第一类: 内置模块,也叫标准库.次来模块是Python解释器提供的,比如time,os模块.标准库模块有200多种.
  • 第二类: 第三方模块,第三方库. 一些Python大神写的非常好用的模块,必须通过pip install指令安装模块.比如BeautifulSoup , Django等.大概有6000多种.
  • 第三类: 自定义模块. 自己在项目中定义的一些模块

6.1 自定义模块

1) import 模块名 ---- 导入某模块

第一次导入模块执行三件事

  1. 创建一个以模块名命名的名称空间
  2. 执行这个名称空间(导入模块) 里面的代码
  3. 通过此模块名 . 的方式引用该模块里面的内容(变量,函数名,类名等)

被导入的模块有独立的名称空间: 每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间,在编写自己的模块时,就不用担心我们定义在自己模块中全局变量会在被导入时,与使用者的全局变量冲突.

可以为模块起别名: import 模块名 as 别名

  • 可以将很长的模块名改成很短,方便使用
  • 有利于代码的扩展和优化

导入多个模块: 推荐一个一个导入 -- 多行导入:易于阅读,易于编辑,易于搜索,易于维护

2) from...import...

from 模块名 import 变量,函数名

from...import... 与import对比: 使用from...import...是将模块中的名字直接导入到当前的名称空间中,所以在当前名称空间中,直接使用名字就可以了.无需加前缀:模块名.

form..import.. 的方式有好也有坏:

  • 使用起来方便
  • 容易与当前执行文件中的名字冲突.如果执行文件有与模块同名的变量或者函数名,就会有覆盖效果.

3) from...import*

from ... import * 与__all__配合使用(写在模块文件中)

__all__ = ['name','read1'] 写在模块文件中,控制 * 的取值范围 只导入模块中的两个函数

4) py文件的两种功能

编写好的一个Python文件可以有两种用途

  1. 脚本,一个文件就是整个程序,用来被执行
  2. 模块,文件中存放着一堆功能,用来被导入使用

Python为我们内置了全局变量__name__

  1. 当文件被当做脚本执行时:__name__等于__main__

  2. 当文件被当做模块导入时:__name__等于模块名

    • 作用: 用来控制.py文件在不同的应用场景下执行不同的逻辑(或者是在模块文件中测试代码)
    print('from the ABC.py')
    
    __all__ = ['name', 'read1',]
    
    name = 'aaa'
    
    def read1():
       print('tbjx模块:',name)
    
    def read2():
       print('tbjx模块')
       read1()
    
    def change():
       global name
       name = 'barry'
       
    if __name__ == '__main__':  
       # 在模块文件中测试read1()函数
       # 此模块被导入时 __name__ == tbjx 所以不执行
       read1()
    

5) 模块的搜索路径

内存中已经加载的模块->内置模块->sys.path路径中包含的模块

模块的查找顺序

  1. 在第一次导入某个模块时,会先检查该模块是否已经被加载到内存中(当前执行文件的名称空间对应的内存),如果有则直接引用(ps:python解释器在启动时会自动加载一些模块到内存中,可以使用sys.modules查看)
  2. 如果没有,解释器则会查找同名的内置模块
  3. 如果还没有找到就从sys.path给出的目录列表中依次寻找模块文件。
# 寻找模块的路径: 内存 ----> 内置模块  ---> sys.path中找
# 只要这三个地方:内存 内置模块 sys.path可以找到这个引用的模块的路径,这个模块就可以直接引用到.

# 如何引用到tbjx1.py
import sys
# print(sys.path)  是一个列表
sys.path.append(r'D:s23day15')
import tbjx1
tbjx1.read1()
原文地址:https://www.cnblogs.com/Agoni-7/p/11093719.html