[英]How can I get around declaring an unused variable in a for loop?
如果我有这样的列表理解(例如):
['' for x in myList]
有效地为列表中的每个元素创建一个具有空字符串的新列表,我从不使用x
。 有没有更简洁的写法,这样我就不必声明未使用的x
变量?
_
是 for 循环和元组赋值中被忽略成员的标准占位符名称,例如
['' for _ in myList]
[a+d for a, _, _, d, _ in fiveTuples]
顺便说一句,您的列表可以在没有列表理解的情况下编写(假设您想要制作一个不可变成员的列表,如字符串、整数等)。
[''] * len(myList)
不。正如禅宗所说:特殊情况不足以打破规则。 特殊情况是循环不使用被迭代的事物的项目,规则是有一个“目标”要解包。
但是,您可以使用_
作为变量名,这通常被理解为“有意未使用”(甚至 PyLint 等都知道并尊重这一点)。
事实证明,使用dummy*
(起始词是 dummy)作为变量名与_
具有相同的技巧。 _
是一个已知的标准,最好使用有意义的变量名。 所以你可以使用dummy
、 dummy1
、 dummy_anything
。 通过使用这些变量名, PyLint
不会抱怨。
在同一行的 for 循环后添加以下注释:
#pylint:禁用=未使用的变量
for i in range(100): #pylint: disable=unused-variable
如果您需要命名您的参数(例如,在编写不使用按名称引用的某些参数的模拟时),您可以添加此快捷方法:
def UnusedArgument(_):
pass
然后像这样使用它
def SomeMethod(name_should_remain):
UnusedArgument(name_should_remain)
生成器对象实际上并不使用变量。 所以像
list(('' for x in myList))
应该做的伎俩。 请注意,x 未定义为生成器理解之外的变量。
如果您更愿意为变量提供一个人类可读的名称,您也可以在变量名前加上_
。 例如,您可以使用_foo
、 _foo1
、 _anything
并且 PyLint 不会抱怨。 在 for 循环中,它会是这样的:
for _something in range(10):
do_something_else()
编辑:添加示例
一个详细的方法是:
newList = []
while len(newList) < len(mylist):
newList.append('')
您可以避免以这种方式声明已使用的变量。
您也可以将可变和不可变对象(如字典)附加到newList
。
对于像我这样的 Python 新手来说,'_'、'dummy' 的另一件事有点令人不安。
试试看,很简单:
# Use '_' instead of the variable
for _ in range(any_number):
do_somthing()
评论如何避免在 for 循环中声明未使用的变量? (评论大小用完了)
Python 为创建的对象维护相同的引用。 (不考虑可变性),例如,
In [1]: i = 1
In [2]: j = 1
In [3]: id(i)
Out[3]: 142671248
In [4]: id(j)
Out[4]: 142671248
你可以看到 i 和 j 都指向内存中的同一个对象。当我们改变一个不可变变量的值时会发生什么。
In [5]: j = j+1
In [6]: id(i)
Out[6]: 142671248
In [7]: id(j)
Out[7]: 142671236
您可以看到 j 现在开始指向一个新位置(存储 2 的位置),而 i 仍然指向存储 1 的位置。 在评估时,
j = j+1
该值从 142671248 中选取,计算(如果尚未缓存),然后放在新位置 142671236 中。 j 指向新位置。 简单来说,每次修改不可变变量时都会创建一个新副本。
可变对象在这方面几乎没有什么不同。 当指向的值
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 仍然指向同一个内存位置。 换句话说,可变变量的行为与变量指向的内存位置相同,而不是复制变量指向的值,就像在不可变变量的情况下一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.