zoukankan      html  css  js  c++  java
  • Python学习之路_day_16(模块搜索路径,开发规范)

    1、模块循环导入问题:

    模块循环/嵌套导入抛出异常的根本原因是由于在python中模块被导入一次之后,就不会重新导入,只会在第一次导入时执行模块内代码

    在我们的项目中应该尽量避免出现循环/嵌套导入,如果出现多个模块都需要共享的数据,可以将共享的数据集中存放到某一个地方

    在程序出现了循环/嵌套导入后的异常分析、解决方法如下:

    #错误示范文件内容如下

    #m1.py

    print('正在导入m1')

    from m2 import y

     

    x='m1'

    #m2.py

    print('正在导入m2')

    from m1 import x

     

    y='m2'

    #run.py

    import m1

     

    方法一:导入语句放到最后

    #m1.py

    print('正在导入m1')

    x='m1'

     

    from m2 import y

     

    #m2.py

    print('正在导入m2')

    y='m2'

     

    from m1 import x

     

     

    方法二:导入语句放到函数中

    #m1.py

    print('正在导入m1')

    def f1():

        from m2 import y

        print(x,y)

     

    x = 'm1'

     

    #m2.py

    print('正在导入m2')

    def f2():

        from m1 import x

        print(x,y)

     

    y = 'm2'

     

    #run.py

    import m1

     

    m1.f1()

    方法一中的名称空间关系图:

    方法二中的名称空间关系图:

     

     

    2、模块的搜索路径

     

    2.1、模块的查找顺序是:

     

     

     

     

     

    2.2、导入模块的路径:

     

    绝对导入: 以执行文件的sys.path为起始点开始导入,称之为绝对导入

            优点: 执行文件与被导入的模块中都可以使用

            缺点: 所有导入都是以sys.path为起始点,导入麻烦

    相对导入: 参照当前所在文件的文件夹为起始开始查找,称之为相对导入

            符号: .代表当前所在文件的文件加;

    ..代表上一级文件夹;

    ...代上一级的上一级文件夹

            优点: 导入更加简单

            缺点: 只能在导入包中的模块时才能使用,不能在执行文件中用

     

    3、区分python文件的两种用途:

    • 编写好的一个python文件可以有两种用途:    

    u 一:脚本,一个文件就是整个程序,用来被执行

    u 二:模块,文件中存放着一堆功能,用来被导入使用

     

    • python为我们内置了全局变量__name__,

    u 当文件被当做脚本执行时:__name__ 等于'__main__'

    u 当文件被当做模块导入时:__name__等于模块名

     

    • 作用:用来控制.py文件在不同的应用场景下执行不同的逻辑

    u if __name__ == '__main__'


    4、软件开发目录

     

    • confàsettings.py
    • core(主要逻辑)àsrc.py
    • dbàdb.txt
    • lib(库)àcommon.py
    • bin(入口,启动)àstart.py
    • logàaccess.log
    • readme(说明书)

     

     

  • 相关阅读:
    【WPF/WAF】使用System.Windows.Interactivity交互事件
    【Linux/CentOS】Boolean ftp_home_dir is not defined
    【笔记】使用Token做验证
    【笔记】什么是跨域请求/访问?
    MongoDB优化与一些需要注意的细节
    MongoDB中聚合工具Aggregate等的介绍与使用
    MongoDB中MapReduce介绍与使用
    Centos下MongoDB的安装与配置
    PHP使用header方式实现文件下载
    关于redis中SDS简单动态字符串
  • 原文地址:https://www.cnblogs.com/zjh009/p/9470095.html
Copyright © 2011-2022 走看看