目录
  • 一、前期准备
  • 二、多种import调用方法 
    • 1、第一种写法
    • 2、 第二种写法
    • 3、第三种写法
  • 总结

    一、前期准备

    假设parent/__init__.py 里的代码是:

    # -*- coding: UTF-8 -*-
    print('从前有座山,')

    假设parent/one/__init__.py 里的代码是:

    # -*- coding: UTF-8 -*-
    print('山上有座庙,')

    假设parent/one/one/__init__.py 里的代码是:

    # -*- coding: UTF-8 -*-
    print('庙里有个老和尚,')

    假设parent/two/__init__.py 里的代码是:

    # -*- coding: UTF-8 -*-
    print('老和尚说:')

    假设parent/three/__init__.py 里的代码是:

    # -*- coding: UTF-8 -*-
    print('从前有座山,')

    按上述所示建立对于的py文件。对应效果如下图所示。感觉在无线套娃,挺有意思的,哈哈哈。 

    python打印经典故事从前有座山的几种写法

    二、多种import调用方法 

    如果一个模块被import过,Python 会将导入的模块缓存在sys.modules字典里缓存起来,再次导入的时候不会重新执行导入动作,直接从缓存里取。反之,如果我们从sys.modules里把导入的模块删除,则再次import会再次触发模块导入动作。

    利用以上知识,我们的目标是通过 import 语句导入模块,触发每个包目录下__init__.py加载时执行print语句,从而循环打印出:

    从前有座山,
    山上有座庙,
    庙里有个老和尚,
    老和尚说:
    从前有座山,
    山上有座庙,
    庙里有个老和尚,
    老和尚说:
    从前有座山,

    首先先介绍下python中del的用法,del用于删除对应的变量的引用。

    由于python都是引用,而python有GC机制,所以,del语句作用在变量上,而不是数据对象上。

    if __name__=='__main__':
        a=1       # 对象 1 被 变量a引用,对象1的引用计数器为1
        b=a       # 对象1 被变量b引用,对象1的引用计数器加1
        c=a       #1对象1 被变量c引用,对象1的引用计数器加1
        del a     #删除变量a,解除a对1的引用
        del b     #删除变量b,解除b对1的引用
        print(c)  #最终变量c仍然引用1

    del删除的是变量,而不是数据。

    1、第一种写法

    import sys
     
    if __name__ == '__main__':
        while True:
            import parent.one.one
            import parent.two
            import parent
     
            del sys.modules['parent.one']
            del sys.modules['parent.one.one']
            del sys.modules['parent.two']
            del sys.modules['parent']

    效果图

    python打印经典故事从前有座山的几种写法

    2、 第二种写法

    import sys
     
    if __name__ == '__main__':
        while True:
            import parent.one.one
            import parent.two
            del sys.modules['parent']
            del sys.modules['parent.one']
            del sys.modules['parent.one.one']
            del sys.modules['parent.two']

    效果图

    python打印经典故事从前有座山的几种写法

    3、第三种写法

    import sys
     
    if __name__ == '__main__':
        while True:
            import parent
            import parent.one
            import parent.one.one
            import parent.two
     
            del sys.modules['parent']
            del sys.modules['parent.one']
            del sys.modules['parent.one.one']
            del sys.modules['parent.two']

     效果图

    python打印经典故事从前有座山的几种写法

    总结

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。