zoukankan      html  css  js  c++  java
  • 模块(包)

    一、什么是模块

    模块是一系列功能的集合体,可以看成是一堆函数的集合体。

    二、模块的四种形式

    1、自定义模块

    自定义代码,如果你自己写一个py文件,在文件内写入一堆函数,则它被称为自定义模块,即使用python编写的.py文件

    2、第三方模块

    就是pip安装的模块,已被编译为共享库或DLL的C或C++扩展

    3、内置模块

    python解释器启动自带的模块,是使用C编写并链接到python解释器的模块

    4、包

    4.1 包的定义

    1. 本质就是模块,实际上就是一个含有__init__.py文件的文件夹
    2. 导包就是导入__init__.py文件
    3. 包一定是被当作模块文件导入,模块文件的搜索路径以执行文件的路径为准

    4.2 绝对导入和相对导入

    只能在包中使用

    绝对导入:

    from 包名.模块名 import 方法名
    

    相对导入:

    .    代表当前被导入文件所在的文件夹
    
    ..   代表当前被导入文件所在的文件夹的上一级
    
    ...  代表当前被导入文件所在的文件夹的上一级的上一级
    

    二、import和from。。。import。。。

    1.import

    import time
    
    1. 开辟内存空间,内存空间命名为time
    2. 把time.py中的所有代码读入名称空间,然后运行
    3. 通过time.方法名使用time模块中的方法

    优点:永不冲突

    缺点:每次导入多输入几个字符,非常麻烦

    2.from。。。import。。。

    from time import sleep
    
    1. 开辟内存空间,内存空间命名为time
    2. 把time.py中的所有代码读入名称空间,然后运行
    3. 把sleep()读入import和from...import.py中,因此可以直接使用方法名

    优点: 少输入几个字符

    缺点: 容易发生冲突

    3.导入多个功能

    导入多个方法:

    from time import sleep, time  # 特定导入一些功能
    

    导入所有方法:

    from time import *  # *导入了所有的功能
    

    三、循环导入

    就是两个文件互相将对方作为模块文件调用,你调用我,我调用你,你再调用我。。。反反复复,子子孙孙无穷匮也

    # m1
    x = 10
    from m2 import y
    
    print('m1:', x, y)
    
    # m2
    y = 20
    from m1 import x
    
    print('m2:', x, y)
    

    执行m2:

    m2: 10
    m1: 20
    m2: 10
    

    我们发现:模块永远只会开辟一次,只要是第二次调用,就忽略开辟空间语句执行下面的代码。

    四、模块的搜索路径

    内存 --> 内置 --> 自定义

    导入模块时查找模块的顺序是:

    1. 先从内存中已经导入的模块中寻找
    2. 内置的模块
    3. 环境变量sys.path中找

    五、python文件的两种用途

    python文件总共有两种用途,一种是执行文件;另一种是被当做模块导入。

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

    1. 脚本,一个文件就是整个程序,用来被执行
    2. 模块,文件中存放着一堆功能,用来被导入使用、
    # aaa.py
    
    x = 1
    
    
    def f1():
        print('from f1')
    
    
    def f2():
        print('from f2')
    
    
    f1()
    f2()
    
    # run.py
    
    import aaa
    

    如果直接运行run.py会直接运行aaa.py中的f1()f2(),但是如果我们在aaa.py中加上if __name__ == '__main__':这句话,则可以防止运行run.py时执行f1()f2()。因为当aaa.py被直接执行,即当做执行文件的时候__name__ == '__main__'; 在aaa.py被当做模块直接运行的时候__name__ == 'aaa'。由此可以让aaa.py在不同的场景下有着不同的用法。

    # aaa.py
    
    x = 1
    
    
    def f1():
        print('from f1')
    
    
    def f2():
        print('from f2')
    
    
    if __name__ == '__main__':
        f1()
        f2()
    
    # run.py
    
    import aaa
    
  • 相关阅读:
    哈密顿环求解 C++实现 回溯法
    哈密顿环求解 C++实现 回溯法
    哈密顿环求解 C++实现 回溯法
    图着色问题 配色方案 C++实现 回溯法
    图着色问题 配色方案 C++实现 回溯法
    图着色问题 配色方案 C++实现 回溯法
    图着色问题 配色方案 C++实现 回溯法
    n-皇后问题 C++实现 回溯法
    n-皇后问题 C++实现 回溯法
    如何给Sqlite添加复合主键
  • 原文地址:https://www.cnblogs.com/bowendown/p/11592828.html
Copyright © 2011-2022 走看看