code block怎样导入整个文件夹_一文就能get!带你了解Python模块导入的真相,拿走不谢...
前兩天和大家探討了Python的模塊化編程,相信大家已經對于Python的模塊定義啦、模塊的加載啦都了如指掌啦,今天呢,咱們就一起來聊聊Python模塊導入的本質吧,相信大家看完這次的東東,就真的能夠抓住Python模塊加載也就是所謂的導入模塊的“精髓”了哦!
好啦,那下面我們就開始吧!
首先呢,就直接開聊模塊導入的“精髓”吧
還是老慣例哦,為了能夠讓大家更為直觀的理解,咱們還是舉個“栗子”吧:
接下來呢,咱們就用上面咱們定義滴這個模塊(mymodule.py)來測試一下吧,那怎么測試呢?當然是再寫個測試程序啦,請見如下哦:
注意一下哦,這里俺寫的這個mymodule_test.py程序是放在與定義的模塊mymodule.py在同一個路徑下了哦,當然啦,不再同一路徑下也是可以加載滴,具體加載方法看俺前兩天寫的東東哦,在這就不再說啦哈!
下面咱們就運行一下這個測試程序吧,運行結果如下圖所示哦:
看到輸出結果了嘛,相信大家對于這些輸出能夠看懂,咱們來解釋一下吧,首先呢,當程序導入mymodule模塊之后呢,這個模塊中的輸出語句就會在import時自動執行哦,當然啦,這個程序中還包含一個與模塊相同名字的變量哦,這個變量的類型就是module哦。
到這相信大家已經看明白了哦,導入模塊import mymodule的本質和精髓就是哈:將模塊mymodule中滴全部代碼加載到內存并且執行哦,然后呢就是將整個模塊的內容都賦值給與模塊同名滴變量哦,這個變量滴類型就是module,因此呢,這個模塊中定義的所有所有東東都相當于這個模塊mymodule對象滴成員哦。
好啦,為了能夠使大家再深入了解一下,咱們再換一個方式吧,就是直接導入模塊的單元東東試試哦,請看下圖哦:
這個測試程序mymodule_test_again.py又會輸出啥呢?咱們就運行一下看看吧,請看下圖哦:
這和上面的又有什么區別呢?不要著急,咱們來分析一下吧,如果你使用from…import只導入模塊中的部分成員的話,這個模塊中的輸出語句也會在import時自動執行哦,這說明啥呢?這說明哈,Python很聰明,就是這樣Python它也依然會加載并且執行這個模塊中滴代碼哦。
因此呢,你使用from mymodule import name, hi導入模塊中成員的本質就是:將mymodule.py中的全部代碼都加載到內存并執行哦,然后就只導入你所指定滴成員哦,并不會將整個模塊導入哦,所以你就會看到上面運行后最后一句“NameError: name ‘mymodule’ is not defined”的錯誤提示啦!
下面再深入說一下吧,其實呢,你在導入模塊之后,就可以在模塊文件所在滴目錄下看一個名字為“__pycache__”的文件夾,打開這個文件夾,就可以看到Python為每個模塊都生成了一個*.cpython-38.pyc文件哦,當然啦名字中的“38”和你電腦上裝的Python解釋器的版本有關哦,俺滴電腦上裝的是Python 3.8版本,所以顯示“38”啦,好尷尬哈,比如上面咱們寫的模塊是mymodule,所以呀,它生成的文件名就是“mymodule.cpython-38.pyc”,不信就看下圖啦:
那到這可能有朋友問了:這個文件有毛用呢?它還真有一點“毛”用,這也是Python的聰明之處,Python自己知道自己是解釋型語言,運行性能沒有優勢,所以呀,這個文件其實就是Python為模塊編譯生成滴字節碼哦,這個可是有用滴,它可以提升這個模塊的運行效率哦!
可能有朋友對它好奇,那咱們就打開瞧一瞧吧,打開如下哦:
看到什么啦?是不是一堆亂碼,沒關系啦,不用分析,只知道它是用來干啥滴,有什么用就可以啦,里面到底是些什么東東,沒啥用哦!
好啦,今天咱們就聊到這吧,相信大家看到這,已經對Python模塊導入的“真相”有所深入了解啦,俺也相信你已經抓住它滴“精髓”啦,下次再見哦![再見]
敬請關注“品位集結號”,為您帶來意外的小收獲![比心][握手][比心]
總結
以上是生活随笔為你收集整理的code block怎样导入整个文件夹_一文就能get!带你了解Python模块导入的真相,拿走不谢...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10年老电脑如何提速_告别求人!3个方法
- 下一篇: websocket python爬虫_p