Python引用与目录结构


哎。差点找不到之前写的这篇笔记。

Python引用与目录结构

模块的概念

模块即单个.py文件。
模块名即文件名。

引用模块:

  1. 只在第一次引用时执行、且执行一次。

  2. 引用及使用方法:

    # 仅引模块
    import module
    m1.fun() ##使用其内变量/函数,必须使用"模块名."。否则报错
    
    # 引模块的特定变量/函数
    from module import fun
    fun() ##不必使用"模块名."
    

模块也是对象,具有一个内置属性__name__。该属性有两种取值:模块名__main__

  • 举例说明取值问题:当在A文件中引入B模块,A文件的__name__取值为__main__,B模块的__name__取值为模块名

  • __name__的使用场景:在import模块时,默认情况下,模块的所有语句都会被执行一次。如果希望模块中有某些语句,在import时避免执行,可以:

    if __name__ == 'main':
        ## 这里的语句将在import时避免执行
        ## 因为import时,条件为假
    

包的概念

包即一个文件夹。
包含了__init__.py和一系列.py文件。包名即文件夹名。

__init__.py是为了避免将文件夹名当作普通的字符串,其内容可以为空,一般用来进行包的某些初始化工作或者设置__all__,用以暴露该包的 API。

引用时搜索模块的顺序

  1. 当前文件所在目录
  2. 环境变量PYTHONPATH(包含python带的模块、自己安装的模块),可以通过bash或sys.path修改

python工程常用目录结构

  • 方式一

    -- src
        |-- mod1.py(被引用的模块)
        `-- test1.py(主程序)
    

    test1.py中直接import mod1即可。

  • 方式二:

    -- src
        |-- mod1.py(被引用的模块1)
        |-- pkg
        |	|-- __init__.py(必须有)
        |   `-- mod2.py(被引用的模块2)
        `-- test1.py(主程序)
    

    test1.pyimport mod1

    test1.pyfrom pkg import mod2

  • 方式三:

    -- src
        |-- mod1.py
        |-- pkg
        |	|-- __init__.py(必须有)
        |   `-- mod2.py
        |-- sub
        |   `-- test2.py
        `-- test1.py
    

    test1.pyimport mod1

    test1.pyfrom pkg import mod2

    test2.py

    import sys
    sys.path.append("..") ## 临时加入父目录
    ## 然后就可以正常地:
    import mod1
    from pkg import mod2
    
    

    test1.pyfrom pkg import mod2

参考资料

原文地址:https://www.cnblogs.com/hesse-summer/p/11151741.html