Python的import详解

Python的import详解

1、import包导入有四种情况

(1)本级目录内导入
(2)上级目录导入下级目录
(3)下级目录导入上级目录
(4)同级目录之间导入

python中import 和 from import 的区别:

import 语句导入整个模块内的所有成员(包括变量、函数、类等)。
from import 只导入本语句指定的成员。
from xxx import * 导入模块时,与 import 等价。
from xxx import * 导入模块时,默认为导入模块中所有不以下划线开头的程序单元。

2、目录结构

.
├── pack1
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-37.pyc
│   │   ├── run1.cpython-37.pyc
│   │   └── run2.cpython-37.pyc
│   ├── run1.py
│   ├── run2.py
│   ├── samedir.py
│   └── upper.py
├── pack2
│   ├── __init__.py
│   ├── parallel.py
│   ├── __pycache__
│   │   ├── __init__.cpython-37.pyc
│   │   └── run3.cpython-37.pyc
│   ├── run3.py
│   └── run4.py
├── __pycache__
│   └── root_pack.cpython-37.pyc
├── root_pack.py
└── root.py

3、本级目录内导入

直接import本级目录的文件即可。samedir.py导入run1.py 。
run1.py如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

def run1():
   print ("I'm running package 1")

def test_run1():
   print ("I'm running package test_run1")

本级目录调用,samedir.py

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import run1 
run1.run1()
run1.test_run1()

import run1 as r1
r1.run1()
r1.test_run1()

执行结果:

# python samedir.py 
I'm running package 1
I'm running package test_run1
I'm running package 1
I'm running package test_run1

import run1 as r1
简化输入,用r1调用两个函数

4、上级目录导入下级目录

从上级目录导入下级目录的文件,需要下级新建一个的__init__.py文件 ,导入时首先执行init文件。

通常__init__.py 文件为空,但是还可以为它增加其他的功能。导入一个包时,实际上是导入了它的__init__.py文件。这样我们可以在__init__.py文件中批量导入程序所需要的模块,而不再需要一个一个的导入。

import sys
sys.path.append("..") 

是为了可以从下级导入上级目录。

if name == ‘main’:
是为了测试导入的执行效果

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
sys.path.append("..") 

if __name__ == '__main__':
    print ('main is running')
else:
    print ('package 1 init')

root_pack.py

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 导入 Python 包
import pack1.run1 as t1
import pack2.run3 as t3

t1.run1()
t1.test_run1()

t3.run3()
t3.test_run3()

执行效果如下:

# python root.py
package 1 init
package 2 init
I'm running package 1
I'm running package test_run1
I'm running package 3
I'm running package test_run3

说明:

package 1 init
package 2 init
是导入时,首先执行的是init.py文件,对于同一个包,多次导入,只执行一次init.py 。

5、下级目录导入上级目录

从pack1目录下upper导入上级目录的root_pack.py .

root_pack.py :

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
def root_pack():
   print ("I'm running package root")

def root_run():
   print ("I'm running package root_run")

需要导入上级目录下模块,使用sys.path ,增加路径。  
upper.py :

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys 
sys.path.append("..") 
 
import root_pack

root_pack.root_pack()
root_pack.root_run()

执行效果:

# python upper.py 
I'm running package root
I'm running package root_run

6、同级目录之间导入

parallel.py 在pack2目录下,调用pack1目录下的程序。
parallel.py也需要增加上级目录

import sys 
sys.path.append("..") 

parallel.py如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys 
sys.path.append("..") 
 
from pack1 import run1
from pack1 import run2 as r2

run1.run1()

r2.run2()
r2.test_run2()

执行结果:

# python parallel.py 
package 1 init
I'm running package 1
I'm running package 2
I'm running package test_run2

猜你喜欢

转载自blog.csdn.net/qq_39065491/article/details/131436489