Python import常见用法 & 父目录引用子目录py文件 & 子目录引用父目录py文件

关于Python的import你要知道的种种

转载请注明出处MTwz,谢谢_ (:з」∠)_

1. 常见用法

  1. 引入模块import <模块名>,例如import os
  2. 引入模块并起别名import <模块名> as <模块别名>,例如import numpy as np
  3. 引入部分函数、变量或类from <模块> import <要引入的>,例如from sys import path

2. 一个项目中,不同路径关系下py文件如何互相引用?

我写了一个测试程序,对应的工程目录结构如下:

$ tree
.
├── module_1
│   ├── test_import_2.py
│   └── test.py
├── module_2
│   ├── test_import_3.py
│   └── test.py
├── test_import_0.py
└── test_import_1.py

2 directories, 6 files

这里主要有三种情况:

  1. 父目录py文件引用子目录上的py文件(例如test_import_1.py要引用module_1文件夹下的test_import_2.py):需要将被引文件所在目录升级为包(Package),即在被引文件的目录下创建__init__.py

    # 此时的module1目录下的目录树为:
    ├── module_1
    │   ├── __init__.py
    │   ├── test_import_2.py
    │   └── test.py
    
  2. 子目录py文件引用父目录上的py文件(例如test_import_2.py要引用父目录文件夹下的test_import_1.py):需要将该父目录添加到当前文件的sys.path

    # 此时的test_import_2.py文件中有:
    import sys
    sys.path.append("..") #相对路径或绝对路径
    
  3. 处于同一层级的两个目录A和B,A下的py文件引用B的py文件(例如module_2文件夹下的test_import_3.py要引用module_1文件夹下的test_import_2.py):这种情况其实就是前两种情况的叠加,我们可以首先将父目录添加到test_import_3.pysys.path

    # in test_import_3.py
    import sys
    sys.path.append("..")
    

    然后再将module_1提升为包,即在module_1文件夹下新建__init__.py

    # module目录下的目录树
    ├── module_1
    │   ├── __init__.py
    │   ├── test_import_2.py
    │   └── test.py
    

    具体的引用方式为

    import module_1.test_import_2
    

转载请注明出处MTwz,谢谢_ (:з」∠)_

3. 不同引用方式下,所引用的函数或变量是否是相同的?

是相同的,测试样例:test_import_0.py引用test_import_1.py文件中的函数及变量

test_import_0.py文件

import test_import_1 # 引用方式1
from test_import_1 import test_function # 引用方式2
from test_import_1 import test_var      # 引用方式2

if __name__ == '__main__':
    if test_function == test_import_1.test_function:
        print("same function")
    else:
        print("different function")
    if test_var == test_import_1.test_var:
        print("same var")
    else:
        print("different var")

test_import_1.py文件

def test_function():
    return "123"

test_var = "123"

结果:

same function
same var

若仍存在问题,可在下方留言_(:з」∠)_
转载请注明出处MTwz,谢谢_ (:з」∠)_
如果您觉得阅读后有启发,可否点个 呢~Thanks♪(・ω・)ノ

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值