1 含单个元素的元组

Python中有些函数的参数类型为元组,其内有1个元素,这样创建是错误的:

c = (5) # NO!

它实际创建一个整型元素5,必须要在元素后加一个逗号:

c = (5,) # YES!

2 默认参数设为空

含有默认参数的函数,如果类型为容器,且设置为空:

def f(a,b=[]):  # NO!    print(b)    return b

ret = f(1)ret.append(1)ret.append(2)# 当再调用f(1)时,预计打印为 []f(1)# 但是却为 [1,2]

这是可变类型的默认参数之坑,请务必设置此类默认参数为None:

def f(a,b=None): # YES!    pass

3 共享变量未绑定之坑

有时想要多个函数共享一个全局变量,但却在某个函数内试图修改它为局部变量:

i = 1def f():    i+=1 #NO!

def g():    print(i)

应该在f函数内显示声明i为global变量:

i = 1def f():    global i # YES!    i+=1

4 列表快速复制之坑

在python中*与列表操作,实现快速元素复制:

a = [1,3,5] * 3 # [1,3,5,1,3,5,1,3,5]a[0] = 10 # [10, 2, 3, 1, 2, 3, 1, 2, 3]

如果列表元素为列表或字典等复合类型:

a = [[1,3,5],[2,4]] * 3 # [[1, 3, 5], [2, 4], [1, 3, 5], [2, 4], [1, 3, 5], [2, 4]]

a[0][0] = 10 #

结果可能出乎你的意料,其他a[1[0]等也被修改为10

[[10, 3, 5], [2, 4], [10, 3, 5], [2, 4], [10, 3, 5], [2, 4]]

这是因为*复制的复合对象都是浅引用,也就是说id(a[0])与id(a[2])门牌号是相等的。如果想要实现深复制效果,这么做:

a = [[] for _ in range(3)]

5 列表删除之坑

删除一个列表中的元素,此元素可能在列表中重复多次:

def del_item(lst,e):    return [lst.remove(i) for i in e if i==e] # NO!

考虑删除这个序列[1,3,3,3,5]中的元素3,结果发现只删除其中两个:

del_item([1,3,3,3,5],3) # 结果:[1,3,5]

正确做法:

def del_item(lst,e):    d = dict(zip(range(len(lst)),lst)) # YES! 构造字典    return [v for k,v in d.items() if v!=e]

以上就是5个常见的坑点,希望看到这里的朋友能避开这些坑。

最新文章

  1. MySQL 磁盘I/O问题
  2. JavaScript学习笔记之Array
  3. 在计算机 . 上没有找到服务 WAS
  4. LAMP简易安装
  5. python jar
  6. 【概念笔记】JAVA基础 - part2
  7. SQL 存储和触发器
  8. 通过JavaScript更新UpdatePanel备忘
  9. oracle PL/SQL(procedure language/SQL)程序设计之异常(exception)
  10. 第六十五篇、OC_iOS7 自定义转场动画push pop
  11. java8新特性学习
  12. js关于propotype的一些事-------Day62
  13. ACM 入门计划
  14. Java 堆内存(Heap)[转]
  15. Hadoop(四)HDFS集群详解
  16. 【CF932G】Palindrome Partition(回文树,动态规划)
  17. SSM-Spring-11:Spring中使用代理工厂Bean实现aop的四种增强
  18. 软件工程第二次作业-VSTS单元测试
  19. 各种官网系统镜像文件(Windows 7 ,Windows 10,Ubuntu 18.6,Centos 6.8 ,Centos 7.6 )
  20. Oracle EBS compile PLD PLL files.

热门文章

  1. VUE随手记坑
  2. windows内核安全编程书籍
  3. DataStructuresAndAlogorithm--红黑树
  4. BZOJ:2186: [Sdoi2008]沙拉公主的困惑
  5. C语言-浮点类型
  6. 小白学Python——Anaconda安装
  7. 汉诺塔(思维、DP思想)
  8. 利用京东云Serverless服务快速构建5G时代的IoT应用
  9. 吴裕雄--天生自然TensorFlow2教程:高阶操作
  10. mybatis的一对多和多对一的连接查询