























前言:函数的坑可以查看此文python函数各种坑了解更多。python函数可以有默认参数,但是当你给一个默认参数传值为为可变数据类型时,你会发现一些奇葩的问题。案例如下:
# -*- coding: utf-8 -*-
def append_to(num, my_list=[]):
my_list.append(num)
print(my_list)
append_to(1)
append_to(2)
append_to(3)
[1] [1, 2] [1, 2, 3]
python中函数也是对象,默认参数是函数的属性(函数的参数默认值保存在函数的__defaults__属性中),如果默认值是可变类型变量,它的值会随着函数被调用而改变。
python这个特点一方面和python中可变类型变量的数据结构有关,另一方面可能是为了体现python中一切皆对象的事实!其实这种现象在js里也会遇到!避免这种问题就直接用下面的写法,简单实用。
# -*- coding: utf-8 -*-
def append_to(num):
my_list = []
my_list.append(num)
return my_list
a = append_to(5)
print('a是',a)
b = append_to(6)
print('a是',a) # 此时a跟着变了
print('b是',b)
a是 [5] a是 [5] b是 [6]
很赞哦!
python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。