【问题标题】:In general, is it a bad practice to use the statement "from module import *" in my python code? [duplicate]一般来说,在我的 python 代码中使用“from module import *”语句是一种不好的做法吗? [复制]
【发布时间】:2017-03-23 20:49:59
【问题描述】:

一年前我学习了一个 python 教程并且很喜欢它,所以我想我会尝试将 tkinter 小部件合并到事物中,因为,好吧,GUI。我看到的许多涵盖初学者 tkinter 的教程都以以下代码开头:

from tkinter import *

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

【问题讨论】:

  • 这取决于但它确实污染了本地命名空间。如果您想为tkinter 使用更短的命名空间名称,您可以使用import tkinter as tk。然后你的代码看起来像tk.<...>

标签: python python-3.x import


【解决方案1】:

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

  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

【讨论】:

    猜你喜欢
    • 2017-05-19
    • 2015-08-23
    • 2012-07-27
    • 2020-04-23
    • 1970-01-01
    • 2011-12-22
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多