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脚本实现格式化css文件
Apr 08 Python
Django中对数据查询结果进行排序的方法
Jul 17 Python
python的paramiko模块实现远程控制和传输示例
Oct 13 Python
Python处理CSV与List的转换方法
Apr 19 Python
python自动化生成IOS的图标
Nov 13 Python
Django1.11自带分页器paginator的使用方法
Oct 31 Python
python中的 zip函数详解及用法举例
Feb 16 Python
python爬虫开发之urllib模块详细使用方法与实例全解
Mar 09 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
Apr 21 Python
无需压缩软件,用python帮你操作压缩包
Aug 17 Python
Python类的继承super相关原理解析
Oct 22 Python
详解python字符串驻留技术
May 21 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中输出转义JavaScript代码的实现代码
2011/04/22 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
php中JSON的使用与转换
2015/01/14 PHP
php定义参数数量可变的函数用法实例
2015/03/16 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
cookie.js 加载顺序问题怎么才有效
2013/07/31 Javascript
js获取域名的方法
2015/01/27 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
2015/05/09 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
JavaScript为事件句柄绑定监听函数实例详解
2015/12/15 Javascript
AngularJS 模型详细介绍及实例代码
2016/07/27 Javascript
详解如何使用Vue2做服务端渲染
2017/03/29 Javascript
vue+axios实现文件下载及vue中使用axios的实例
2018/09/21 Javascript
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
Python使用PDFMiner解析PDF代码实例
2017/03/27 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
2018/04/10 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
pandas中的series数据类型详解
2019/07/06 Python
python绘制多个子图的实例
2019/07/07 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
.NET常见笔试题集
2012/12/01 面试题
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
报关报检委托书
2014/04/08 职场文书
2014超市双十一活动策划方案
2014/09/29 职场文书
委托培训协议书
2014/11/17 职场文书
优秀共产党员推荐材料
2014/12/18 职场文书
辞职信如何写
2015/02/27 职场文书
好人好事新闻稿
2015/07/17 职场文书
2016年“11.11”光棍节活动总结
2016/04/05 职场文书
2016年敬老月活动总结
2016/04/05 职场文书
JavaScript实现班级抽签小程序
2021/05/19 Javascript
python爬虫之selenium库的安装及使用教程
2021/05/23 Python
十大最帅动漫男主 碓冰拓海上榜,第一是《灌篮高手》男主角
2022/03/18 日漫
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技