Python的坑
在定义一个方法的时候,如果给了默认参数,默认参数的数据类型是一个可变类型,一定要小心。因为python会将这个参数的值保存下来,在另外一次调用的时候与其赋值
def get_user(name, users=[]):
users.append(name)
print(users)
if __name__ == "__main__":
get_user("a")
get_user("b")
print(get_user.__defaults__)
解决办法是:使用不可变参数,如将其设置为None,然后判断如果是None,就使其变成list就可以了
def get_user(name, users=None):
if users is None:
users = []
users.append(name)
print(users)
if __name__ == "__main__":
get_user("a")
get_user("b")
print(get_user.__defaults__)
上述示例,使用class的时候,在__init__方法里定义也是一样要注意这个问题
class Person:
def __init__(self, items=[]):
self.items = items
if __name__ == "__main__":
p1 = Person()
p1.items.append(1)
print(p1.items)
p2 = Person()
p2.items.append(2)
print(p2.items)
解决方法
class Person:
def __init__(self, items=None):
if items is None:
items = []
self.items = items
if __name__ == "__main__":
p1 = Person()
p1.items.append(1)
print(p1.items)
p2 = Person()
p2.items.append(2)
print(p2.items)
最后更新于