zoukankan      html  css  js  c++  java
  • python-模块入门二(模块循环导入,区分python文件的两种用途,模块搜索路径,软件开发的目录规范)

    一、模块的循环导入问题

    run.py

    # import m1 # 第一次导入

    m1.py

    # 错误示范
    '''
    print('正在导入m1')
    from m2 import y #第一次导入m2
    x='m1'
    '''

    m2.py

    # 错误示范
    '''
    print('正在导入m2')
    from m1 import x
    
    y='m2'
    '''

    解决方案:

    一:把循环导入的语句放到名字定义的后面

    # m1.py
    #
    y='m2' # from m1 import x
    # m2.py
    # print('正在导入m2')
    #
    # y='m2'
    # from m1 import x

    二:将循环导入的语句放到函数内

    # m1.py
    print('正在导入m1')
    
    def f1():
        from m2 import y,f2 #第一次导入m2
        print('m1.f1---->y: ',y)
        f2()
    x='m1'
    # m2.py
    def
    f2(): from m1 import x print('m2.f2--->x: ',x) y='m2'

     二、区分python文件的两种用途

    当文件被执行时__name__=='__main__'

    当文件被导入时__name__=='模块名'

    if __name__ == '__main__':
        f1()
        f2()

    三、模块的搜索路径

    模块搜索路径的优先级:1.内存中已经加载过的,2.内置模块,3.sys.path第一个值是当前执行文件所在的文件夹

    环境变量是以当前执行文件为准的.

    注: 所有被导入的模块参照环境变量sys.path都是以执行文件为准的.被导入的模块再去导入其它模块,也是参照sys.path

    四、绝对导入与相对导入

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

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

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

    相对导入:

      符号:一个"."代表当前所在文件夹,".."代表上一级文件夹,"..."代表上一级的上一级文件夹

      优点:导入更加简单

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

    注意: 执行文件中只能用绝对导入

    五、软件开发的目录规范

    规范化的目录结构能更好的控制程序,让程序具有更高的可读性

    1.可读性高 2.可维护性高

    通常一个项目都会有的目录如下:

    项目名/

    | -- bin/  #程序启动脚本/程序入口

    |  | -- start.py

    |

    | -- conf/ #配置文件

    |        | --settings.py

    | -- core/ #业务逻辑

    |        | --src.py 

    | -- db/ 

    |        | --数据库文件

    | -- lib/ #第三方库

    |        | --common.py

    | -- log/  #日志

    |        | --transaction.log

    README #说明文档

    目录后继会继续补充!

  • 相关阅读:
    FJSC2020合集
    考试前注意事项
    CSP-S&&NOIP2020游记
    IOI2020集训队作业题单
    对拍程序
    Re:memset 赋值
    2019-12-29 Div.3模拟赛题解
    NOI2020 游记
    边三连通分量算法
    【题解】Code+7 教科书般的亵渎
  • 原文地址:https://www.cnblogs.com/mangM/p/9442792.html
Copyright © 2011-2022 走看看