[英]Unexpected behavior with loading a module in Python
據我了解, from module import *
表示from module import *
中的所有內容都將在本地可用。
在我的代碼中,我發現:
from tkinter import *
和
from tkinter import filedialog
回顧過去,我認為可以刪除最后一行,但是它不可用:
NameError: name 'filedialog' is not defined.
我想念什么?
據我了解,Tkinter是一個程序包(這意味着它包含其他模塊)。 從Tkinter導入*僅會為您提供默認模塊。
從文檔中:
6.4.1。 從包導入*
現在,當用戶從sound.effects import *書寫時會發生什么? 理想情況下,希望這種方式能夠進入文件系統,找到包中存在哪些子模塊,然后將其全部導入。 這可能會花費很長時間,並且導入子模塊可能會產生有害的副作用,這些副作用只有在明確導入子模塊時才會發生。
唯一的解決方案是讓程序包作者提供程序包的顯式索引。 import語句使用以下約定:如果包的init .py代碼定義了一個名為all的列表,則將其視為遇到從包import *時應導入的模塊名稱的列表。 發行新版本的軟件包時,軟件包作者有責任使此列表保持最新。 如果軟件包作者沒有看到從軟件包中導入*的用途,他們可能還會決定不支持它。 例如,文件sounds / effects / init .py可能包含以下代碼:
請閱讀以下帖子,以獲取對您問題的另一種答案。 文件對話框,tkinter和打開文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.