假如有兩個模組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...