查看“Python函数:多次调用调用函数且不为默认值参数传递值的危险后果”的源代码
←
Python函数:多次调用调用函数且不为默认值参数传递值的危险后果
跳转至:
导航
,
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
*多次调用函数并且不为默认值参数传递值时,默认值参数只在定义时进行一次解释和初始化,对于列表、字典这样可变类型的默认值参数,这一点可能会导致很严重的逻辑错误。例如: <nowiki>>>> 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']</nowiki> *一般来说,要避免使用列表、字典、集合或其他可变序列作为函数参数默认值,对于上面的函数,更建议使用下面的写法。 <nowiki>def demo(newitem, old_list=None): if old_list is None: old_list = [] old_list.append(newitem) return old_list</nowiki> *函数的默认值参数是在函数定义时确定值的,所以只会被初始化一次。 <nowiki>>>> 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</nowiki>
返回至
Python函数:多次调用调用函数且不为默认值参数传递值的危险后果
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息