Python函数中把列表(list)当参数

本文深入探讨了Python中函数默认参数的实现机制,特别是当默认参数为可变类型如列表时,多次调用函数可能产生的意外结果。通过具体示例,解析了如何避免这些陷阱,确保函数行为符合预期。

当定义函数时,会保存函数中默认参数 list 的值,也就是列表 l=[];

在每次调用的时候如果传递了新的列表,则使用传递的列表,没有传递,使用定义函数时保存的默认参数(l=[]);

在调用中没有传递新的列表(使用默认列表 l=[] )的时候,程序会调用定义函数时保存的默认参数((l=[]));

列表在append的时候会在 l=[] 原来的基础上append追加值,所以会产生以下结果.

# *===================================*
# -*- coding: utf-8 -*-
# * Time : 2019-07-03 10:50
# * Author : zhangsf
# *===================================*
def f(x,l=[]):
    print(id(l))
    for i in range (x):
        l.append(i*i)
    print(l)

print('---1---')
f(2)
print('---2---')
f(3,[3,2,1])
print('---3---')
f(4,[])
print('---4---')
f(2)


---1---
4384243592
[0, 1]
---2---
4384954248
[3, 2, 1, 0, 1, 4]
---3---
4384954248
[0, 1, 4, 9]
---4---
4384243592
[0, 1, 0, 1]

Process finished with exit code 0

上面通过打印可以发现

会发现l[]的ID值在1、4中是相同的,2、3中是相同的;

说明两次执行时使用的都是定义函数时的默认参数 l=[ ]

当3中传递空列表时,函数体当中会使用传递的空列表,4中没有传

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangvalue

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值