Python基础教程 什么都不做&使用 del 删除

5.7 三人行

结束本章前,大致介绍一下另外三条语句: pass、 del和exec。

5.7.1 什么都不做

有时候什么都不用做。这种情况不多,但一旦遇到,知道可使用pass语句大有裨益。

>>> pass

>>>

这里什么都没有发生。

那么为何需要一条什么都不做的语句呢?在你编写代码时,可将其用作占位符。例如,你可能编写了一条if语句并想尝试运行它,但其中缺少一个代码块,如下所示:

if name == 'Ralph Auldus Melish':

print('Welcome!')

elif name == 'Enid':

# 还未完成……

elif name == 'Bill Gates':

print('Access Denied')

这些代码不能运行,因为在Python中代码块不能为空。要修复这个问题,只需在中间的代码块中添加一条pass语句即可。

if name == 'Ralph Auldus Melish':

print('Welcome!')

elif name == 'Enid':

# 还未完成……

pass

elif name == 'Bill Gates':

print('Access Denied')

5.7.2 使用 del 删除

对于你不再使用的对象, Python通常会将其删除(因为没有任何变量或数据结构成员指向它)。

>>> scoundrel = {'age': 42, 'first name': 'Robin', 'last name': 'of Locksley'}

>>> robin = scoundrel

>>> scoundrel

{'age': 42, 'first name': 'Robin', 'last name': 'of Locksley'}

>>> robin

{'age': 42, 'first name': 'Robin', 'last name': 'of Locksley'}

>>> scoundrel = None

>>> robin

{'age': 42, 'first name': 'Robin', 'last name': 'of Locksley'}

>>> robin = None

最初, robin和scoundrel指向同一个字典,因此将None赋给scoundrel后,依然可以通过robin来访问这个字典。但将robin也设置为None之后,这个字典就漂浮在计算机内存中,没有任何名称与之相关联,再也无法获取或使用它了。因此,智慧无穷的Python解释器直接将其删除。这被称为垃圾收集。请注意,在前面的代码中,也可将其他任何值(而不是None)赋给两个变量,这

样字典也将消失。

另一种办法是使用del语句。(第2章和第4章使用这条语句来删除序列和字典,还记得吗?)这不仅会删除到对象的引用,还会删除名称本身。

>>> x = 1

>>> del x

>>> x

Traceback (most recent call last):

File "

", line 1, in ?

x

NameError: name 'x' is not defined

这看似简单,但有时不太好理解。例如,在下面的示例中, x和y指向同一个列表:

>>> x = ["Hello", "world"]

>>> y = x

>>> y[1] = "Python"

>>> x

['Hello', 'Python']

你可能认为通过删除x,也将删除y,但情况并非如此。

>>> del x

>>> y

['Hello', 'Python']

这是为什么呢? x和y指向同一个列表,但删除x对y没有任何影响,因为你只删除名称x,而没有删除列表本身(值)。事实上,在Python中,根本就没有办法删除值,而且你也不需要这样做,因为对于你不再使用的值,Python解释器会立即将其删除。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180923G0IMMK00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券