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调用新浪微博API项目实践
Jul 28 Python
Python学习之Anaconda的使用与配置方法
Jan 04 Python
Django的HttpRequest和HttpResponse对象详解
Jan 26 Python
Pandas 对Dataframe结构排序的实现方法
Apr 10 Python
python中ASCII码和字符的转换方法
Jul 09 Python
在PyCharm中三步完成PyPy解释器的配置的方法
Oct 29 Python
分享Python切分字符串的一个不错方法
Dec 14 Python
Python数据可视化库seaborn的使用总结
Jan 15 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
May 13 Python
Python3 main函数使用sys.argv传入多个参数的实现
Dec 25 Python
Python使用configparser读取ini配置文件
May 25 Python
Django缓存Cache使用详解
Nov 30 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和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
php eval函数一句话木马代码
2015/05/21 PHP
PHP实现过滤掉非汉字字符只保留中文字符
2015/06/04 PHP
PHP中addcslashes与stripcslashes函数用法分析
2016/01/07 PHP
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
基于jQuery的一个扩展form序列化到json对象
2010/12/09 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
使用jquery mobile做幻灯播放效果实现步骤
2013/01/04 Javascript
Javascript执行效率全面总结
2013/11/04 Javascript
JavaScript跨域方法汇总
2014/10/16 Javascript
基于jquery实现省市联动效果
2015/11/23 Javascript
jQuery实现的简单拖拽功能示例
2016/09/13 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
javascript实现移动端触屏拖拽功能
2020/07/29 Javascript
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
安装python时MySQLdb报错的问题描述及解决方法
2018/03/20 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
用python简单实现mysql数据同步到ElasticSearch的教程
2018/05/30 Python
python文件转为exe文件的方法及用法详解
2019/07/08 Python
下载官网python并安装的步骤详解
2019/10/12 Python
python sorted方法和列表使用解析
2019/11/18 Python
wxPython绘图模块wxPyPlot实现数据可视化
2019/11/19 Python
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
玛蒂尔达简服装:Matilda Jane Clothing
2019/02/13 全球购物
abstract class和interface有什么区别
2013/08/04 面试题
六一儿童节活动策划方案
2014/01/27 职场文书
水电工岗位职责
2014/02/12 职场文书
大学活动总结模板
2014/07/10 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
处级干部考察材料
2014/12/24 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
JavaScript实现复选框全选功能
2021/04/11 Javascript
Linux系统下安装PHP7.3版本
2021/06/26 PHP
详解Vue slot插槽
2021/11/20 Vue.js
美元符号 $
2022/02/17 杂记