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 socket C/S结构的聊天室应用实现
Nov 30 Python
如何使用python爬虫爬取要登陆的网站
Jul 12 Python
Python求平面内点到直线距离的实现
Jan 19 Python
将自己的数据集制作成TFRecord格式教程
Feb 17 Python
Python数组并集交集补集代码实例
Feb 18 Python
Python读取excel文件中带公式的值的实现
Apr 17 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
Apr 20 Python
python thrift 实现 单端口多服务的过程
Jun 08 Python
django rest framework 过滤时间操作
Jul 12 Python
Python SMTP发送电子邮件的示例
Sep 23 Python
python获取命令行参数实例方法讲解
Nov 02 Python
OpenCV全景图像拼接的实现示例
Jun 05 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
图解上海144收音机
2021/03/02 无线电
php GUID生成函数和类
2014/03/10 PHP
使用PHP Socket 编程模拟Http post和get请求
2014/11/25 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
2014/12/22 PHP
thinkPHP5使用Rabc实现权限管理
2019/08/28 PHP
PHP实现一个限制实例化次数的类示例
2019/09/16 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
2019/10/17 PHP
用roll.js实现的图片自动滚动+鼠标触动的特效
2007/03/18 Javascript
jquery.jstree 增加节点的双击事件代码
2010/07/27 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
2014/01/09 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
基于JavaScript实现轮播图原理及示例
2020/04/10 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
2017/07/31 Javascript
vue单页应用加百度统计代码(亲测有效)
2018/01/31 Javascript
koa+mongoose实现简单增删改查接口的示例代码
2019/05/13 Javascript
vue动态绑定class的几种常用方式小结
2019/05/21 Javascript
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
2014/06/09 Python
python实现根据用户输入从电影网站获取影片信息的方法
2015/04/07 Python
详解Python中for循环的使用
2015/04/14 Python
Python中获取对象信息的方法
2015/04/27 Python
在Linux下使用Python的matplotlib绘制数据图的教程
2015/06/11 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
python2.7实现爬虫网页数据
2018/05/25 Python
Python闭包函数定义与用法分析
2018/07/20 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
关于pytorch中网络loss传播和参数更新的理解
2019/08/20 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
CAT鞋加拿大官网:CAT Footwear加拿大
2020/08/05 全球购物
幼儿园教师备课制度
2014/01/12 职场文书
技校个人求职信范文
2014/01/25 职场文书
交警正风肃纪剖析材料
2014/10/29 职场文书
初中运动会闭幕词范本3篇
2019/12/09 职场文书