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 相关文章推荐
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
Oct 12 Python
python抓取网页中链接的静态图片
Jan 29 Python
Python使用装饰器进行django开发实例代码
Feb 06 Python
代码讲解Python对Windows服务进行监控
Feb 11 Python
对Python3中bytes和HexStr之间的转换详解
Dec 04 Python
Python Pexpect库的简单使用方法
Jan 29 Python
对python_discover方法遍历所有执行的用例详解
Feb 13 Python
python画蝴蝶曲线图的实例
Nov 21 Python
python装饰器使用实例详解
Dec 14 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
Mar 14 Python
超级实用的8个Python列表技巧
Aug 24 Python
Python判断变量是否是None写法代码实例
Oct 09 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 function用法如何递归及return和echo区别
2014/03/07 PHP
PHP实现自动识别Restful API的返回内容类型
2015/02/07 PHP
使用JavaScript创建新样式表和新样式规则
2016/06/14 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
PHP 99乘法表的几种实现代码
2020/10/13 PHP
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
Mootools 1.2教程 类(一)
2009/09/15 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
JS滚轮事件onmousewheel使用介绍
2013/11/01 Javascript
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
在JavaScript中使用JSON数据
2016/02/15 Javascript
Vue.js每天必学之表单控件绑定
2016/09/05 Javascript
angular实现form验证实例代码
2017/01/17 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
详解require.js配置路径的用法和css的引入
2017/09/06 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
浅谈react-router HashRouter和BrowserRouter的使用
2017/12/29 Javascript
Vue父组件调用子组件事件方法
2018/02/23 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
Vue动态获取width的方法
2018/08/22 Javascript
Vue 中获取当前时间并实时刷新的实现代码
2020/05/12 Javascript
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
解决Django数据库makemigrations有变化但是migrate时未变动问题
2018/05/30 Python
基于python实现聊天室程序
2018/07/27 Python
Python企业编码生成系统总体系统设计概述
2019/07/26 Python
Python scrapy爬取小说代码案例详解
2020/07/09 Python
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
eDreams巴西:廉价机票,酒店优惠和度假套餐
2017/04/14 全球购物
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
活动总结报告范文
2014/05/04 职场文书
2014年创先争优活动总结
2014/05/04 职场文书
Python实现生活常识解答机器人
2021/06/28 Python
oracle设置密码复杂度及设置超时退出的功能
2022/06/28 Oracle