从我读过的内容和给出的理由,我知道from foo import *
方法是不好的做法,因为变量赋值的复杂性以及内存问题。但是,tkinter
模块是否会成为此规则的例外?
我认为在使用GUI时,可能会考虑使用相应模块中的大多数函数/方法,与itertools
之类的东西相比,可能只需要访问少数几个模块(一个不需要使用permutations
和 combinations
)。
独立于tkinter
是否为异常,是否有任何模块?
答案 0 :(得分:5)
from foo import *
存在许多问题;它可以导入许多你没想到的东西,尤其是覆盖内置函数名称或从其他模块导入的东西。更糟糕的是,您的程序现在可能正常工作,但是在更高版本中,foo
模块的作者在模块中添加了函数bar
,如果预期bar
为import tkinter as tk
,您的代码可能会突然中断别的什么。
长模块的首选方法通常是使用短别名导入模块:
tk.Button
然后使用例如{{1}}。这是documentation使用的习语。
答案 1 :(得分:4)
Python有一个style guide,它明确说明了通配符导入的一个可接受用途:
应避免使用通配符导入(
from <module> import *
),因为它们不清楚命名空间中存在哪些名称,这会使读者和许多自动化工具混淆。通配符导入有一个可防御的用例,即将内部接口重新发布为公共API的一部分(例如,使用可选加速器模块中的定义覆盖接口的纯Python实现,以及确切的定义将是被覆盖的事先不知道。