直接分配给globals()不好吗?

时间:2019-02-18 09:46:14

标签: 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] = []

我已经很久没有真正在SO上看到这种方法了,并且开始怀疑这是否是由于我不知道的某些缺点。

我用不同的关键字搜索过Google,并确实在second answer of this post中找到了一些用例,依此类推,但最终没有取得丰硕的成果。

任何见识将受到高度赞赏。谢谢!

1 个答案:

答案 0 :(得分:2)

简短答案:

是的,这是一个坏主意。

长答案:

我同意@Norrius,实际上,像这样分配的所有东西都不好,这是列表:

  1. exec错误

  2. globals错误

关于execeval的讨论:

Why is using 'eval' a bad practice?

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

这是@Nadia对eval的评论:

  

是的,使用eval是一种不好的做法。仅出于以下几个原因:

     
      
  1. 几乎总是有一种更好的方法
  2.   
  3. 非常危险和不安全
  4.   
  5. 使调试变得困难
  6.   
  7.   

但也请参见:

How do I create a variable number of variables?

说字典通常是最好的:

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