python之模块Ⅰ

模块Ⅰ

  1. 定义与分类

    1. 定义

      • 一个模块就是一个py文件,这个模块存储很多相似的功能,相似函数的集合体

        ​ 通常一个项目不可能将所有代码全部写在一个文件中,这样会造成不易维护以及效率低的缺点。

        ​ 此时需要分文件,比如分成10个文件,每个文件有50个函数,有一些相同功能或者相似功能的函数,整个文件看起来代码冗余,重复性很高。

        ​ 我们应该将这10个函数提取出来,放在一个文件中,随拿随用

      • 优点

        1. 节省代码
        2. 容易维护,组织解构更清晰
    2. 分类

      • 内置模块,标准库。python解释器自带的time,os,sys等等200多种
      • 第三方库(模块),各种大神写的一些模块,通过pip install...安装6000多种
      • 自己写的模块,自定义模块
  2. import

    1. 格式

      import tbjx
      

      执行文件:02 模块import

      被引用文件(模块):tbjx.py

      当引用tbjx模块时,实际上是将tbjx .py执行一遍,加载到内存

      只是第一次引用时,将此模块加载到内存

    2. 第一次导入模块发生的三件事

      • 将tbjx.py文件加载到内存。
      • 在内存中创建一个以tbjx命名的名称空间。
      • 通过tbjx名称空间的名字.等方式引用此模块的名字(变量,函数名,类名等等)。
      import tbjx
      print(tbjx.name)
      tbjx.read1()
      tbjx.read2()
      
    3. 被导入模块有独立的名称空间

      通过tbjx.的方式引用此模块的名字时,一定是从此模块中寻找的

      通过import引用模块,有自己的独立空间,与当前执行文件没有关系

      name = '王大锤'
      print(tbjx.name)
      def read1():
          print('in 02 模块import')
      tbjx.read1()
      
    4. 为模块起别名

      将一个比较长的模块名化简成简单的。

      • 书写方便

        import tbjx as tb
        print(tb.name)
        tb.read1()
        
      • 简化代码

        content = input('>>>').strip()
        if content == 'mysql':
            import mysql_ as db
        elif content == 'oracle':
            import oracle_ as db
        db.sqlprase()  # 统一化接口
        
    5. 导入多个模块

      • import time,os,sys  # 不推荐.
        
      • import time
        import os
        import sys
        
  3. from...import...

    1. 用法

      from tbjx import name
      from tbjx import read1
      

      ​ 相当于从tbjx模块的全局空间中将name,read1变量与值的对应关系复制到当前执行文件的全局名称空间中。

      • 优点:使用起来方便了

      • 缺点:容易与当前执行文件产生覆盖效果

        实例1:

        from tbjx import name
        name = '王大锤'
        print(name)
        # 王大锤
        

        实例2:

        name = '王大锤'
        from tbjx import name
        from tbjx import read1
        def read1():
            print('在执行文件中')
        print(name)
        read1()
        # 太白金星
        # 在执行文件中
        

        实例3:

        from tbjx import name
        from tbjx import change
        change()
        print(name)
        # 太白金星    并没有改变
        

        特殊情况:极值情况,工作中不会出现。(了解)
        因为如果你要是引用一些模块的变量,那么执行文件中就不应该出现同名变量。

        实例4:

        from tbjx import change
        change()
        from tbjx import name
        print(name)
        # barry    变了
        
    2. from...import *尽量别单独用

      • 将模块中的所有名字复制过来

      • 容易覆盖

      • __all__配合使用(写在模块文件中),只会将例表里的名字复制过来

        __all__ = ['name', 'read1', 'read2']
        
  4. py文件的两种功能

    1. 功能

      • py文件的第一个功能:执行文件(承载代码) 脚本.

        直接打印__name__返回__main__

      • py文件的第二个功能: 模块(被执行文件).

        直接打印__name__返回tbjx 模块名

    2. 作用

      用来控制.py文件在不同的应用场景下执行不同的逻辑(或者在模块文件中测试代码)

  5. 模块的搜索路径

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

    import sys
    print(sys.path)
    sys.path.append(r'模块路径') # 可通过此方法可调用不在同一目录下的模块
    
posted @ 2019-06-27 21:18  小小蚂蚁mm  阅读(109)  评论(0编辑  收藏  举报