python默认参数_Python默认参数有坑?

78310a55b319ebc48f98a4b2bcd450f91f171634.jpeg?token=59560f2c9af35bce41bf2e3a37fd7608&s=2132443388B06B920917195C030050E0

最近有小伙伴在面试中遇到了“关于函数默认参数的坑”的题目,少数伙伴对此问题理得不是太清楚,今天汇智妹请到汇智动力高级讲师邓老师为大家详细讲解一下,帮助不太清楚的小伙伴清晰的梳理一遍。邓老师本次主要从以下三点来讲解:

什么是默认参数?

函数默认参数的坑是什么?

函数默认参数为什么会有坑?

一、什么是默认参数

python为了简化函数的调用,提供了默认参数机制,举个例:

9213b07eca8065389fb36895aa2f3e41af3482d7.jpeg?token=5096165fe4a94343c5ad2af66af7f0bd&s=729A7822871069C0564D98D2000050B0

这样在调用函数时,就可以不写省略的参数。

在定义有默认参数的函数时,需要注意以下两个方面:

1.必选参数必须在前面,默认参数在后;

2.设置何种参数为默认参数?一般来说,将参数值变化小的设置为默认参数。

二、函数默认参数的坑是什么?

当默认参数使用List时就是个坑,引用一个例子如下:

95eef01f3a292df5fed704b181c3c36535a87371.jpeg?token=7908bc73c999788128367672c9160747&s=E092E13A818448EB46F13CDC020010B0

预期返回的结果应该是:

[0,1]

[0,1,2]

然而实际结果是:

08f790529822720e459ecd2a46399543f01fab81.jpeg?token=2023d4269eadb3fbabdc1266a175493a&s=4EAE3862C97948110AF4C1D30000C0B1

三、函数默认参数为什么会有坑?

要弄清函数默认参数为什么会有坑,需要知道参数可变与不可变的区别。当默认参数指向可变类型对象和不可变类型对象时,会表现出不同的行为。

可变默认参数的表现同上个示例,不可变默认参数的变化情况,看以下示例:

77094b36acaf2eddbc2e072ab3e29eec3b019309.jpeg?token=4d5b32de4d0dd799a0184d88611387c8&s=E493E93A87905DC2447838D9020010B0

输出的结果是:

2fdda3cc7cd98d10a51cc3881ccd270b79ec90b3.jpeg?token=34c485faa2fea76ad83fa4bdec6c0924&s=E598EC3B85805CEA0851C0DB0000F0B2

由此结果可以看出,第二次调用时默认参数b不会受第一次调用的影响,因为在函数里面进行计算后,b实际是指向了另外一个对象。而函数使用默认参数时,b指向的还是定义函数时,为b分配的内存地址,这个地址的值是没有改变的。

由此可看出,在定义函数默认参数时,解释器会为其参数分配一个地址,且不管是第几次调用,默认值的地址都不会改变,当b的默认值为列表时,b的id就已经定了,后面再用到此默认值,就会使用改变后的结果。

经过邓老师的详细讲解,汇智妹觉得大家应该都明白了Python默认参数的坑的问题,如有更多关于IT技术类的问题,可直接私信汇智妹了解哦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值