关于Python的import你要知道的种种
转载请注明出处MTwz,谢谢_ (:з」∠)_
1. 常见用法
- 引入模块
import <模块名>
,例如import os
- 引入模块并起别名
import <模块名> as <模块别名>
,例如import numpy as np
- 引入部分函数、变量或类
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
这里主要有三种情况:
-
父目录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
-
子目录py文件引用父目录上的py文件(例如
test_import_2.py
要引用父目录文件夹下的test_import_1.py
):需要将该父目录添加到当前文件的sys.path
中# 此时的test_import_2.py文件中有: import sys sys.path.append("..") #相对路径或绝对路径
-
处于同一层级的两个目录A和B,A下的py文件引用B的py文件(例如
module_2
文件夹下的test_import_3.py
要引用module_1
文件夹下的test_import_2.py
):这种情况其实就是前两种情况的叠加,我们可以首先将父目录添加到test_import_3.py
的sys.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♪(・ω・)ノ