📜  Python中未使用的局部变量

📅  最后修改于: 2022-05-13 01:54:24.272000             🧑  作者: Mango

Python中未使用的局部变量

在函数块或循环块内定义的变量在该块外失去作用域,称为该块的局部变量。局部变量不能在它定义的块之外访问。

例子:

Python3
# simple display function
def func(num):
  
  # local variable
    a = num
    print("The number is :", str(a))
  
  
func(10)
  
# generates error
print(a)


Python
# unused function
def my_func():
  
    # unused local variable
    _ = 5
      
    b=2
    c=b+10
    print(b,c)
  
  
for i in range(0, 5):
    print(i)


Python
# unused function
def my_func():
  
    # unused local variables
    a = 5
      
    b=2
    c=b+10
    print(b,c)
  
  
for i in range(0, 5):
    print(i)


Python3
# unused function
def my_func():
  
    # unused local variables
    _ = 5
      
    b=2
    c=b+10
    print(b,c)
  
  
for i in range(0, 5):
    print(i)


输出:

NameError: name 'a' is not defined

这里我们得到一个错误,因为'a'是函数func()的局部变量,它在该块之外失去了它的作用域。这里局部变量“a”用于保存传递的数字,并在打印语句中使用。但在某些情况下,局部变量 wl 是通过分配一些值来声明的,并留给任何进程使用。只是分配一些值并没有利用变量,必须读取其中的值并用于某些计算。

Python中的垃圾收集是自动的,当对象的引用计数为零时,该对象将被清除。我们都知道,某个代码块的局部变量在块之外失去了它的作用域。当对象的分配和对象的释放之间的差异超过某个阈值时,会自动调用垃圾收集。如果脚本是几行代码,那么内存管理就不是一个繁琐的过程。如果脚本很长,任务复杂,有很多未使用的局部变量,对代码执行时间和内存管理有相当大的影响。但是,内存管理问题非常少。

由于这些未使用的变量而产生的主要问题是它降低了可读性。当代码有数千行时,当需要另一个程序员使用它时,他可能需要花很长时间分析变量使用了什么,而实际上没有使用。人们可能会忘记声明的未使用变量,并可能在后面的部分中使用它,这可能会导致不希望的输出。删除未使用的局部变量始终是一个好习惯。

包含许多未使用的局部变量、未使用的导入或未使用的代码行的代码被认为是死代码。如果在某些情况下您不明确局部变量可能在代码中稍后发挥作用,则可以使用一些命名约定将其与其余变量区分开来。将变量命名为“虚拟”、“未使用”或任何表示该变量当前未在任何地方使用的名称。

如何抑制警告“未使用的变量”?

VScode、PyCharm、Eclipse、PyDev等一些编辑器有时会针对这些未使用的变量发出警告。警告不会中断程序执行。为了抑制警告,可以简单地单独用下划线(' _ ')命名变量。 Python将其视为未使用的变量并忽略它而不给出警告消息。

Python

# unused function
def my_func():
  
    # unused local variable
    _ = 5
      
    b=2
    c=b+10
    print(b,c)
  
  
for i in range(0, 5):
    print(i)
输出
0
1
2
3
4

秃鹫包

有一些包可用于在脚本中查找死代码。 Vulture就是这样的一个包。 vulture 包找到未使用的局部变量、未使用的导入和未使用的线部分并给出报告。要安装此软件包,请在 anaconda 提示符下键入以下命令。

现在输入一个Python脚本并使用.py 扩展名保存它。该文件应存储在 anaconda 提示中默认打开的目录中或某个特定位置。如果将文件存储在其他位置,则必须移动到该目录。现在考虑以下脚本作为示例。保存为trial1.py

Python

# unused function
def my_func():
  
    # unused local variables
    a = 5
      
    b=2
    c=b+10
    print(b,c)
  
  
for i in range(0, 5):
    print(i)
输出
0
1
2
3
4

将文件保存到所需目录后,然后在 anaconda 提示符下键入以下命令以查找死代码。

输出:

vulture 包理解下面解释的命名约定以避免警告。因此,当单独使用下划线作为变量名称时,警告消息将被抑制。考虑trial1.py ,其中未使用的局部变量的名称更改为下划线('_')。

蟒蛇3

# unused function
def my_func():
  
    # unused local variables
    _ = 5
      
    b=2
    c=b+10
    print(b,c)
  
  
for i in range(0, 5):
    print(i)