python删除清理无关变量

说明:

  • 在python的循环中,可能会存在使用到上一次循环的值
  • 在进入下次循环之前,最好清理一下上一次的变量,便于调试

查看变量方式:

方式1(查看局部变量):

dir()

输出:

['In',
 'Out',
 '_',
 '__',
 '___',
 '__builtin__',
 '__builtins__',
 '__doc__',
 '__loader__',
 '__name__',
 '__package__',
 '__spec__',
 '_dh',
 '_i',
 '_i1',
 '_ih',
 '_ii',
 '_iii',
 '_oh',
 'exit',
 'get_ipython',
 'quit']

方式2(查看全局变量):

### 注:globals是字典
list(globals())

输出:

['__name__',
 '__doc__',
 '__package__',
 '__loader__',
 '__spec__',
 '__builtin__',
 '__builtins__',
 '_ih',
 '_oh',
 '_dh',
 'In',
 'Out',
 'get_ipython',
 'exit',
 'quit',
 '_',
 '__',
 '___',
 '_i',
 '_ii',
 '_iii',
 '_i1',
 '_1',
 '_i2']

可以看到,在全局范围内,两者的变量数量相等

len(dir()), len(globals())

(26, 26)

但是在函数内,两者数量就不相等了

def c():
    a = 1
    print(f'局部变量数量:{len(dir())}, 全局变量数量:{len(globals())}')
c()

局部变量数量:1, 全局变量数量:29

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def clear_variable():
    for key in list(globals()):
        if key not in system_variable:
            globals().pop(key)  # 删除局部变量

# 在进入循环前,把定义的变量备份
system_variable = dir()
# 添加自身
system_variable.append('system_variable')

a = 1
b = 2
print(f'循环之前的a,b:{(a, b)}')

clear_variable()  # 清理变量
try:
    print(a, b)
except:
    print('a,b已被清理')

print('\n进入循环...')
system_variable.append('i')  # 将循环所需变量也加入
for i in range(5):
    clear_variable()  # 清理变量
    try:
        print(a, b)
    except:
        print(f'循环{i}内a,b已被清理')
    # 再次定义变量
    a = i
    b = i * 2
    print(f'循环内的a,b:{a, b}\n')

输出:

循环之前的a,b:(1, 2)
a,b已被清理

进入循环...
循环0内a,b已被清理
循环内的a,b:(0, 0)

循环1内a,b已被清理
循环内的a,b:(1, 2)

循环2内a,b已被清理
循环内的a,b:(2, 4)

循环3内a,b已被清理
循环内的a,b:(3, 6)

循环4内a,b已被清理
循环内的a,b:(4, 8)

猜你喜欢

转载自blog.csdn.net/sinat_38682860/article/details/107693676