zoukankan      html  css  js  c++  java
  • python模块与包

    一、什么是包?

    包是一个内部带有__init__.py的文件夹,包也可以被导入,并且可以一并导入包下的所有模块。

    二、为什么要使用包?

    包的本质就是一个文件夹,那么文件夹唯一的功能就是将文件组织起来。
    随着功能越写越多,我们无法将所有功能都放到一个文件中,于是我们使用模块去组织功能,而随着模块越来越多,我们就需要用文件夹将模块文件组织起来,以此来提高程序的结构性和可维护性。
    在包中有一个__init__.py, 由它来帮我们管理模块。

    三、怎么使用包?

    1. import 包.模块名
    2. from 包 import 模块名
    3. from 包.模块名 import 模块中的名字

    导入包时发生的事情:

    1. 当包被导入时,会执行包中的__init__.py,产生一个名称空间。
    2. ,会将__init__.py中的所有名字添加到名称空间中。
    3. 接着会将包下所有的模块的名字加载到__init__.py产生的名称空间中。
    4. 导入的模块指向的名称空间其实就是__init__.py产生的名称空间。

    强调
      在python3中,即使包里面没有__init__.py文件,import 包仍然不会报错,而在python2中,包里面一定要有该文件,否则import 包报错

    模块

    一、 什么是模块?

    模块是一系列功能代码的集合体。
    在Python中,一个.py文件就是一个模块,文件名为xxx.py模块名则是xxx,导入模块可以引用模块中已经写好的功能

    - 模块的三种来源:
        1.python内置的模块: (python解释器的)
            比如: sys	imeos	urtle
    
        2.第三方的模块: (别人写的)
            比如: requests
    
        3.程序员自定义的模块: (自己写的)
            比如: 自己定义的demo.py文件
    - 模块的四种表现形式:
        1.使用python编写的py文件。(了解)
        2.编译后的共享库DLL或者是C或者C++库。(了解)
        3.包下面带有__init__.py的一组py文件。
            -- __init__.py
                - demo.py
                - demo2.py
        4.python解释器下的py文件。
            - python解释器下的文件夹
               - 一个个的py文件

    二、 为什么要使用模块?

    • 模块可以帮我们更好地管理功能代码,比如: 函数...
    • 可以将项目拆分成一个个的功能,分别存放在不同的py文件(模块)中。

    三、 如何创建,编写模块,并使用模块

      • 鼠标右键创建py文件
         在py文件编写python代码

      • 在一个文件中,通过import关键字导入模块
        import 模块名
        注意: import 模块时,模块不能加.py后缀

      • 在使用模块阶段,必须要注意,谁是执行文件,谁是被导入文件(被导入的模块)

      • 模块在首次导入时,导入的模块已经将其加载到内存空间了,之后的重复导入会直接引用内存中已存在的模块,不会重复执行文件,通过import sys,打印sys.modules的值可以看到内存中已经加载的模块名。

      • 在文件开头导入模块属于全局作用域,在函数内导入的模块则属于局部的作用域。

    模块在导入时发生的事情:

    1. 会先执行当前执行文件,并生成当前执行文件的的名称空间。
    2. 当执行到被导入模块的代码时,被导入的模块会产生一个模块的名称空间。
    3. 将被导入模块的名称空间加载到内存中。
    import foo      #导入模块foo
    a=foo.x         #引用模块foo中变量x的值赋值给当前名称空间中的名字a
    foo.get()         #调用模块foo的get函数
    foo.change()     #调用模块foo中的change函数
    给模块起别名 as
    import 模块 as 模块的别名

    四、 循环导入问题

    - m1.py
            print('正在导入m1')
            from m2 import y
            x='m1'
    
        - m2.py
            print('正在导入m2')
            from m1 import x
        - run.py
            import m1                #执行run.py会报错
    
    
        - 解决循环导入问题:
            1.需要查找的名字放在导入模块的上方
            2.在函数内部导入,将模块加载到局部名称空间中

     五、py文件区分两种用途:模块与脚本

    编写好的一个python文件可以有两种用途:
        一:脚本,一个文件就是整个程序,用来被执行
        二:模块,文件中存放着一堆功能,用来被导入使用
        
    print(__name__)
    
    __name__的值1、在文件被直接执行的情况下,等于'__main__'
    2、在文件被导入的情况下,等于模块名
    
    作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
    
    if __name__ =='__main__'
        func()

     七、模块的搜索路径

    模块的查找顺序

    1. 内存中已经加载的模块
    2. 内置模块
    3. sys.path路径中包含的模块

    强调:sys.path的第一个路径是当前执行文件所在的文件夹

    import sys
    print(sys.path)   
    
    import sys
    print(sys.modules)  #查找内存中存在的模块
  • 相关阅读:
    打开安装 好的Microsoft Dynamics CRM 4.0 报错误为 Caller does not have enough privilege to set CallerOriginToken to the specified value 的解决办法
    基于 Windows Server 2008 的计算机对 Microsoft Dynamics CRM 4.0 的支持
    Microsoft Dynamics CRM 4.0 如何添加自定义按钮
    Microsoft Dynamics CRM 4.0 Plugin 取值,赋值,查询
    C# 中的 enum(枚举) 类型使用例子
    vue事件的绑定
    表单验证2
    node中模块
    node模块的引入
    node中的读文件
  • 原文地址:https://www.cnblogs.com/wddxx/p/13669205.html
Copyright © 2011-2022 走看看