Python函数默认参数为什么不能用可变对象

打印 上一主题 下一主题

主题 657|帖子 657|积分 1971

  1. def f(val=[]):
  2.     val.append(1)
  3.     return val
  4. print(f(), f())
复制代码
输出:
  1. [1, 1] [1, 1]
复制代码
这是因为Python函数默认参数如果是可变对象始终是同一个,修改一个其它也会跟着变。所以不建议默认参数用可变对象,防止出现意外的值。
至于为什么不是[1],[1,1],是因为两个f()实行完了再print的,此时两个f()返回的都是同一个列表。如果分成两个print才是[1],[1,1]:
  1. def f(val=[]):
  2.     val.append(1)
  3.     return val
  4. print(f())
  5. print(f())
复制代码
输出:
  1. [1]
  2. [1, 1]
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

星球的眼睛

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表