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中条件判断语句的简单使用方法
Aug 21 Python
插入排序_Python与PHP的实现版(推荐)
May 11 Python
Python编程实现粒子群算法(PSO)详解
Nov 13 Python
python实现逐个读取txt字符并修改
Dec 24 Python
Python中PyQt5/PySide2的按钮控件使用实例
Aug 17 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
Sep 25 Python
Python爬取豆瓣视频信息代码实例
Nov 16 Python
python实现批量处理将图片粘贴到另一张图片上并保存
Dec 12 Python
Pytorch实现基于CharRNN的文本分类与生成示例
Jan 08 Python
pytorch GAN生成对抗网络实例
Jan 10 Python
使用tensorflow DataSet实现高效加载变长文本输入
Jan 20 Python
MoviePy常用剪辑类及Python视频剪辑自动化
Dec 18 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
盘点被央视点名过的日本动画电影 一部比一部强
2020/03/08 日漫
用PHP编程语言开发动态WAP页面
2006/10/09 PHP
laravel批量生成假数据的方法
2019/10/09 PHP
jquery隐藏标签和显示标签的实例
2013/11/11 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
2015/01/13 Javascript
jQuery中noConflict()用法实例分析
2015/02/08 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
2015/02/28 Javascript
JavaScript之cookie技术详解
2016/11/18 Javascript
学习Vue组件实例
2018/04/28 Javascript
webpack HappyPack实战详解
2019/10/08 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
[01:08:30]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第一场 2月28日
2021/03/11 DOTA
python 转换 Javascript %u 字符串为python unicode的代码
2016/09/06 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
2018/02/08 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
2018/06/13 Python
Python实现FTP文件传输的实例
2019/07/07 Python
Python爬虫:将headers请求头字符串转为字典的方法
2019/08/21 Python
python中的逆序遍历实例
2019/12/25 Python
pytorch 求网络模型参数实例
2019/12/30 Python
使用python-pptx包批量修改ppt格式的实现
2020/02/14 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
澳大利亚领先的优质葡萄酒拍卖会:Langton’s Fine Wines
2019/03/24 全球购物
东方红海科技面试题软件测试方面
2012/02/08 面试题
经理秘书找工作求职信
2013/12/19 职场文书
清洁工岗位职责
2014/01/29 职场文书
中年人生感言
2014/02/04 职场文书
国庆节活动总结
2014/08/26 职场文书
个人贷款授权委托书样本
2014/10/07 职场文书
代领报检证委托书范本
2014/10/11 职场文书
2014年纪检监察工作总结
2014/11/11 职场文书
给病人的慰问信
2015/03/23 职场文书
高一英语教学反思
2016/03/03 职场文书
如何使用CocosCreator对象池
2021/04/14 Javascript
vue选项卡切换的实现案例
2022/04/11 Vue.js