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 相关文章推荐
Win7上搭建Cocos2d-x 3.1.1开发环境
Jul 03 Python
Python使用urllib模块的urlopen超时问题解决方法
Nov 08 Python
python re模块的高级用法详解
Jun 06 Python
python去除文件中重复的行实例
Jun 29 Python
Python图像处理之gif动态图的解析与合成操作详解
Dec 30 Python
在Python中使用Neo4j的方法
Mar 14 Python
不到40行代码用Python实现一个简单的推荐系统
May 10 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
Jun 04 Python
python 判断字符串中是否含有汉字或非汉字的实例
Jul 15 Python
python实现对列表中的元素进行倒序打印
Nov 23 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
May 08 Python
python+requests实现接口测试的完整步骤
Oct 27 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
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
Yii2.0实现生成二维码功能实例
2017/10/24 PHP
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
node在两个div之间移动,用ztree实现
2013/03/06 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
jquery选择器需要注意的问题
2014/11/26 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
记录一次开发微信网页分享的步骤
2019/05/07 Javascript
Python内置函数—vars的具体使用方法
2017/12/04 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
django将数组传递给前台模板的方法
2019/08/06 Python
python numpy中cumsum的用法详解
2019/10/17 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
Python查找不限层级Json数据中某个key或者value的路径方式
2020/02/27 Python
用python实现前向分词最大匹配算法的示例代码
2020/08/06 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
详解Sticky Footer 绝对底部的两种套路
2017/11/03 HTML / CSS
使用数据结构给女朋友写个Html5走迷宫游戏
2019/11/26 HTML / CSS
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
Fossil美国官网:化石手表、手袋、首饰及配饰
2019/02/17 全球购物
C面试题
2015/10/08 面试题
与C++相比,Java中的数组有什么不同
2014/03/25 面试题
2013英文求职信模板范文
2013/11/15 职场文书
大学生求职自我评价
2014/01/16 职场文书
工会主席岗位责任制
2014/02/11 职场文书
生日主持词
2014/03/20 职场文书
座谈会主持词
2014/03/20 职场文书
设计专业毕业生求职信
2014/06/25 职场文书
党员干部反四风对照检查材料思想汇报
2014/09/14 职场文书
2014年十一国庆节爱国演讲稿
2014/09/23 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
2016年教师节感言
2015/12/09 职场文书
纯html+css实现打字效果
2021/08/02 HTML / CSS