Python定义函数时参数有默认值问题解决


Posted in Python onDecember 19, 2019

这篇文章主要介绍了Python定义函数时参数有默认值问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

在定义函数的时候,如果函数的参数有默认值,有两种类型的参数,一种是整数,字符串这种不可变类型,另一种是列表这种可变类型,对于第一种情况没有什么特殊的地方,但是对于可变类型,有一个微妙的小陷阱。

可变类型以及小陷阱:

def append_item(item, list1=[]):
  list1.append(item)
  return list1

print(append_item((1))) # [1]
print(append_item((2))) # [1, 2]
print(append_item((6))) # [1, 2, 6]
list2 = [6, 7]
print(append_item(1, list2)) # [6, 7, 1]
print(append_item(9, list2)) # [6, 7, 1,9]

问题:为什么会输出[1,2],[1,2,6],很明显使用默认参数的情况下,每调用一次append_item,都在之前得list1基础上添加元素。但是不使用默认值,就没有这种情况了,这是为什么呢?

原因:在创建上面的函数时,list1参数被设置为引用一个新的列表,之后,在仅使用第一个参数调用该函数(即第二个使用默认参数)时,默认的列表都将是函数本身创建时指定的那个列表,因此将不会再有新的列表得以创建。

我们所期待的是,在每次仅使用第一个参数调用该函数时,都会创建一个新的空列表,下面进行改动:

def append_item(item, list1=[]):
  if not list1:
    list1 = []
  list1.append(item)
  return list1

print(append_item((1))) # [1]
print(append_item((2))) # [2]
print(append_item((6))) # [6]
list2 = [6, 7]
print(append_item(1, list2)) # [6, 7, 1]
print(append_item(9, list2)) # [6, 7, 1,9]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
PHP webshell检查工具 python实现代码
Sep 15 Python
Python中处理unchecked未捕获异常实例
Jan 17 Python
从Python程序中访问Java类的简单示例
Apr 20 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
Aug 24 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
Sep 12 Python
Python 基础教程之闭包的使用方法
Sep 29 Python
TF-IDF算法解析与Python实现方法详解
Nov 16 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
Dec 19 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
Dec 30 Python
在Python 不同级目录之间模块的调用方法
Jan 19 Python
Python 抓取数据存储到Redis中的操作
Jul 16 Python
浅谈Python描述数据结构之KMP篇
Sep 06 Python
Python爬取腾讯视频评论的思路详解
Dec 19 #Python
使用Pandas将inf, nan转化成特定的值
Dec 19 #Python
pandas中read_csv的缺失值处理方式
Dec 19 #Python
python错误调试及单元文档测试过程解析
Dec 19 #Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
Dec 19 #Python
解决Python列表字符不区分大小写的问题
Dec 19 #Python
简单了解为什么python函数后有多个括号
Dec 19 #Python
You might like
yii2多图上传组件的使用教程
2018/05/10 PHP
javascript import css实例代码
2008/07/18 Javascript
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
2010/07/29 Javascript
qTip 基于JQuery的Tooltip插件[兼容性好]
2010/09/01 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
2012/02/11 Javascript
jquery自定义滚动条插件示例分享
2014/02/21 Javascript
js document.write()使用介绍
2014/02/21 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
2016/05/18 Javascript
JS实现图片上传预览功能
2016/11/21 Javascript
详解jQuery简单的表格应用
2016/12/16 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
2017/01/05 Javascript
vue的toast弹窗组件实例详解
2018/05/14 Javascript
Vue CLI3 开启gzip压缩文件的方式
2018/09/30 Javascript
VUE中setTimeout和setInterval自动销毁案例
2020/09/07 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
Python中正则表达式详解
2017/05/17 Python
python循环定时中断执行某一段程序的实例
2019/06/29 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
2019/08/17 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
简单了解Python write writelines区别
2020/02/27 Python
keras.layer.input()用法说明
2020/06/16 Python
玛蒂尔达简服装:Matilda Jane Clothing
2019/02/13 全球购物
2019史上最全Database工程师题库
2015/12/06 面试题
标准毕业生自荐信范文
2013/11/04 职场文书
大学本科毕业生求职信范文
2013/12/18 职场文书
工作交流会欢迎词
2014/01/12 职场文书
高中军训感想300字
2014/03/04 职场文书
高中军训感言600字
2014/03/11 职场文书
大学生活自我评价
2014/04/09 职场文书
redis 查看所有的key方式
2021/05/07 Redis
vue.js Router中嵌套路由的实用示例
2021/06/27 Vue.js
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server
2021年国漫热度排行前十,完美世界上榜,第四是美国动画作品
2022/03/18 国漫
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android
win sever 2022如何占用操作主机角色
2022/06/25 Servers