我目前正在使用jupyter筆記本,我想刪除僅在單元格內(nèi)使用的變量,這樣我就不會意外地在其他單元格中濫用這些變量。例如,我想刪除以下代碼中的變量myvar和循環(huán)變量:istart = 1stop = 2for i in range(start, stop): passmyvar = "A"# other statements# ...del i, myvar # Runs ok, and variables i and myvar are deleted and I won't accidentally use i or myvar in another jupyter notebook cell這工作得很好,但在某些情況下,某些變量實(shí)際上沒有定義。在下面的示例中,這會引發(fā)錯誤,因?yàn)閕未定義,因?yàn)檠h(huán)從未運(yùn)行。定義的變量myvar不會被刪除。start = 1stop = 1 # Now we have stop equal to 1for i in range(start, stop): passmyvar = "A"# other statements# ...del i, myvar # NameError, since i is not defined, and myvar is not deleted我已經(jīng)使用contextlib或try- except語句來避免錯誤,但仍然myvar沒有被刪除。import contextlibstart = 1stop = 1for i in range(start, stop): passmyvar = "A"# other statements# ...with contextlib.suppress(NameError): del i, myvar # Error suppressed, but myvar is not deleted唯一的解決方法是為每個要刪除的變量包裝 del 語句。import contextlibstart = 1stop = 1for i in range(start, stop): passmyvar = "A"# other statements# ...with contextlib.suppress(NameError): del iwith contextlib.suppress(NameError): del myvar# ...# It works but codes get messy if I need to delete many variables然而,這會使代碼變得混亂,尤其是當(dāng)您有很多變量需要刪除時(shí)(如果有 n 個變量則需要刪除 n 行)。有沒有辦法用一兩行代碼安全地刪除所有已定義和未定義的變量,并減少混亂的代碼?
3 回答

MMTTMM
TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個贊
安全地做一件事del x
:
globals().pop('x', None);
有很多方法可以做到這一點(diǎn),但它們需要超過 1 行代碼,我想這不是您想要的。請注意;
最后,這可以防止 Jupiter 打印該變量。

斯蒂芬大帝
TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個贊
您可以通過檢查變量是否在globals()or中來檢查變量是否確實(shí)存在,而不是抑制錯誤locals()。不過,您必須操作字符串名稱并形成一個del語句來使用 執(zhí)行它exec。
to_delete = ['i', 'myvar']
for _var in to_delete:
if _var in locals() or _var in globals():
exec(f'del {_var}')
添加回答
舉報(bào)
0/150
提交
取消