pyhton之路 模組篇

2021-08-22 11:39:58 字數 2418 閱讀 1162

模組迴圈匯入問題

在乙個資料夾內建立三個.py檔案,m1.py 和 m2.py 和 run.py,前兩者作為被匯入模組,run.py為執行檔案 

#執行檔案內容

import m1

#m1模組內容

print('正在匯入m1...')

from m2 import y

x = 1

#m2模組內容

print('正在匯入m2...')

from m1 import x

y = 2

#執行run,結果:

正在匯入m1...

正在匯入m2...

importerror: cannot import name 'y'

過程分析:

1首先要明確的是:誰是執行檔案,誰是被匯入模組

2.首次匯入模組發生的三件事

執行run.py時,申請了run.py的命名空間,首次匯入m1時,申請m1這個被匯入模組的命名空間,開始執行m1模組內的**,執行到from m2 import y時開始申請m2的命名空間,執行m2的模組體**,再執行到from m1 import x 時,此時記憶體中已經存在m1的命名空間(雖然m1才執行到from m2 import y這裡),python就直接去m1模組的命名空間中去尋找x,並試圖在自己的命名空間內用乙個變數名x指向m1中x的記憶體位址,但是此時的m1中還未存在x與1這個值的繫結關係

解決方法:

1.匯入模組語句放在名字定義之後

#執行檔案內容

import m1

print(m1.y)

#m1模組內容

print('正在匯入m1...')

x = 1

from m2 import y

#m2模組內容

print('正在匯入m2...')

y = 2

from m1 import x

#執行run,結果:

正在匯入m1...

正在匯入m2...

2

2:匯入模組就是為了使用的,如果是在函式內使用被匯入模組,完全可以將匯入語句放在函式內

#執行檔案內容

import m1

m1.f1()

#m1模組內容

print('正在匯入m1...')

def f1():

from m2 import y,f2

print('m1.f1--->y',y)

f2()

x=1#m2模組內容

print('正在匯入m2...')

def f2():

from m1 import x

print('m2.f2--->x',x)

y = 'm2'

#執行run,結果:

正在匯入m1...

正在匯入m2...

m1.f1--->y m2

m2.f2--->x m1

這是利用了,函式在定義階段只檢測語法,而不執行**的原理

模組的搜尋路徑原則:記憶體中已經載入過的---->內建----->sys.path(注意:sys.path的第乙個路徑為執行檔案的所在當前資料夾)

值得注意的是:所有被匯入模組的搜素路徑都是以執行檔案的sys.path為準

例如我們在建立dir0資料夾,在其內建立dir資料夾以及與其同一級的run.py執行檔案,在dir資料夾下建立兩個同一級別的m1.py,m2.py

#這些檔案run.py的內容

from dir import m3

#m1模組的內容

def f1():

print('m1.f1')

#m2模組的內容

import m1

m1.f1()

#執行結果

modulenotfounderror: no module named 'm1'

當我們將import m1 改為from dir import m1就正確了

模組的絕對匯入和相對匯入:

絕對匯入:以執行檔案的sys.path為起點匯入

優點:執行檔案和被匯入模組都可以使用       缺點:匯入麻煩

相對匯入:參照當前所在檔案的資料夾為起點查詢  

所以:上個模組搜尋路徑的例子,  m3模組中的**可以改寫為:

from .m1 import f1

f1()

python朝聖之路 模組篇

模組 module 模組是乙個包含有一系列變數 函式 類等組成的程式組 模組是乙個檔案,模組檔案通常以.py結尾。作用 1.讓一些相關的變數 函式 類等有邏輯的組織在一起,是邏輯結構更加清晰。2.模組中的變數 函式和類可提供其他模組作用。模組的分類 1.內建模組 builtins 在直譯器的內部可以...

pyhton模組與包

1.什麼是模組 模組就是工具包,要想使用這個工具包中的工具 就好比函式 就需要匯入這個模組。模組是非常簡單的python檔案,單個python檔案就是乙個模組,兩個檔案就是兩個模組。2.模組的匯入 模組匯入的集中方式 1 import module1,module2 當直譯器遇到import語句,如...

pyhton中常用內建模組

在pyhton中,除了上篇寫到的os和os.path模組外,還有幾個是我們在python中常用到的內建模組。一.sys模組 1.sys.ar 在python指令碼傳參使用 2.sys.exit 系統退出 3.sys.getdefaultencoding 獲取系統預設編碼 4.sys.getfiles...