python 人腦模擬分析模組之間相互呼叫

2021-08-16 17:33:13 字數 1327 閱讀 2184

假如有兩個模組a.py和b.py
# a.py

import b

def x():

print('x')

b.y()

# b.py
import a

def y():

print('y')

if __name__=="__main__":

a.x()

執行b.py可以正常輸出結果y,x

而執行a.py會報錯:

traceback (most recent call last):

file "f:\ensp topo\python**\a.py", line 3, in

import b

file "f:\ensp topo\python**\b.py", line 3, in

import a

file "f:\ensp topo\python**\a.py", line 8, in

b.y()

attributeerror: module 'b' has no attribute 'y'

人腦模擬程式執行b.py過程分析:

1、執行import a,進入a.py程式,a模組先import b,又進入b模組,此時b模組不會執行import a(python特殊防無限遞迴呼叫機制),會執行if __name__=="__main__"

2、此時引發執行此語句是因為import b,所以不等,不執行a.(x),到此,b模組執行完畢。(也就意味著a模組完全匯入了b模組)

3、因此程式又進入了a模組,執行b.y(),(輸出y)此時a模組執行完畢(也就意味著b模組完全匯入了a模組)  

4、因此程式又進入了b模組,執行a.(x),(輸出x),因此最終結果為y,x

人腦模擬程式執行a.py過程 :

1、執行import b,進入b.py程式,b模組先import a,又進入a模組,此時a模組不會執行import b,直接執行b.y(),但是這個時候b模組還未完全匯入(匯入b模組過程時只是執行到了import a,又進入了a模組,並未匯入def y():),所以報錯找不到y方法/屬性。

執行b.py的圖譜:#遇到import就要進入其他程式。

python模組分析之typing(三)

型別檢查,防止執行時出現引數和返回值型別不符合。作為開發文件附加說明,方便使用者呼叫時傳入和返回引數型別。該模組加入後並不會影響程式的執行,不會報正式的錯誤,只有提醒。注意 typing模組只有在python3.5以上的版本中才可以使用,pycharm目前支援typing檢查from typing ...

python 終端模擬模組 pexpect

簡單介紹 pexpect是 don libes 的 expect 語言的乙個 python 實現,是乙個用來啟動子程式,並使用正規表示式對程式輸出做出特定響應,以此實現與其自動互動的 python 模組。它可以用來實現與ssh,ftp,telnet等程式的自動互動,參考官方文件 安裝均可以使用pip...

python使用requests模組模擬登陸知乎

text input 請輸入驗證碼 def zhihulogin 構建乙個session物件,可以儲存cookie 相當於urllib中用的cookiejar sess requests.session 請求報頭 首先獲取登陸頁面,找到需要post的資料,同時記錄當前頁的cookie值 html s...