网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数: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
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 8回复贴,共1页
<<返回python吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示