• 模块基本模式


    模块

    模块循环导入问题:即q模块导入了w模块,w模块又导入了e 模块,e 模块又导入了w模块

    模块循环/嵌套导入抛出异常的根本原因是由于在python中模块被导入一次之后,就不会重新导入,只会在第一次导入时执行模块内代码
    在我们的项目中应该尽量避免出现循环/嵌套导入,如果出现多个模块都需要共享的数据,****可以将共享的数据集中存放到某一个地方
    解决办法:两种,一种是将某些执行的代码放到导入模块之前,利用的是在导入之前加载   #  不推荐,代码太多时,混乱
    # 第二种, 是将函数包裹导入,这样可以在调用时才加载,让其他先加载   
    参考  https://www.cnblogs.com/linhaifeng/articles/6379069.html#_label4  模块导入问题
    
    # 编写好的一个python文件可以有两种用途:
        一:脚本,一个文件就是整个程序,用来被执行
        二:模块,用来被导入使用
    # python为我们内置了全局变量__name__,
        当文件被当做脚本执行时:__name__ 等于'__main__'
        当文件被当做模块导入时:__name__等于模块名
    
    #作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
        if __name__ == '__main__':
        	调用函数
        在脚本文件时会执行 在别人调用时,不会自动触发调用函数,只有主动调用函数
    

    模块的搜索路径

    查找顺序是 内存中已经加载的模块 >内置模块 > sys.path路径中存在的模块

    # 可通过 sys.modules 来查看内存中加载的模块  sys.argv查看内置模块
    可通过修改sys.path
    import sys
    sys.path.append('/a/b/c/d')
    sys.path.insert(0,'/x/y/z') #排在前的目录,优先被搜索
    
    - import 
      - import 模块1                                    模块1.函数()
      - import 模块1.模块2.模块3                模块1.模块2.模块3.函数()
    - from  xx import xxx
      - from 模块.模块 import 函数		函数()
      - from 模块.模块 import 函数 as  f         f()
      - from 模块.模块 import *                      函数1()    函数2()
      - from 模块 import  模块                        模块.函数()
      - from 模块 import  模块  as m              m.函数()
      # from...import 模块.模块 错误      不能在import后面用模块.模块
    python 解释器会默认将当前执行文件的目录加到sys.path。此外还有五个python安装时的目录也会加入
    pycharm 在运行时,会将当前执行文件的根目录加入到sys.path,一般我们不这样用,会手动添加到目录文件到环境变量
    __file__当前运行脚本的路径  os.path.dirname上表示一级目录
    # 建议要么将项目执行文件直接放到根目录下,然后会自动加在到环境变量,要么是用os.path.abspath(__file__)获取绝对路径,然后查找上级直到跟目录,多次寻找上一级,此以寻找二次就找到根目录为例                        base_path = os.path.dirname(os.path.abspath(__file__)), sys.path.append(base_path)。根目录下的第一级文件可以直接导入,一般是下面情况
    

    image-20200724182708851

  • 相关阅读:
    SSH使用TCP Wrappers实现访问控制
    Java设计模式(15)——行为模式之策略模式(Strategy)
    Java设计模式(14)——行为模式之不变模式(Immutable)
    Java设计模式(13)——结构型模式之桥梁模式(Bridge)
    Java设计模式(12)——结构型模式之门面模式(Facade)
    Java设计模式(11)——结构型模式之享元模式(Flyweight)
    Java设计模式(10)——结构型模式之代理模式(Proxy)
    Java设计模式(9)——结构型模式之装饰模式(Decorator)
    Java设计模式(8)——结构型模式之组合模式(Composite)
    Java设计模式(7)——结构型模式之适配器模式(Adapter)
  • 原文地址:https://www.cnblogs.com/feiguoguobokeyuan/p/13446146.html
Copyright © 2020-2023  润新知