Python中的参数屏蔽

导读:本篇文章讲解 Python中的参数屏蔽,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

我们有时会不经意间写下如下代码:

def update_indices(indices):
    indices = [] # 像在更新indices前先将其置空
    for i in range(10):
        indices.append(i)

indices = [0, 1, 2]
update_indices(indices)
print(indices)

如上所示,我们有一个元素为indices的列表,想通过函数update_indices对其进行更新。不过有点特殊的是,我们想在update_indices中先将列表置空,然后再插入元素0, 1,..., 9。不过,代码运行的结果会出乎我们意料:

[0, 1, 2]

诶~并不是我们想象的[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],而是根本就没有变,变量indices还是和调用函数update_indices前一样。难道是因为函数参数传的拷贝吗?肯定不会,因为我们知道Python中对于列表统一传的是引用,那是什么导致我们对参数的修改失效了呢?
答案就是函数第一行的

indices = []

这一行看似是将函数参数indices置为空,其实是重新定义了一个函数中的局部变量indices,这个局部变量indices将函数的参数indices屏蔽掉了。而我们之后在函数中对indices的操作,其实都是在更改函数的局部变量,当然不能影响到做为函数参数的indices了。

解决这个问题的途径之一是:对于需要对参数重置的函数,我们最好直接传返回值,避免引起歧义:

def update_indices():
    indices = [] # 像在更新indices前先将其置空
    for i in range(10):
        indices.append(i)
    return indices

indices = [0, 1, 2]
indices = update_indices()
print(indices)

这样,结果就如我们预期了:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/12524.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!