如果我有这样的列表理解:
['' for x in myList]
有效地创建一个新列表,该列表中的每个元素都包含一个空字符串,我从不使用x
。有没有更干净的方式编写此代码,所以我不必声明未使用的x
变量?
Answers:
_
是for循环和元组分配中被忽略成员的标准占位符名称,例如
['' for _ in myList]
[a+d for a, _, _, d, _ in fiveTuples]
顺便说一句,您的列表可以在没有列表理解的情况下编写(假设您想创建不可变成员(如字符串,整数等)的列表)。
[''] * len(myList)
a=[[]]*4;a[0].append(5);print(a)
for
循环有关系吗?或者,如果for _ in range(...)
我想说里面_, var = f(x)
?这两个_
变量之间会混淆吗?
不。正如禅宗所说:特殊情况还不足以打破规则。特殊情况是循环不使用要迭代的事物的项,并且规则是存在要解压缩的“目标”。
但是,您可以将其_
用作变量名,通常将其理解为“有意未使用”(即使PyLint等也知道并尊重)。
C: 10,24: Invalid variable name "_" (invalid-name)
,除非你把它添加到good-names
你的.pylintrc
。
在同一行的for循环之后添加以下注释:
#pylint:disable =未使用变量
for i in range(100): #pylint: disable=unused-variable
试试看,很简单:
# 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的位置),而我仍然指向存储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仍指向相同的存储位置。换句话说,可变变量作用于变量所指向的相同存储位置,而不是像不变变量一样复制变量所指向的值。