• 模块的四种形式, import和from...import...使用,循环导入,模块的索引路径,python文件的两种用途,pyinstaller模块。


    1.模块的四种形式

    一.什么是模块?

    模块是一系列功能的集合体,实现一些功能或代码。一个py文件内部就可以放一堆函数,因此应该py文件就可以看成一个模块,如果这个py文件的文件名oldboy.py,则它的模块名为:oldboy。

    二.python模块的四种形式

    1. 自定义模块:如果你自己写一个py文件,在文件内写入一堆函数,则它被称为自定义模块,即使用python编写的.py文件
    2. 第三方模块:已被编译为共享库或DLL的C或C++扩展
    3. 内置模块:使用C编写并链接到python解释器的内置模块, time/random/os/sys...
    4. 包:把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包
    import time
    time.sleep()
    

    三. 模块的样式

    python看成手机 --》pip则就是应用管家 --》模块就是应用软件。

    import time
    

    四.为什么要用模块

    1.就是说已经被别人写好的内置模块,只需我们拿来用。可以提高我们的开法效率。

    2.自定义模块,将我们自己程序中用到的公共功能,写入一个python文件,然后程序的各部分组件可以通过导入的方式来引用自定义模块的功能。

    五.模块的用途

    一般我们使用import和from...import...导入模块。
    

    2. import和from...import...使用

    一般我们使用import和from...import...导入模块 引入

    print('from the spam.py')
    money = 1000
    
    def read1():
        print('spam模块:', money)
    
    def read2():
        print('spam模块')
        read1()
    

    一.import模块名

    import time
    time.sleep(oldboy)   #sleep(输入一个值)
    
    1. 开辟内存空间,以time模块为准创造一个模块的命名空间,内存空间名为time
    2. 执行模块对应的文件,将time.py中的所有代码读入名称空间,然后运行
    3. 通过time.方法使用time模块中的方法。

    二. from 模块名 import 方法名

    如果你想使用多个方法:

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

    如果你想导入非常多的方法

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

    三. import 和from ...import...的优缺点.

    import
    #优点:永久保存
    #缺点:每次带入多输入几个符号,非常麻烦。
    
    from...import...
    #优点:少数如几个字符
    #缺点:容易发生冲突
    

    补充 ---》 自定义模块 --》

    import test   #test 文件 
    print(test.adc)
    print(test.f1())   #通过test.变量名调用
    
    from test import *
    print(adc)    #直接调用
    f1()
    
    

    自定制模块的用途: 分文件存储代码 --> 函数与函数之间分开 --> 让代码更加清晰 --> 不同的模块干不同的事

    3.循环导入

    # oldboy1.py
    print("from oldboy1.py")
    from oldboy2 import x
    y = "oldboy"
    1.创建m2的名称空间
    2.执行m2.py,将执行产生的名字丢到m2.py
    3.在当前执行文件中拿到m2.x
    # oldboy2.py
    print("form oldboy2")
    from oldboy1 import y
    x = "lodboy2"
    1.创建m1的名称空间
    2.执行m1.py,将执行产生的名字丢到m1.py
    3.在当前执行文件中拿到m1.y
    
    #模块永远只会开辟一次 ; from m1 import 必须得执行m1.py中所有代码
    1. 在m1中运行m2模块
    2. 在m2中运行m1模块
    
    

    方法二 解决方法

    def f1():
        from lodboy2 import y
        print("oldboy1:",x,y)
    x = 10
    f1()
    
    def f2():
        from oldboy1 import x
    
        print('oldboy2:', x, y)
    
    y = 20
    
    
    

    第三次 解决方法

    from oldboy2 import y
    print("oldboy1:",x,y)
    模块永远只会开辟一次
    
    from oldboy1 import x
    print("oldboy2:",x,y)
    
    
    

    4.模块的索引路径

    模块其实就是一个文件,如果要执行文件,首先就需要找到模块的路径(某个文件夹)。如果模块的文件路径和执行文件不在同一个文件目录下,我们就需要指定模块的路径。

    模块的搜索路径指的就是在导入模块时需要检索的文件夹。

    导入模块时查找模块的顺序是:从当前 局部 -> 全局 -> 内置

    1. 先从内存中已经导入的模块中寻找(内存)
    2. 内置的模块(内置)
    3. 环境变量sys.path中找(自定义)
    # import testt
    # print(testt.abc)
    
    
    # import time
    # import testt
    # print(testt.abc)
    # time.sleep(10)  # 顺带删掉testt.py
    # print(testt.abc)
    
    # 内存 --> 自定义
    
    # 内置 --> 自定义
    
    # import time
    # import requests
    # print(requests.get('http://www.baidu.com'))
    # time.sleep(15)
    # print(requests)
    
    # 内存 --> 内置 --> 自定义
    
    # import this  # python之禅
    
    # 环境变量
    import os  # python之禅
    
    import sys
    
    print(sys.path)
    
    sys.path.remove('D:\python36\lib')
    
    import requests
    
    print(requests)
    
    
    '''
    import 
    
    from ... import
    '''
    
    
    

    5.python文件的两种用途

    执行文件:当前运行的文件

    模块

    一个文件既可以是执行文件,也可以是模块文件。

    from testt import shopping
    # __name__ == '__main__'不成立, __name__ != '__main__'
    # 当testt为模块文件时,__name__等于文件名
    
    # __name__是每个文件独有的,当该文件作为执行文件运行时,__name__等于'__main__';当该文件作为模块文件导入时,__name__等于文件名
    
    
    

    6.pyinstaller模块

    # pip install pyinstaller
    import PYInstaller
    # 使用这个模块压根不需要导入
    
    
  • 相关阅读:
    javascript库之Mustache库使用说明
    Android开发之底部导航栏标准
    Android开发之欢迎界面标准
    c和c++如何把一个整数转化为string
    stringstream用法
    实战c++中的string系列--std:vector 和std:string相互转换(vector to stringstream)
    C++11使用make_shared的优势和劣势
    C++11 并发指南五(std::condition_variable 详解)
    C++17 std::shared_mutex的替代方案boost::shared_mutex
    std::shared_mutex和std::mutex的性能对比(banchmark)
  • 原文地址:https://www.cnblogs.com/WQ577098649/p/11593948.html
Copyright © 2020-2023  润新知