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

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]

Python:Python中的参数屏蔽的更多相关文章

  1. Python 函数中,参数是传值,还是传引用?

    在 C/C++ 中,传值和传引用是函数参数传递的两种方式,在Python中参数是如何传递的?回答这个问题前,不如先来看两段代码. 代码段1: def foo(arg): arg = 2 print(a ...

  2. python函数中的参数类型

    python函数中的参数 动态获取函数的参数 python的函数类型详解

  3. Python函数中的参数(二)

    当使用混合特定的参数匹配模型时,Python将会遵循以下有关顺序的法则: 1.在函数调用中,参数必须以这样的顺序出现:任何位置参数(Value).任何关键字参数(name = Value)和*sequ ...

  4. 在python函数中默认参数的一些坑

    一.默认参数 python为了简化函数的调用,提供了默认参数机制: 这样在调用pow函数时,就可以省略最后一个参数不写: 在定义有默认参数的函数时,需要注意以下: 必选参数必须在前面,默认参数在后: ...

  5. Python函数中的参数(一)

    函数传递参数时的简要关键点: 1.参数的传递是通过自动将对象赋值给本地变量名来实现的.函数参数在实际中只是Python赋值的一个实例.因为引用是以指针的形式实现的,所有的参数实际上都是通过指针进行传递 ...

  6. python函数中的参数(关键字参数,默认参数,位置参数,不定长参数)

    默认参数:定义函数的时候给定变量一个默认值. def num(age=1): 位置参数:调用函数的时候根据定义函数时的形参位置和实参位置进行引用. 关键字参数:如果定义的函数中含有关键字参数,调用函数 ...

  7. 嵌入Python系列 | 调用Python模块中无参数函数

    开发环境 Python版本:3.6.4 (32-bit) 编辑器:Visual Studio Code C++环境:Visual Studio 2013 需求说明 在用VS2013编写的Win32程序 ...

  8. 嵌入Python | 调用Python模块中无参数的函数

    开发环境 Python版本:3.6.4 (32-bit) 编辑器:Visual Studio Code C++环境:Visual Studio 2013 需求说明 在用VS2013编写的Win32程序 ...

  9. Python函数中的参数

    形参:形式参数 实参:实际参数 1.普通参数:严格按照顺序将实参赋值给形参. 2.默认参数:必须放置在参数列表的最后. 3.指定参数:将实参赋值给制定参数. 4.动态参数: *:默认将传入的参数,全部 ...

  10. python模块中requests参数stream

    PS:这个参数真没用过 当下载大的文件的时候,建议使用strea模式. 默认情况下是false,他会立即开始下载文件并存放到内存当中,倘若文件过大就会导致内存不足的情况. 当把get函数的stream ...

随机推荐

  1. OpenAtom OpenHarmony分论坛圆满举办,生态与产业发展迈向新征程

    7月27日,2022开放原子全球开源峰会OpenAtom OpenHarmony分论坛在北京成功举办.本次论坛以"万物互联,使能千行百业"为主题,OpenHarmony共建单位.生 ...

  2. Windows wsl2支持systemd

    背景 很多Linux发行版都是使用systemd来管理程序进程,但是在WSL中默认是用init来管理进程的. 为了符合长久的使用习惯,且省去不必要的学习成本,就在WSL的发行版(我这里安装的是Ubun ...

  3. MogDB 2.1.1 初始化参数概要说明

    MogDB 2.1.1 初始化参数概要说明 本文出处:https://www.modb.pro/db/394787 MogDB 数据库安装完成后,官方文档提供了刷新参数的脚本,推荐执行脚本来进行初始化 ...

  4. openGauss/MOGDB时间消耗相关视图

    openGauss/MOGDB 时间消耗相关视图 本文出处:https://www.modb.pro/db/388212 数据库版本 openGauss/MOGDB-2.1.1 一.显示当前用户在各个 ...

  5. 开发指导—利用CSS动画实现HarmonyOS动效(一)

     注:本文内容分享转载自HarmonyOS Developer官网文档 一. CSS语法参考 CSS是描述HML页面结构的样式语言.所有组件均存在系统默认样式,也可在页面CSS样式文件中对组件.页面自 ...

  6. mysql 必知必会整理—组合查询与全文搜索[九]

    前言 简单整理一下组合查询与全文搜索. 正文 什么是组合查询,就是我们常说的交并补集. 直接上例子. 举一个例子,假如需要价格小于等于5的所有物品的一个列表,而且还想包括供应商1001和1002生产的 ...

  7. cookie与localStorage与sessionStorage

    1. cookie 1_1: 简述 HTTP Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送(由服务器设置后返回给浏览器端)到用户浏览器并保存在本地的一小块数据.浏览器 ...

  8. Serverless 选型:深度解读 Serverless 架构及平台选择

    作者 | 悟鹏  阿里巴巴技术专家 导读:本文尝试以日常开发流程为起点,分析开发者在每个阶段要面对的问题,然后组合解决方案,提炼面向 Serverless 的开发模型,并与业界提出的 Serverle ...

  9. 最佳实践:使用阿里云CDN加速OSS访问

    简介: 用户直接访问OSS资源,访问速度会受到OSS的下行带宽以及Bucket地域的限制.如果通过CDN来访问OSS资源,带宽上限更高,并且可以将OSS的资源缓存至就近的CDN节点,通过CDN节点进行 ...

  10. [ML] 深度学习的数学基础: 函数/参数优化/矩阵运算/向量化/卷积运算/张量运算

      1. 函数与导数 函数是一种映射关系,将一个或多个自变量的取值映射为一个因变量的取值. 函数的导数表示函数在某一点处的变化率,即函数图像在该点的切线斜率. 导数可以用来求解函数的最值.优化问题.拟 ...