1. 程式人生 > >16 模塊深入

16 模塊深入

優先 兩種 image 模塊 info 文件夾 圖片 print 執行

模塊的循環導入問題

run.py執行文件

# import m1 # 第一次導入


# 驗證解決方案一:
‘‘‘
正在導入m1
正在導入m2
‘‘‘
# print(m1.x)
# print(m1.y)

# 驗證解決方案二:
import m1 # 第一次導入

‘‘‘
正在導入m1
‘‘‘

# print(m1.x)
# print(m1.f1)
m1.f1()
‘‘‘
正在導入m2
m1.f1---->y:m2
m2.f2--->x:m1
‘‘‘


m1.py模塊文件

# 錯誤示範
‘‘‘
print(‘正在導入m1‘)
from m2 import y #第一次導入m2

x=‘m1‘
‘‘‘

# 解決方案一: 把循環導入的語句放到名字定義的後面

# print(‘正在導入m1‘)
#
# x=‘m1‘
#
# from m2 import y #第一次導入m2

# 解決方案二: 將循環導入語句放到函數內

print(‘正在導入m1‘)

def f1():
from m2 import y,f2 #第一次導入m2
print(‘m1.f1---->y: ‘,y)
f2()
x=‘m1‘

m2.py模塊文件

# 錯誤示範
‘‘‘
print(‘正在導入m2‘)
from m1 import x

y=‘m2‘
‘‘‘
# 解決方案一: 把循環導入的語句放到名字定義的後面

# print(‘正在導入m2‘)
#
# y=‘m2‘
#
# from m1 import x

# 解決方案二: 將循環導入語句放到函數內
print(‘正在導入m2‘)

def f2():
from m1 import x
print(‘m2.f2--->x: ‘,x)

y=‘m2‘

區分python文件的兩種用途

run.py執行文件

import m1

def f1():
print(‘f1‘)

def f2():
print(‘f2‘)

m1.py模塊文件

#當文件被執行時__name__==‘__main__‘
#當文件被導入時__name__==‘模塊名‘
# print(__name__)

# if __name__ == ‘__main__‘:
# f1()

# f2()

模塊的搜索路徑

# 模塊搜索路徑的優先級
# 1. 內存中已經加載過的
# 2. 內置模塊
# 3. sys.path # 第一個值是當前執行文件所在的文件夾

絕對導入與相對導入

# 絕對導入: 以執行文件的sys.path為起始點開始導入,稱之為絕對導入
# 優點: 執行文件與被導入的模塊中都可以使用
# 缺點: 所有導入都是以sys.path為起始點,導入麻煩

# 相對導入: 參照當前所在文件的文件夾為起始開始查找,稱之為相對導入
# 符號: .代表當前所在文件的文件加,..代表上一級文件夾,...代表上一級的上一級文件夾
# 優點: 導入更加簡單
# 缺點: 只能在被導入的模塊中使用,不能在執行文件中用

軟件開發的目錄規範

技術分享圖片

16 模塊深入