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模拟登录12306的方法
Dec 30 Python
Django中实现点击图片链接强制直接下载的方法
May 14 Python
深入理解Python中各种方法的运作原理
Jun 15 Python
python3 实现对图片进行局部切割的方法
Dec 05 Python
利用python-pypcap抓取带VLAN标签的数据包方法
Jul 23 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
Jun 01 Python
Python嵌入C/C++进行开发详解
Jun 09 Python
使用keras实现Precise, Recall, F1-socre方式
Jun 15 Python
基于python实现图片转字符画代码实例
Sep 04 Python
pycharm中选中一个单词替换所有重复单词的实现方法
Nov 17 Python
python 基于opencv操作摄像头
Dec 24 Python
解决python存数据库速度太慢的问题
Apr 23 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
mysql_num_rows VS COUNT 效率问题分析
2011/04/23 PHP
php动态添加url查询参数的方法
2015/04/14 PHP
PHPCMS V9 添加二级导航的思路详解
2016/10/20 PHP
js 父窗口控制子窗口的行为-打开,关闭,重定位,回复
2010/04/20 Javascript
javascript forEach通用循环遍历方法
2010/10/11 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
2014/08/30 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
解析AngularJS中get请求URL出现的跨域问题
2016/12/01 Javascript
原生JS下拉加载插件分享
2016/12/26 Javascript
nodejs利用ajax实现网页无刷新上传图片实例代码
2017/06/06 NodeJs
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
vue 检测用户上传图片宽高的方法
2020/02/06 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
在vue中axios设置timeout超时的操作
2020/09/04 Javascript
[01:25]DOTA2自定义游戏灵园鬼域等你踏足
2015/10/30 DOTA
Python实现网络端口转发和重定向的方法
2016/09/19 Python
python实现对求解最长回文子串的动态规划算法
2018/06/02 Python
Python subprocess库的使用详解
2018/10/26 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
2019/02/26 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
pandas-resample按时间聚合实例
2019/12/27 Python
安装完Python包然后找不到模块的解决步骤
2020/02/13 Python
使用Python实现音频双通道分离
2020/12/25 Python
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
澳大利亚领先的女性运动服品牌:Lorna Jane
2020/06/19 全球购物
实习护士自我鉴定
2013/10/13 职场文书
表演方阵解说词
2014/02/08 职场文书
小学生家长评语大全
2014/02/10 职场文书
诚信承诺书范文
2014/03/27 职场文书
一年级小学生评语大全
2014/12/25 职场文书
仓库保管员岗位职责
2015/02/09 职场文书
确保工程质量承诺书
2015/04/29 职场文书
四大名著读书笔记
2015/06/25 职场文书
2016年领导干部正风肃纪心得体会
2015/10/09 职场文书
Go中的条件语句Switch示例详解
2021/08/23 Golang