• 模块中的反射


    # moudle2.py
    import
    sys print(__name__) print(sys.modules["__main__"]) # 获取当前文件的内存地址 print(sys.modules[__name__]) # 在本文件中__name__ 就是__main__ # __main__ # <module '__main__' from 'F:/python/12_27/day11/module2.py'> # <module '__main__' from 'F:/python/12_27/day11/module2.py'> def func(): print("aaa") getattr(sys.modules[__name__],"func")() # __name__ 表示是写在哪个文件理,找的就是哪个文件的命名空间

    # 反射模块中的内容module2.py

    import module2
    # module2
    # <module '__main__' from 'F:/python/12_27/day11/反射本模块中的类容module2.py'>  __main__ 永远获取的是当前文件地址
    # <module 'module2' from 'F:\python\12_27\day11\module2.py'>
    
    # AttributeError: module '__main__' has no attribute 'func'  报错,因为此时__main__表示的是当前文件

     pyc编译文件和重新加载模块.py

    # 当一个文件作为一个脚本导入的时候,就会在这个文件所在目录生成一个 pycache 文件,为了之后导入这个文件的时候直接读这个编译好的pyc文件就好l
    # 可以节省一些导入时候的时间
    # 如果修改了这个文件,那么会比较生成pyc文件的时间和原文件最后一次修改时间,如果在生成pyc时间在之前,那么pyc文件会更细
    
    import aa
    import time
    import importlib
    aa.login()
    time.sleep(7)
    importlib.reload(aa)
    aa.login()
    
    # 在import后修改模块,程序是感知不到的。reload()这种方式可以强制让程序加载一次,但不推荐使用

    aa.py

    def login():
        print("hel world")

    18.48模块的循环导入.py

    # 在模块的导入中 不要产生模块的循环引用问题
    # 如果循环导入了,就会发现写在模块中的方法却找不到
    
    
    import clas
    def funcb():print("bbbbb")
    
    clas.funca()
    import student
    def funa():print("aaaa")
    
    student.funcb()
    # AttributeError: module 'student' has no attribute 'funcb'
    # 这里import student  去找到这个文件,执行import clas 又回来执行,发现 import student 但模块不会循环导入,所以向下走,将funa存入命名空间,执行funcb()
    # 但是之前只执行到了import clas就回来了,所以会找不到这个变量名
  • 相关阅读:
    HTML CSS 特殊字符表
    vscode代码统计——Vscode counter
    js数组方法整理
    CSS-界面滚动时不显示滚动条
    Vue Loader 作用域CSS(scoped)——/deep/ 深入组件选择器
    PHP模板引擎,Smarty定义
    mysql触发器trigger 实例详解
    mysql关于数据库表的水平拆分和垂直拆分
    关于数据库表的水平拆分和垂直拆分
    使用Merge存储引擎实现MySQL分表
  • 原文地址:https://www.cnblogs.com/yfjly/p/10609616.html
Copyright © 2020-2023  润新知