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冒泡排序算法的实现代码
Nov 21 Python
python将图片文件转换成base64编码的方法
Mar 14 Python
python单元测试unittest实例详解
May 11 Python
Python多进程分块读取超大文件的方法
Apr 13 Python
Python中str.format()详解
Mar 12 Python
python实现数据分析与建模
Jul 11 Python
关于windows下Tensorflow和pytorch安装教程
Feb 04 Python
python生成大写32位uuid代码
Mar 03 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 Python
Python非单向递归函数如何返回全部结果
Dec 18 Python
Python实现提取PDF简历信息并存入Excel
Apr 02 Python
Python实现批量将文件复制到新的目录中再修改名称
Apr 12 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.MVC的模板标签系统(五)
2006/09/05 PHP
php pki加密技术(openssl)详解
2013/07/01 PHP
php使用websocket示例详解
2014/03/12 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
php实现倒计时效果
2015/12/19 PHP
PHP dirname(__FILE__)原理及用法解析
2020/10/28 PHP
jQuery中RadioButtonList的功能及用法实例介绍
2013/08/23 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
2014/05/04 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
Node.js连接mongodb实例代码
2017/06/06 Javascript
docker中编译nodejs并使用nginx启动
2017/06/23 NodeJs
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
vue 路由页面之间实现用手指进行滑动的方法
2018/02/23 Javascript
vue渲染时闪烁{{}}的问题及解决方法
2018/03/28 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
2019/08/06 Javascript
js模拟实现百度搜索
2020/06/28 Javascript
基于js实现的图片拖拽排序源码实例
2020/11/04 Javascript
全面解析Vue中的$nextTick
2020/12/24 Vue.js
[48:37]EG vs OG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python zip()函数用法实例分析
2018/03/17 Python
python实现对输入的密文加密
2019/03/20 Python
numpy库reshape用法详解
2020/04/19 Python
python 下划线的不同用法
2020/10/24 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
面向中国市场的在线海淘美妆零售网站:Beauty House美丽屋
2021/03/02 全球购物
大学生个人自我鉴定
2013/12/03 职场文书
高中学校对照检查材料
2014/08/31 职场文书
开展党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
公路施工安全责任书
2015/05/08 职场文书