0
点赞
收藏
分享

微信扫一扫

python陷阱

1.循环列表的同时不要增删元素

使用for或while在列表上进行循环(也就是迭代)的同时增删其中的元素,很可能会导致错误。

正确的做法是复制不想删除的项到一个新的列表,再用它替换原来的列表。

从技术原理上讲,列表并不包含字符串,而只包含对字符串的引用。无论引用的数据有多大,引用本身的大小是一样的。

所以你不必觉得与迭代列表时对其进行修改相比,创建新列表会浪费内存。

另外一种安全地增删列表中元素的可行方案是从列表尾部开始从后向前迭代。这样,你就可以在迭代过程中从列表删除项,或者添加新项(不过必须添加在末尾)。

2.复制可变值时务必使用copy.copy()和copy.deepcopy()

一个常见的错误是复制指向某个对象的变量到另一个变量时,误以为是在复制实际的对象。在Python中,赋值语句从来都不会复制对象,而只会复制对象的引用。

最好把变量看作指向对象的标签或者代号,而不是包含对象的盒子。

3.不使用可变值作为默认函数

可变数据类型包括列表、字典、集合,以及由类语句创建的对象,不要把这些类型的对象作为def语句中的默认参数。

4.不要通过字符串连接创建字符串

在Python中,字符串是不可变的对象。这意味着字符串值不能被改变,那些看起来像是修改字符串的代码实际上都是在创建一个新的字符串对象。

使用大量的字符串连接构建字符串会使你的程序变慢。循环的每一次迭代都会创建一个新的字符串对象,并丢弃旧的字符串对象。

Python风格的字符串构建方法是将较小的字符串添加到一个列表中,然后将列表连接成一个字符串。

5.不要指望sort()按照字母顺序排序

sort()方法采用ASCII-betical排序方法(一个常见术语,意为按照序号排序)而非字母序。在ASCII系统中,“A”用码位65表示,“B”用66表示,以此类推,直到“Z”用90表示。小写字母“a”则由码位97表示,“b”由98表示,以此类推,直到“z”由122表示。当按ASCII进行排序时,大写字母“Z”(码位90)排在小写字母“a”(码位97)之前。

如果希望按照字母顺序排序,请将str.lower()方法作为参数key传递给sort()方法。

6.不要忘记在仅有一项的元组中添加逗号

在代码中写元组字面量时要记住,务必为仅有一项的元组添加拖尾逗号。

举报

相关推荐

0 条评论