将 import * 方法与 tkinter 一起使用是不好的做法吗?
Is it bad practice to use the import * method with tkinter?
根据我所阅读的内容和给出的原因,我知道 from foo import *
方法是不好的做法,因为变量分配的复杂性以及内存问题。但是,tkinter
模块会是这个规则的例外吗?
我认为在使用 GUI 时,人们可能希望使用来自相应模块的大部分 functions/methods,与 itertools
之类的东西相比,人们可能只需要访问一些模块(不需要使用 permutations
和 combinations
)。
独立于tkinter
是否是异常,是否有任何模块是?
from foo import *
有很多问题;它可以导入很多你没想到的东西,尤其是一些覆盖内置函数名称的东西或者你从其他模块导入的东西。更糟糕的是,您的程序现在可能可以运行,但是当 foo
模块的作者在模块中添加函数 bar
时,如果它期望 bar
是,您的代码可能会突然中断别的。
长模块的首选方法通常是使用短别名导入模块:
import tkinter as tk
然后使用例如tk.Button
。这是documentation.
的成语
Python 有一个 style guide,它明确说明了通配符导入的一种可接受用途:
Wildcard imports (from <module> import *
) should be avoided, as they make it unclear which names are present in the namespace, confusing both readers and many automated tools. There is one defensible use case for a wildcard import, which is to republish an internal interface as part of a public API (for example, overwriting a pure Python implementation of an interface with the definitions from an optional accelerator module and exactly which definitions will be overwritten isn't known in advance).
根据我所阅读的内容和给出的原因,我知道 from foo import *
方法是不好的做法,因为变量分配的复杂性以及内存问题。但是,tkinter
模块会是这个规则的例外吗?
我认为在使用 GUI 时,人们可能希望使用来自相应模块的大部分 functions/methods,与 itertools
之类的东西相比,人们可能只需要访问一些模块(不需要使用 permutations
和 combinations
)。
独立于tkinter
是否是异常,是否有任何模块是?
from foo import *
有很多问题;它可以导入很多你没想到的东西,尤其是一些覆盖内置函数名称的东西或者你从其他模块导入的东西。更糟糕的是,您的程序现在可能可以运行,但是当 foo
模块的作者在模块中添加函数 bar
时,如果它期望 bar
是,您的代码可能会突然中断别的。
长模块的首选方法通常是使用短别名导入模块:
import tkinter as tk
然后使用例如tk.Button
。这是documentation.
Python 有一个 style guide,它明确说明了通配符导入的一种可接受用途:
Wildcard imports (
from <module> import *
) should be avoided, as they make it unclear which names are present in the namespace, confusing both readers and many automated tools. There is one defensible use case for a wildcard import, which is to republish an internal interface as part of a public API (for example, overwriting a pure Python implementation of an interface with the definitions from an optional accelerator module and exactly which definitions will be overwritten isn't known in advance).