我如何解决在for循环中声明一个未使用的variables?

如果我有这样的列表理解(例如):

['' for x in myList] 

有效地为列表中的每个元素创build一个空string的新列表,我从不使用x 。 有没有更清晰的方式来写这个,所以我不必声明未使用的xvariables?

_是for循环和元组赋值中忽略成员的标准占位符名称,例如

 ['' for _ in myList] [a+d for a, _, _, d, _ in fiveTuples] 

顺便说一句,你的列表可以写没有列表理解(假设你想列出像string,整数等不可变的成员)。

 [''] * len(myList) 

正如禅所说的那样:特例不足以打破规则。 特殊情况是循环不使用被迭代的东西的项目,规则是有一个“目标”解压缩。

但是,您可以使用_作为variables名称,通常将其理解为“有意未使用”(即使PyLint等也知道并尊重这一点)。

事实certificate,使用dummy* (起始字是假的)作为variables名与_具有相同的技巧。 _是一个已知的标准,最好使用有意义的variables名称。 所以你可以使用dummydummy1dummy_anything 。 通过使用这些variables名PyLint不会抱怨。

生成器对象实际上并不使用这些variables。 所以像

 list(('' for x in myList)) 

应该做的伎俩。 请注意,x不是定义为生成器理解之外的variables。

如果你需要给你的参数命名(例如,在编写不使用名称引用的某些参数的模拟时),你可以添加这个快捷方法:

 def UnusedArgument(_): pass 

然后像这样使用它

 def SomeMethod(name_should_remain): UnusedArgument(name_should_remain) 

评论到如何解决在for循环中声明一个未使用的variables? (超出评论尺寸)

Python为创build的对象维护相同的引用。 (不pipe可变性),例如,

 In [1]: i = 1 In [2]: j = 1 In [3]: id(i) Out[3]: 142671248 In [4]: id(j) Out[4]: 142671248 

你可以看到i和j都指向内存中的同一个对象。当我们改变一个不可变variables的值时会发生什么。

 In [5]: j = j+1 In [6]: id(i) Out[6]: 142671248 In [7]: id(j) Out[7]: 142671236 

你可以看到j现在开始指向一个新的位置,(其中2被存储),并且我仍然指向存储1的位置。 评估时,

 j = j+1 

该值从142671248中挑选出来,计算(如果还没有被caching的话),并放在一个新的位置142671236. j被指向新的位置。 简单地说,每次修改一个不可变variables的新副本。

可变性

可变对象在这方面的作用不大。 当值指向的时候

 In [16]: a = [] In [17]: b = a In [18]: id(a) Out[18]: 3071546412L In [19]: id(b) Out[19]: 3071546412L 

a和b都指向相同的内存位置。

 In [20]: a.append(5) 

由a指向的内存位置被修改。

 In [21]: a Out[21]: [5] In [22]: b Out[22]: [5] In [23]: id(a) Out[23]: 3071546412L In [24]: id(b) Out[24]: 3071546412L 

a和b都指向相同的内存位置。 换句话说,variables所指向的同一个内存位置的可变variables行为,而不是像variables不可变variables那样拷贝variables指向的值。