簡體   English   中英

在Python中加載模塊時出現意外行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM