首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python函数默认值参数的2个坑

Python函数默认值参数的2个坑

作者头像
Python小屋屋主
发布2018-04-16 16:20:27
1.2K0
发布2018-04-16 16:20:27
举报
文章被收录于专栏:Python小屋Python小屋Python小屋

在定义函数时,Python支持默认值参数,在定义函数时可以为形参设置默认值。在调用带有默认值参数的函数时,可以不用为设置了默认值的形参进行传值,此时函数将会直接使用函数定义时设置的默认值,当然也可以通过显式赋值来替换其默认值。也就是说,在调用函数时是否为默认值参数传递实参是可选的,具有较大的灵活性。例如:

>>> def say( message, times =1 ): print((message+' ') * times)

>>> say('hello') hello >>> say('hello', 3) hello hello hello

好了,下面重点介绍默认值参数的坑,虽然说是两个坑,但实际上是一个意思。

(1)默认值参数的值是在函数定义时确定的

>>> i = 3 >>> def f(n=i): #参数n的值仅取决于i的当前值 print(n) >>> f() 3 >>> i = 5 #函数定义后修改i的值不影响参数n的默认值 >>> f() 3 >>> i = 7 >>> f() 3 >>> def f(n=i): #重新定义函数 print(n) >>> f() 7

(2)默认值参数只初始化一次

如果参数的默认值是数字、字符串、元组或其他不可变类型的数据,并不会有什么影响,但是如果参数的默认值是列表、字典、集合等可变类型数据的话,这里有个大坑。

>>> def demo(newitem, old_list=[]): old_list.append(newitem) return old_list

>>> print(demo('5', [1, 2, 3, 4])) [1, 2, 3, 4, '5'] >>> print(demo('aaa', ['a', 'b'])) ['a', 'b', 'aaa'] >>> print(demo('a')) ['a'] >>> print(demo('b')) #注意这里的输出结果 ['a', 'b']

如果想得到正确结果,建议把函数写成下面的样子:

def demo(newitem, old_list=None): if old_list is None: old_list = [] old_list.append(newitem) return old_list

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档