• 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'模块路径') # 可通过此方法可调用不在同一目录下的模块
      
  • 相关阅读:
    git分支
    git使用
    多人协作
    python初心记录二
    python初心记录一
    Javascript 概念类知识
    想成为前端工程师?希望读完这篇文章能对你有所帮助。
    Egret note
    cocos2d-js 连连看
    PS置入图片之后保留选区方便C图
  • 原文地址:https://www.cnblogs.com/yaoqi17/p/11099685.html
Copyright © 2020-2023  润新知