python - 一般来说,在 python 代码中使用语句 "from module import *"是一个不好的做法吗?

标签 python python-3.x import

我一年前学习了一个 Python 教程,并且非常喜欢它,所以我想我应该尝试将 tkinter 小部件合并到一些东西中,因为,好,GUI。我见过的许多涵盖初学者 tkinter 的教程都以以下行开始代码:

from tkinter import *

这有令人信服的理由吗?我的意思是,为什么(或不)加载所有内容?

最佳答案

是的,这是一种非常糟糕的做法,原因有两个:

  1. 代码可读性
  2. 覆盖变量/函数等的风险

对于第 1 点: 让我们看一个例子:

from module1 import *
from module2 import *
from module3 import *

a = b + c - d

在这里,看到代码后,没有人会知道 bcd 实际属于哪个模块。

另一方面,如果你这样做:

#                   v  v  will know that these are from module1
from module1 import b, c   # way 1
import module2             # way 2

a = b + c - module2.d
#            ^ will know it is from module2

这对你来说更加干净,而且加入你团队的新人也会有更好的想法。

对于第2点:假设module1module2都有变量b。当我这样做时:

from module1 import *
from module2 import *

print b  # will print the value from module2

此处,module1 中的值丢失了。即使在 module1 中声明了 b 并且我已经编写了期望我的代码使用 module1.b 的代码,也很难调试为什么代码不起作用.

如果您在不同的模块中有相同的变量,并且您不想导入整个模块,您甚至可以这样做:

from module1 import b as mod1b
from module2 import b as mod2b

关于python - 一般来说,在 python 代码中使用语句 "from module import *"是一个不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40517214/

相关文章:

python - '==' 运算符在 Python 中无法正常工作

python - 如何将 asyncio 与其他操作系统线程同步?

python-3.x - PyTorch 值错误 : Target and input must have the same number of elements

python - 随机选择元组中的值

mysql - 如何使用 Windows 任务计划程序导入 CSV 或使用命令提示符计划任务

python - 无法为 Python 3 安装 Python 虚拟环境

python - 为什么 Django 的 send_mail 在测试时不起作用?

python - 检查数据框中是否有未命名的列,然后在 Pandas 中返回指示

visual-studio-2010 - JSON.NET 如何引用?

python初始化单独文件中的常量