`del`在一个包上有一种记忆的作用。

9 浏览
0 Comments

`del`在一个包上有一种记忆的作用。

del似乎有一些让我困惑的记忆。看下面的例子:

In [1]: import math
In [2]: math.cos(0)
Out[2]: 1.0
In [3]: del math.cos
In [4]: math.cos(0)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
 in ()
----> 1 math.cos(0)
AttributeError: module 'math' has no attribute 'cos'

好吧。让我们看看如果我们删除整个math包会发生什么:

In [5]: del math
In [6]: math.cos(0)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
 in ()
----> 1 math.cos(0)
NameError: name 'math' is not defined

所以现在math本身消失了,这是预料中的。

现在让我们再次导入math:

In [7]: import math
In [8]: math.cos(0)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
 in ()
----> 1 math.cos(0)
AttributeError: module 'math' has no attribute 'cos'

所以无论如何,交互式Python在我们删除整个math包并重新导入它之后仍然记得math.cos被删除的事实。

Python把这个知识保存在哪里?我们可以访问它吗?我们可以改变它吗?

0