网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月15日
漏签
0
天
python吧
关注:
476,393
贴子:
1,973,088
看贴
图片
吧主推荐
视频
游戏
8
回复贴,共
1
页
<<返回python吧
>0< 加载中...
求教一下这个,想不明白了,谢谢大佬们
只看楼主
收藏
回复
贴吧用户_58CbtM9
举人
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
大佬们,请问一下这是为什么呢
,为什么每次运行func函数a不会被重置成空列表呢
乱码lby
榜眼
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
a不存在的时候才把默认值赋给a,a已经存在那就用a本身了
2025-08-15 10:59:00
广告
不感兴趣
开通SVIP免广告
一周休七日
吧主
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
因为a=[]是定义时确定的,也就是def func那句就已经确定了,只要调用时没给出实际参数那a就是引用定义时创建的那个空列表对象“[]”
a7ooec7z9j
贡士
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
默认参数都只会在函数定义时计算一遍,也就是说之后每次调用函数时并没有重新计算a=[ ]中的[ ],而[ ]返回的是一个列表的地址,所以a就相当于一直指向同一个列表
Armodeniz
白丁
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这逻辑很不自然啊,不是bug吗?
我设置默认值,当然是希望每次运行都使用完全一样的值。如果我想达成目前这种效果,肯定会自己指定一个专门的变量把相关逻辑写清楚。
Nyn丿PH
童生
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
因为函数执行的时候不会创建变量,它只是把变量的引用推入到函数执行的栈里。
你看下面的字节码,它先是加载了局部变量a,然后在加载append方法和常量A,最后返回,整个过程是没有创建a这个步骤的,所以a不会每次都被置空。
Nyn丿PH
童生
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
你要想每次都是空列表你要每次给它传值才可以,不然局部变量a是不会变的,你可以自己打印它的id看看就知道了
落桜
白丁
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
默认值只能是不可变对象,你用可变对象做默认值就得忍受奇奇怪怪的bug
2025-08-15 10:53:00
广告
不感兴趣
开通SVIP免广告
萝莉双马尾
白丁
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
a=None试试
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示