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 相关文章推荐
wxPython使用系统剪切板的方法
Jun 16 Python
python实现图书管理系统
Mar 12 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
Feb 20 Python
详解【python】str与json类型转换
Apr 29 Python
Python中__repr__和__str__区别详解
Nov 07 Python
sklearn+python:线性回归案例
Feb 24 Python
python 数据库查询返回list或tuple实例
May 15 Python
Django:使用filter的pk进行多值查询操作
Jul 15 Python
Django用户认证系统如何实现自定义
Nov 12 Python
Python应用自动化部署工具Fabric原理及使用解析
Nov 30 Python
Python中相见恨晚的技巧
Apr 13 Python
python爬虫之爬取笔趣阁小说
Apr 22 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创建多级目录代码
2008/06/05 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
用jQuery简化JavaScript开发分析
2009/02/19 Javascript
斜45度寻路实现函数
2009/08/20 Javascript
jQuery 白痴级入门教程
2009/11/11 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
Node.js中创建和管理外部进程详解
2014/08/16 Javascript
原生JS实现美图瀑布流布局赏析
2015/09/07 Javascript
简单介绍jsonp 使用小结
2016/01/27 Javascript
AngularJS 中文API参考手册
2016/07/28 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
2016/11/04 Javascript
浅谈javascript中执行环境(作用域)与作用域链
2016/12/08 Javascript
JS中去掉array中重复元素的方法
2017/05/26 Javascript
使用OPENLAYERS3实现点选的方法
2020/09/24 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
2020/11/06 Javascript
pandas多级分组实现排序的方法
2018/04/20 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
python中append实例用法总结
2019/07/30 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
Python爬取腾讯视频评论的思路详解
2019/12/19 Python
python 爬虫如何正确的使用cookie
2020/10/27 Python
html5 canvas-2.用canvas制作一个猜字母的小游戏
2013/01/07 HTML / CSS
美国顶级户外凉鞋品牌:Chacos
2017/03/27 全球购物
SmartBuyGlasses美国官网:太阳眼镜和眼镜
2017/08/20 全球购物
新加坡最佳婴儿用品店:Mamahood.com.sg
2018/08/26 全球购物
高级人员简历的自我评价分享
2013/11/03 职场文书
校园招聘策划书
2014/01/09 职场文书
安全资金保障制度
2014/01/23 职场文书
教师求职自荐信
2014/03/09 职场文书
优秀团员事迹材料1000字
2014/08/20 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
vue+element ui实现锚点定位
2021/06/29 Vue.js
手把手教你导入Go语言第三方库
2021/08/04 Golang