鱼C论坛

 找回密码
 立即注册
查看: 1596|回复: 7

[已解决]关于函数默认参数疑问

[复制链接]
发表于 2017-8-26 08:06:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 八千年 于 2017-8-26 08:32 编辑

函数代码如下:
  1. def add_end(L=[]):
  2.     L.append('END')
  3.     return L
复制代码


当你使用默认参数调用时,一开始结果是对的:
  1. >>> add_end()
  2. ['END']
复制代码


但是,再次调用add_end()时,结果就不对了:
>>> add_end()
['END', 'END']
>>> add_end()
['END', 'END', 'END']

疑问:
为什么正常调用的时候,多次调用不会出现多个'END'?
>>> add_end([1, 2, 3])
[1, 2, 3, 'END']
>>> add_end(['x', 'y', 'z'])
['x', 'y', 'z', 'END']
最佳答案
2017-8-26 08:49:47
八千年 发表于 2017-8-26 08:45
sorry,是我问的方式有问题,使用默认参数调用这个函数时,默认参数都会发生变化。原理是不是这样:
第 ...

因为不是默认,不会修改默认值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-26 08:14:32 | 显示全部楼层
第一次默认以后,真正的默认参数就多了END,在默认,又多一个END
所以Python不要这样,最好设置一个参数None,然后操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-26 08:18:12 | 显示全部楼层
新手·ing 发表于 2017-8-26 08:14
第一次默认以后,真正的默认参数就多了END,在默认,又多一个END
所以Python不要这样,最好设置一个参数No ...

使用这个函数:
  1. def add_end(L=[]):
  2.     L.append('END')
  3.     return L
复制代码

怎么不会出现调用一次多一个END的情况呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-26 08:25:18 | 显示全部楼层
  1. >>> add_end()
  2. ['END']
  3. >>> add_end()
  4. ['END', 'END']
  5. >>> add_end()
  6. ['END', 'END', 'END']
  7. >>> add_end()
  8. ['END', 'END', 'END', 'END']
  9. >>> add_end()
  10. ['END', 'END', 'END', 'END', 'END']
  11. >>> add_end()
  12. ['END', 'END', 'END', 'END', 'END', 'END']
  13. >>> add_end()
  14. ['END', 'END', 'END', 'END', 'END', 'END', 'END']
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-26 08:45:29 | 显示全部楼层

sorry,是我问的方式有问题,使用默认参数调用这个函数时,默认参数都会发生变化。原理是不是这样:
第一次调用该函数时:变量L的值变成了['END'];
第二次调用该函数时:变量L的值变成了['END','END'];
以此类推
因为L是变量,会随着内容改变而改变。

我想知道的是:为什么正常多次调用的时候,L这个变量怎么不出现随着内容改变而改变?
  1. >>> add_end([1, 2, 3])
  2. [1, 2, 3, 'END']
  3. >>> add_end([1, 2, 3])
  4. [1, 2, 3, 'END']
复制代码

按照上面使用默认L为参数时,多次调用L改变的原理,是不是应该这样:
第一次调用时,L的值为[1, 2, 3, 'END']
第二次调用时,L的值为[1, 2, 3, 'END',1, 2, 3, 'END']
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-26 08:49:47 | 显示全部楼层    本楼为最佳答案   
八千年 发表于 2017-8-26 08:45
sorry,是我问的方式有问题,使用默认参数调用这个函数时,默认参数都会发生变化。原理是不是这样:
第 ...

因为不是默认,不会修改默认值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-26 08:52:15 | 显示全部楼层
新手·ing 发表于 2017-8-26 08:49
因为不是默认,不会修改默认值

谢谢版主同学!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-26 08:53:05 | 显示全部楼层

不客气VIP鱼油~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-3 05:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表