Python 对globals()的直接赋值是否错误?

Python 对globals()的直接赋值是否错误?,python,python-3.x,Python,Python 3.x,分配多个变量(或简单实例化)时,可以执行以下操作: list_0, list_1, list_2 = [], [], [] 这将使三个变量的列表为空 假设,如果要制作1000个空列表: list_0, ... , list_999 = [], ... , [] 如果使用顶部方法,这看起来相当乏味 在这种情况下,我的问题是,可以使用globals(),例如: for i in range(1000): globals()["list_%s" % i] = [] 我已经很多次没有见过这

分配多个变量(或简单实例化)时,可以执行以下操作:

list_0, list_1, list_2 = [], [], []
这将使三个变量的列表为空

假设,如果要制作1000个空列表:

list_0, ... , list_999 = [], ... , []
如果使用顶部方法,这看起来相当乏味

在这种情况下,我的问题是,可以使用
globals()
,例如:

for i in range(1000):
    globals()["list_%s" % i] = []
我已经很多次没有见过这种方法了,我开始怀疑这是否是因为我不知道的一些缺点

我在谷歌上搜索了不同的关键词,并在中找到了一些用例,等等,但最终没有结果

如有任何见解,将不胜感激。谢谢

简短答复: 是的,这是个坏主意

长答覆: 我同意@Norrius,事实上,所有像这样分配的东西都不好,下面是列表:

  • exec
    坏的

  • globals
    坏的

  • 关于
    exec
    eval
    的讨论:

    另外,如您所见,有一个答案是使用
    setattr

    下面是@Nadia对
    eval
    的评论:

    是的,使用eval是一种不好的做法。仅举几个原因:

  • 几乎总是有更好的方法来做到这一点
  • 非常危险和不安全
  • 使调试变得困难
  • 但同时,请参见以下内容:

    说字典是最好的,而且通常是最好的:

    >>> d = {'a':[1,2,3]}
    >>> d['b']=[4,5,6]
    >>> d
    {'a': [1, 2, 3], 'b': [4, 5, 6]}
    >>> 
    

    是的,在大多数情况下这是一个坏主意,只需列出一个列表就可以了。动态变量名是非常糟糕的。