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']
# 更多關於dir、globals等說明,參考鏈接:https://blog.csdn.net/weixin_38682750/article/details/80365025?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight
# 可以看到,在全局范圍內,兩者的變量數量相等
len(dir()), len(globals())
(26, 26)
# 但是在函數內,兩者數量就不相等了
def c():
    a = 1
    print(f'局部變量數量:{len(dir())}, 全局變量數量:{len(globals())}')
c()
局部變量數量:1, 全局變量數量:29
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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM