1. 程式人生 > >Python import過程解析

Python import過程解析

模組與包

模組:一個.py檔案 包:一個資料夾,裡面一定包括一個__init__.py檔案,可能包括子包和模組

import module

# module.py
a = 1
print('module.py')
# test.py
import module
print(module.a)
module.py
1

結論:import module 即執行模組裡的全部程式碼

from module import var/class

# module.py
a = 1
print(module.py)
class c:
	def __init__(self):
		print('class init'
)
# test.py
from module import a
print(a)
from module import c
c()
1
class init

結論:from module import var/class 就是從模組裡單獨引入一個變數/類,而不執行模組內其他語句

import package

# package/module.py
a = 1
print('module.py')
class c:
	def __init__(self):
		print('class init')
# package/__init__.py
print('__init__.py')
var_in_init =
2
# test.py
import package
print(package.var_in_init)
__init__.py
2

結論:import package 就相當於引入包內的__init__模組

from package import module

# package/module.py
a = 1
print('module.py')
class c:
	def __init__(self):
		print('class init')
# package/__init__.py
print('__init__.py')
var_in_init = 2
# test.py
from package import module print(module.a) module.c()
module.py
1
class init

結論:from package import module 相當於上面說的引入模組

from package(.sub_package).module import var/class

# package/module.py
a = 1
print('module.py')
class c:
	def __init__(self):
		print('class init')
# package/__init__.py
print('__init__.py')
var_in_init = 2
# test.py
from package.module import a
print(a)
from package.module import c
c()
1
class init

結論:from package(.sub_package).module import var/class 就相當於上面說的 from module import var/class

錯誤用法

經過測試,以下語句執行時會發生錯誤:

  • import package; print(package.module.var/class)