Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
总的来说,使用这种说法是一种不好的做法吗;从模块导入*;在我的python代码中?_Python_Python 3.x_Import - Fatal编程技术网

总的来说,使用这种说法是一种不好的做法吗;从模块导入*;在我的python代码中?

总的来说,使用这种说法是一种不好的做法吗;从模块导入*;在我的python代码中?,python,python-3.x,import,Python,Python 3.x,Import,一年前我参加了一个python教程,我非常喜欢它,所以我想我应该尝试将tkinter小部件合并到东西中,因为,嗯,GUI。我所看到的许多教程都以一行开头介绍初学者tkinter: 从tkinter导入* 有没有令人信服的理由?我的意思是,为什么(或不)加载所有内容?是的,这是一种非常糟糕的做法,原因有两个: 代码可读性 覆盖变量/函数等的风险 对于点1: 让我们看一个例子: from module1 import * from module2 import * from module3 imp

一年前我参加了一个python教程,我非常喜欢它,所以我想我应该尝试将tkinter小部件合并到东西中,因为,嗯,GUI。我所看到的许多教程都以一行开头介绍初学者tkinter:

从tkinter导入*



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

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

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

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

    from module1 import *
    from module2 import *
    from module3 import *
    
    a = b + c - d
    
    在这里,看到代码后,没有人会知道实际属于哪个模块
    b
    c
    d

    另一方面,如果您喜欢:

    #                   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:假设
    module1
    module2
    都有变量作为
    b
    。当我这样做时:

    from module1 import *
    from module2 import *
    
    print b  # will print the value from module2
    
    此处,
    模块1
    的值丢失。即使
    module1
    中声明了
    b
    ,并且我编写的代码希望我的代码使用
    module1.b
    ,也很难调试代码为什么不工作

    如果在不同的模块中有相同的变量,并且不想导入整个模块,您甚至可以执行以下操作:

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

    这取决于具体情况,但它确实污染了本地名称空间。如果希望
    tkinter
    的命名空间名称更短,可以
    将tkinter作为tk导入。然后您的代码看起来像
    tk.