python默认参数举例_Python之在函数中使用列表作为默认参数
本文将介绍笔者在工作中遇到的Python的一个坑,那就是使用列表作为默认参数。
我们知道,在Python中,列表(list)是可变对象,所以列表的内容可能会在函数内改变。另一个需要注意的是,使用列表作为函数的默认参数时,列表的内容变化情况。
首先,我们看以下的代码例子:
def add(x, lst=[]):
if x not in lst:
lst.append(x)
return lst
def main():
list1 = add(1)
print(list1)
list2 = add(2)
print(list2)
list3 = add(3, [11, 12, 13, 14])
print(list3)
list4 = add(4)
print(list4)
main()
你可能以为输出的结果会是:
[1]
[2]
[11, 12, 13, 14, 3]
[4]
但事实上,该程序输出的结果是:
[1]
[1, 2]
[11, 12, 13, 14, 3]
[1, 2, 4]
这是为什么呢?函数add的功能是当x不在列表中时,将x追加给列表lst。当函数第一次执行时,参数lst的默认值[]被创建。这个默认值只会被创建一次。add(1)将1加到lst。当函数再次被调用时,lst是[1]而不是[],因为lst只被创建一次。当参数的lst为[11,12,13,14]时,lst就是[11,12,13,14]。list4调用函数时,使用默认参数,因此,现在默认参数lst为[1,2]。
为了更好地理解调用情况,可以在add函数中输出lst的id,如以下代码:
def add(x, lst=[]):
print(id(lst))
if x not in lst:
lst.append(x)
return lst
def main():
list1 = add(1)
print(list1)
list2 = add(2)
print(list2)
list3 = add(3, [11, 12, 13, 14])
print(list3)
list4 = add(4)
print(list4)
main()
输出结果如下:
4469603648
[1]
4469603648
[1, 2]
4469670472
[11, 12, 13, 14, 3]
4469603648
[1, 2, 4]
可以看到,list1, list2, list4调用时默认参数的id并没有发生改变,而list3的id发生了改变。
这是Python使用列表作为默认参数的一个坑。那么,如何避免踩坑呢?如果想要使用默认列表在每次函数调用时都是[],可以像下面的程序那样修改函数参数:
def add(x, lst=None):
if lst is None:
lst = []
if x not in lst:
lst.append(x)
return lst
def main():
list1 = add(1)
print(list1)
list2 = add(2)
print(list2)
list3 = add(3, [11, 12, 13, 14])
print(list3)
list4 = add(4)
print(list4)
main()
输出的结果如下:
[1]
[2]
[11, 12, 13, 14, 3]
[4]
本次分享到此结束,感谢阅读~
注意:本人现已开通微信公众号: Python爬虫与算法(微信号为:easy_web_scrape), 欢迎大家关注哦~~
python默认参数举例_Python之在函数中使用列表作为默认参数相关推荐
- Python之在函数中使用列表作为默认参数
本文将介绍笔者在工作中遇到的Python的一个坑,那就是使用列表作为默认参数. 我们知道,在Python中,列表(list)是可变对象,所以列表的内容可能会在函数内改变.另一个需要注意的是,使 ...
- python函数参数为列表_python函数中把列表(list)当参数时的入坑与出坑
在Python函数中,传递的参数如果默认有一个为 列表(list),那么就要注意了,此处有坑. 入坑 挖坑 def f(x,li=[]): for i in range(x): li.append(i ...
- python函数中把列表(list)当参数时的入坑与出坑
在Python函数中,传递的参数如果默认有一个为 列表(list),那么就要注意了,此处有坑. 入坑 挖坑 def f(x,li=[]):for i in range(x):li.append(i*i ...
- [转载] Python函数中把列表(list)当参数
参考链接: Python中的id函数 当定义函数时,会保存函数中默认参数 list 的值,也就是列表 l=[]: 在每次调用的时候如果传递了新的列表,则使用传递的列表,没有传递,使用定义函数时保存的默 ...
- 站长在线Python精讲:在Python函数中理解形式参数和实际参数
欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python函数中理解形式参数和实际参数>.本文的主要内容有:Python中形式参数的概念和特点,Python中实际参数的 ...
- 函数中的形式参数和实际参数
1.举例:使用函数交换两个整形变量的值 运行结果: 分析: c语言中实际参数和形式参数之间采用值传递的方式来传递数据.在被调函数中,使用的是实际参数的一个拷贝数据.我们在swap函数中交换了a和b,那 ...
- R语言通过在函数中设置na.rm=TRUE参数、在计算和分析中删除缺失值获得有效的计算结果(Excluding Missing Values from Analyses)
R语言通过在函数中设置na.rm=TRUE参数.在计算和分析中删除缺失值获得有效的计算结果(Excluding Missing Values from Analyses) 目录
- python调用函数传参时、有默认值的在中间 报错了_python的大坑:使用空列表作为默认参数,让我怀疑遇到了灵异代码...
在python中,不要使用列表或者其他可变类型的数据容器作为默认参数.否则你很可能会遇到奇奇怪怪的问题. 如果你在调用某一个函数时,传了同样的参数,手动执行,每次结果都正确.但是用循环遍历重复多次执行 ...
- python默认参数举例_Python中的默认参数详解
文章的主题 不要使用可变对象作为函数的默认参数例如 list,dict,因为def是一个可执行语句,只有def执行的时候才会计算默认默认参数的值,所以使用默认参数会造成函数执行的时候一直在使用同一个对 ...
最新文章
- oracle spacial,Oracle Spacial(空间数据库)geometry元数据结构
- c#中textbox属性_C#.Net中的TextBox.MaxLength属性与示例
- Redis简单命令(部分示例代码)
- 把Python项目打包成exe文件
- 哪一瞬间让你下定决心减肥,并且坚定不移的执行,最终瘦身成功?
- C#通过对象属性名修改值
- Struts2-2.了解struts.xmlpackageactionresult的name属性
- Oracle基础 10 表 table
- JavaScript GET 和 POST 请求的区别详解
- java人脸识别Demo(数据库mongo)
- 用树莓派3B+实现智能语音识别
- wwwscan批处理配置
- 国外苹果id_爆料者称苹果仍在继续研发iPhone屏下Touch ID
- 笨方法刷博客_C实现
- 针对从 Apple 购买的 App 或内容申请退款
- ajax localhsot,ajax请求nodejs后台,开启服务器后,localhost:3000/index.html页面既没有报错,也没有文字。。。...
- java编程根据订单编号查询订单状态_Java微信订单查询
- 【机器学习】决策树(Decision Tree)
- win10系统下如何打开bios如何打开Intel-VT-x教程
- android 开启手电筒,android 9.0 获取手电筒状态以及打开/关闭手电筒
热门文章
- python print换行_Python中九九乘法表与古诗对话机器人及sep-end值
- 实战分享|数据驱动「付费转化」的3个思路
- 什么是 ecommerce 的 distributor 概念以及如何实现 website redirect
- SAP Spartacus B2B Org Unit树状结构的ghost数据
- SAP Spartacus里product数据请求的HTTP url是在哪里维护的
- SAP Spartacus store里引用的library是如何编译出来的
- SAP Cloud Platform approuter的本地安装
- why there is always popup window for HANA
- SAP UI5 message.showMessageToast
- mUrlPrefixes内entry的population逻辑