zoukankan      html  css  js  c++  java
  • Python学习---8.8

    模块的循环导入问题

        

    #m1.py
    print('我是m1')
    from m2 import y
    x='m1'
    
    #m2.py
    print('我是m2')
    from m1 import x
    y-'m2'
    
    #run.py
    import m1
    先执行run.py--->执行import m1,开始导入m1并运行其内部代码--->打印内容"正在导入m1"
    --->执行from m2 import y 开始导入m2并运行其内部代码--->打印内容“正在导入m2”--->执行from m1 import x,由于m1已经被导入过了,所以不会重新导入,所以直接去m1中拿x,然而x此时并没有存在于m1中,所以报错
    解决方案一:将循环导入代码写到最后
    #m1.py
    print('正在导入m1')
    x='m1'
    from m2 import y
    
    #m2.py
    print('正在导入m2')
    y='m2'
    from m1 import x
    
    #run.py
    import m1

    解决方案二:将循环代码写到函数中

    #m1.py
    print('正在导入m1')
    def f1():
        from m2 import y
        print('m1',m1)
    x='m1'
    
    #m2.py
    print('正在导入m2')
    def f2():
        from m1 import x
        print('m2',m2)
    y='m2'
    
    #run.py
    import m1
    区分文件的两种用途
       
    def f1():
        print('f1')
    
    def f2():
        print('f2')
    
    
    当文件被执行时__name__=='__main__'
    当文件被导入时__name__=='模块名'
    print(__name__)
    
    if __name__ == '__main__':
        f1()
        f2()
    
    

    模块的搜索路径的优先级

      1.内存中已经加载过的

        2.内置模块

        3.sys.path   sys路径的第一个值是当前执行文件所在文件夹

    绝对导入和相对导入

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

            优点:执行文件与被导入模块都能使用

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

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

            符号:.代表当前文件的文件夹。..代表上一级文件夹

            优点:导入更简单

            缺点:只能在被导入模块中使用,不能在执行文件中用

    软件开发的目录规范

       ATM

          |

           ————bin(程序主入口,执行文件)

          |

         ——————conf(配置文件,全面变量)
       
    |
       —————core(核心逻辑,业务代码)
        |
        ——————lib(自定义模块)
        |
        ——————db(用户信息)
        |
        ——————log(日志文件)

            
       

  • 相关阅读:
    Windows 8实例教程系列 布局控制
    Windows8/Silverlight/WPF/WP7/HTML5周学习导读(1月7日1月14日)
    Silverlight动态设置WCF服务Endpoint
    轻松搭建Windows8云平台开发环境
    Windows8/Silverlight/WPF/WP7/HTML5周学习导读(1月28日2月3日)
    Windows8/Silverlight/WPF/WP7/HTML5周学习导读(1月1日1月6日)
    Qt 打印已加载可用的数据库驱动
    QSqlDatabase: QOCI driver not loaded
    QT oracle
    参数初始化列表
  • 原文地址:https://www.cnblogs.com/Liu-guang-hui/p/9443245.html
Copyright © 2011-2022 走看看