如何避免在列表推导中声明未使用的变量?

2025-03-19 08:57:00
admin
原创
8
摘要:问题描述:如果我有一个像这样的列表理解(例如):['' for x in myList] 有效地创建一个新列表,其中列表中的每个元素都有一个空字符串,我从不使用x。有没有更简洁的编写方法,这样我就不必声明未使用的x变量?解决方案 1:_是 for 循环和元组赋值中忽略成员的标准占位符名称,例如['' for ...

问题描述:

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

['' for x in myList]

有效地创建一个新列表,其中列表中的每个元素都有一个空字符串,我从不使用x。有没有更简洁的编写方法,这样我就不必声明未使用的x变量?


解决方案 1:

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

['' for _ in myList]

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

顺便说一句,您的列表可以在没有列表理解的情况下编写(假设您想创建一个不可变成员的列表,如字符串,整数等)。

[''] * len(myList)

解决方案 2:

不。正如禅宗所说:特殊情况不足以打破规则。特殊情况是循环不使用被迭代事物的项目,规则是有一个要解包的“目标”。

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

解决方案 3:

事实证明,使用dummy*(起始词是虚拟的) 作为变量名可以达到与 相同的效果__这是一个已知标准,最好使用有意义的变量名。因此,您可以使用dummydummy1dummy_anything。使用这些变量名PyLint不会出现任何问题。

解决方案 4:

在同一行的 for 循环后添加以下注释:

pylint:禁用=未使用的变量

for i in range(100): #pylint: disable=unused-variable

解决方案 5:

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

def UnusedArgument(_):
  pass

然后像这样使用它

def SomeMethod(name_should_remain):
  UnusedArgument(name_should_remain)

解决方案 6:

生成器对象实际上并不使用变量。因此

list(('' for x in myList))

应该可以解决问题。请注意,x 未定义为生成器理解之外的变量。

解决方案 7:

如果您希望为变量指定一个人类可读的名称,也可以在变量名称前面加上_。例如,您可以使用_foo_foo1_anythingPyLint 不会抱怨。在 for 循环中,它将是这样的:

for _something in range(10):
    do_something_else()

编辑:添加示例

解决方案 8:

详细的方式是:

newList = []
while len(newList) < len(mylist):
    newList.append('')

您避免通过这种方式声明已使用的变量。

您还可以将可变和不可变对象(如字典)附加到其中newList

对于像我这样的 Python 新手来说,另一件事是,'_','dummy' 有点令人不安。

解决方案 9:

尝试一下,很简单:

# Use '_' instead of the variable
for _ in range(any_number):
    do_somthing()

解决方案 10:

如何避免在 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 仍然指向相同的内存位置。换句话说,可变变量指向相同的内存位置,而不是像不可变变量那样复制变量指向的值。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1704  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1390  
  随着科技的飞速发展,人工智能(AI)与产品生命周期管理(PLM)的结合正逐渐成为智能化项目管理领域的新趋势。这一融合不仅为企业带来了前所未有的机遇,也对传统的项目管理模式提出了挑战。深入探讨AI与PLM结合在智能化项目管理中的应用、优势以及面临的挑战,对于企业把握未来发展方向具有重要意义。AI与PLM结合的基础AI技术...
plm办公软件   2  
  PLM(Product Lifecycle Management)项目管理软件旨在对产品从概念设计到退役的全生命周期进行有效管理,涵盖产品数据管理、流程管理、协同工作等多个方面。然而,在实际的实施过程中,往往会面临诸多难点,这些难点若不妥善解决,将严重影响软件实施的效果与企业的业务发展。深入剖析这些难点并制定切实可行的...
plm系统简介   2  
  引言在数字化转型的浪潮中,研发数据治理成为企业提升创新能力和竞争力的关键环节。传统的数据治理模式在应对复杂多变的研发数据时,往往显得力不从心。知识图谱技术的兴起,为研发数据治理带来了新的思路和方法。而产品生命周期管理(PLM)系统作为研发数据的重要管理平台,与知识图谱的结合,开创了研发数据治理的新范式。这种新范式不仅能...
plm管理系统   2  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用