Python 开发人员常犯的七大“致命”错误( 二 )


现在 , 在 Python 中 , 列表、字典和集合都是可变类型 。 因此 , 设置默认值可能会导致意外的结果 , 如下所示:
def addToList(x, a=[]):a.append(x)return alistOne = addToList(5)#prints [5]anotherList = addToList(10)# [5, 10]如你所见 , 第二个列表包含之前添加的元素 , 因为函数中的可变默认参数跨状态存储这些元素 。
Python 中可变默认对象的问题在于 , 它是在定义函数时计算的 。 这会导致变异值也保留之前的内容 。
为避免此类严重错误 , 请将None设置为默认值 , 并在函数中分配可变变量 , 如下所示:
def addElement(x, a=None):if not a:a = []a.append(x)return a错误七:忽略多重集成和方法解析顺序与大多数编程语言不同 , Python 支持多重继承 。 这意味着 , 在具有继承的类中 , 方法和类变量是根据继承类时指定的顺序执行的 。
初学者往往会忽略这个概念 , 尤其是当他们只使用单一继承时 。
因此 , 在下面这段代码中 , 当调用类 C 的方法时 , 将使用超类 B 各自的方法:
>>> class A(object):...def me(self):print("class A")>>> class B(A):...def me(self):print("class B")class C(B, A):passc= C()c.me() # prints class B因此 , Python 中继承类的顺序很重要 , 因为它是用来解析方法的 。
总结Python 使用起来似乎非常简单 , 但是人们很容易被来自其他编程语言的概念所困扰 , 这就会导致奇怪的错误和崩溃 。 我希望本文所列举的错误能够帮助你厘清概念 , 从而写出健壮的 Python 代码 。
作者介绍:
Anupam Chugh , 视技术和代码为毕生追求 。 拥有 200 万阅读量的作家 , 现为 iOS 开发者 。
原文链接:
【Python 开发人员常犯的七大“致命”错误】关注我并转发此篇文章 , 私信我“领取资料” , 即可免费获得InfoQ价值4999元迷你书 , 点击文末「了解更多」 , 即可移步InfoQ官网 , 获取最新资讯~