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中__init__和__new__的区别详解
Jul 09 Python
Python对list列表结构中的值进行去重的方法总结
May 07 Python
深入解析Python中的线程同步方法
Jun 14 Python
python利用微信公众号实现报警功能
Jun 10 Python
python实现linux下抓包并存库功能
Jul 18 Python
python通过tcp发送xml报文的方法
Dec 28 Python
Python实现计算文件MD5和SHA1的方法示例
Jun 11 Python
使用Tensorboard工具查看Loss损失率
Feb 15 Python
基于Python数据分析之pandas统计分析
Mar 03 Python
python中怎么表示空值
Jun 19 Python
五种Python转义表示法
Nov 27 Python
Python如何让字典保持有序排列
Apr 29 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设计模式 php实现备忘录模式(Memento)
2015/12/09 PHP
CodeIgniter扩展核心类实例详解
2016/01/20 PHP
php获取一定范围内取N个不重复的随机数
2016/05/28 PHP
JS判定是否原生方法
2013/07/22 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
DIV始终居中的js代码
2014/02/17 Javascript
javascript常见用法总结
2014/05/22 Javascript
Javascript学习指南
2014/12/01 Javascript
推荐一款jQuery插件模板
2015/01/09 Javascript
阿里巴巴技术文章分享 Javascript继承机制的实现
2016/01/14 Javascript
js获取时间精确到秒(年月日)
2016/03/16 Javascript
Bootstrap每天必学之轮播(Carousel)插件
2016/04/25 Javascript
微信小程序 location API接口详解及实例代码
2016/10/12 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
微信小程序实现人脸识别
2018/05/25 Javascript
vue弹窗插件实战代码
2018/09/08 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
详解JWT token心得与使用实例
2019/08/02 Javascript
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
[03:35]2018年度DOTA2最佳辅助位选手5号位-完美盛典
2018/12/17 DOTA
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
Python 字符串大小写转换的简单实例
2017/01/21 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
Python补齐字符串长度的实例
2018/11/15 Python
pytorch模型预测结果与ndarray互转方式
2020/01/15 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
小天鹅官方商城:LittleSwan
2017/06/16 全球购物
PUMA澳大利亚官方网站:德国运动品牌
2018/10/19 全球购物
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
四风问题专项整治工作情况报告
2014/10/28 职场文书
党员剖析材料范文
2014/12/18 职场文书
劳模事迹材料范文
2014/12/24 职场文书
2015教师个人年度工作总结
2015/10/23 职场文书
阳光体育运动标语口号
2015/12/26 职场文书
Python实现科学占卜 让视频自动打码
2022/04/09 Python