zoukankan      html  css  js  c++  java
  • python __path__ 变量

    今天在读django源码的时候遇到了一个问题!它就是__path__这个系统变量

    一、__path__变更初见

      由__path__这个变量的名字就知道,这个是一个系统变量,不是用户自定义的变量,于是第一想法就是看一下这个变量的值是多少?

      创建一个叫/tmp/studio/main.py的脚本、内容如下:

    #!/usr/local/python/bin/python3
    
    if __name__=="__main__":
        print(__path__)

      执行结果如下:

    [root@workstudio tmp]# ./main.py 
    Traceback (most recent call last):
      File "./main.py", line 4, in <module>
        print(__path__)
    NameError: name '__path__' is not defined
    
    # 这说明python在作用域中并没有找到 __path__这个变量

    二、事实上__path__变量是python包里的一个变量,它的值就是包所位于的操作系统路径

      1  构建工作目录

    mkdir /tmp/studio
    mkdir /tmp/studio/tools/
    touch /tmp/studio/main.py
    touch /tmp/studio/tools/__init__.py

      2  用tree 看/tmp/studio

    [root@workstudio tmp]# tree /tmp/studio/
    /tmp/studio/
    ├── main.py
    └── tools
        └── __init__.py
    
    1 directory, 2 files

      3  /tmp/studio/tools/__init__.py的内容如下

    [root@workstudio tools]# cat /tmp/studio/tools/__init__.py 
    print(__path__)

      4  /tmp/studio/main.py的内容如下

    [root@workstudio tools]# cat /tmp/studio/main.py 
    #!/usr/local/python/bin/python
    
    import tools
    
    if __name__=="__main__":
        pass

      5  运行/tmp/studio/main.py

    [root@workstudio tools]# python3 /tmp/studio/main.py 
    ['/tmp/studio/tools'] -- 看到了吧,这个就是由/tmp/studio/tools/__init__.py中print出来的

    三、总结:

      python中的__path__变量它的值就是它所在包的系统目录、也就是说不同包中的__path__这个变量的值是不同的

    ----

    交流学习

  • 相关阅读:
    spring自动装配的歧义性
    spring装配bean
    spring面向切面编程理解
    spring入门实现打印Hello Spring!
    spring依赖注入的理解
    java中数组和集合的区别
    java中final关键字的作用
    什么是视图?
    什么是事务?
    sql多表查询的总结
  • 原文地址:https://www.cnblogs.com/JiangLe/p/7054659.html
Copyright © 2011-2022 走看看