为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Python中安全地删除多个已定义和未定义的变量?

如何在Python中安全地删除多个已定义和未定义的变量?

冉冉说 2024-01-27 14:56:28
我目前正在使用jupyter笔记本,我想删除仅在单元格内使用的变量,这样我就不会意外地在其他单元格中滥用这些变量。例如,我想删除以下代码中的变量myvar和循环变量: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这工作得很好,但在某些情况下,某些变量实际上没有定义。在下面的示例中,这会引发错误,因为i未定义,因为循环从未运行。定义的变量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我已经使用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然而,这会使代码变得混乱,尤其是当您有很多变量需要删除时(如果有 n 个变量则需要删除 n 行)。有没有办法用一两行代码安全地删除所有已定义和未定义的变量,并减少混乱的代码?
查看完整描述

3 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

您可以使用“del”后面的逗号分隔列表,del var1, var2, var3, 来删除选定的变量。



查看完整回答
反对 回复 2024-01-27
?
MMTTMM

TA贡献1869条经验 获得超4个赞

安全地做一件事del x

globals().pop('x', None);

有很多方法可以做到这一点,但它们需要超过 1 行代码,我想这不是您想要的。请注意;最后,这可以防止 Jupiter 打印该变量。


查看完整回答
反对 回复 2024-01-27
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

您可以通过检查变量是否在globals()or中来检查变量是否确实存在,而不是抑制错误locals()。不过,您必须操作字符串名称并形成一个del语句来使用 执行它exec。


to_delete = ['i', 'myvar']

for _var in to_delete:

    if _var in locals() or _var in globals():

        exec(f'del {_var}')


查看完整回答
反对 回复 2024-01-27
  • 3 回答
  • 0 关注
  • 44 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信