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 相关文章推荐
python发腾讯微博代码分享
Jan 10 Python
python实现根据主机名字获得所有ip地址的方法
Jun 28 Python
浅析Python的Django框架中的Memcached
Jul 23 Python
Python的Asyncore异步Socket模块及实现端口转发的例子
Jun 14 Python
你眼中的Python大牛 应该都有这份书单
Oct 31 Python
Python的UTC时间转换讲解
Feb 26 Python
django 消息框架 message使用详解
Jul 22 Python
Python二元赋值实用技巧解析
Oct 25 Python
Python:二维列表下标互换方式(矩阵转置)
Dec 02 Python
opencv-python 读取图像并转换颜色空间实例
Dec 09 Python
关于python中的xpath解析定位
Mar 06 Python
总结Python使用过程中的bug
Jun 18 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
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
php中session退出登陆问题
2014/02/27 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
JavaScript 仿关机效果的图片层
2008/12/26 Javascript
JavaScript类和继承 prototype属性
2010/09/03 Javascript
EasyUI中的tree用法介绍
2011/11/01 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
js 获取后台的字段 改变 checkbox的被选中的状态 代码
2013/06/05 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
javascript内存管理详细解析
2013/11/11 Javascript
使用JQuery实现Ctrl+Enter提交表单的方法
2015/10/22 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
nodejs修复ipa处理过的png图片
2016/02/17 NodeJs
获取url中用&隔开的参数实例(分享)
2017/05/28 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
详解vuex的简单使用
2018/03/12 Javascript
jQuery实现鼠标移到某个对象时弹出显示层功能
2018/08/23 jQuery
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
2018/08/27 Javascript
JavaScript JMap类定义与使用方法示例
2019/01/22 Javascript
详解ES6 export default 和 import语句中的解构赋值
2019/05/28 Javascript
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
vue递归获取父元素的元素实例
2020/08/07 Javascript
理解Python中的类与实例
2015/04/27 Python
Python星号*与**用法分析
2018/02/02 Python
python保存文件方法小结
2018/07/27 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
2020/02/25 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
共产党员承诺书
2014/03/25 职场文书
股权收购意向书
2014/04/01 职场文书
社区优秀志愿者先进事迹
2014/05/09 职场文书
领导走群众路线整改措施思想汇报
2014/10/12 职场文书
五一劳动节活动总结
2015/02/09 职场文书
统计员岗位职责范本
2015/04/14 职场文书
Mysql 8.x 创建用户以及授予权限的操作记录
2022/04/18 MySQL