Python有一些陷阱,让你防不胜防。新手经常会头晕,学习Python多年的老手也会不时上当。小编整理了9个坑,都是经常遇到的,让你大呼我遇到过!虽然是个小问题,但是在实际的项目中,哪怕是一个小错误也会引起一连串的问题。有时候,为了找到这个微小的错误需要付出很大的努力,这是非常令人沮丧的。坑1.lambda自由参数排序分组的坑关键函数经常使用lambda,在表达上更简洁,但是有一个新手很容易掉进去的坑:但是实际输出是:3,3,3.用来定义lambda的i称为自由参数,它的值只有在调用lambda函数时才确定,就像下面打印2,你一定要确定。正确的做法是将自由参数转换成lambda函数的默认参数,也就是给i一个默认值:坑2。默认参数设置为空。对于有默认参数的函数,如果类型是容器,设置为空:这是变量类型默认参数的坑,请务必将此类默认参数设置为无:坑3.未绑定共享变量的坑有时候你想多个函数共享一个全局变量,却在一个函数中尝试修改为局部变量:在f函数中应该显示i被声明为全局变量:坑4.使用各种参数的坑4.1)位置参数必须一一对应,两者缺一不可,但是下面的调用不行:4.2)关键字参数必须在位置参数右边这个不行,关键字参数必须在位置参数右侧ThePitofDeletion删除列表中的一个元素,该元素可能在列表中重复多次:考虑删除序列[1,5,5,5,7]中的元素5,结果只有两个被删除:[1,5,7]原因是这个序列在删除的时候是动态缩短的,当你第二次循环的时候,已经跳过了一个5。正确的做法是构造一个字典:利用字典的key的唯一性,这样可以删除的很干净。坑6.不可变对象同值key=1,value=go的键值对奇迹般的消失了。这是什么原因?张二和尚有些疑惑。这是因为具有相同值的不可变对象在Python中总是具有相同的哈希值。具有不同值的对象也可能由于哈希冲突而具有相同的哈希值。坑7.神秘的字符串常驻如果上面的例子返回True,但是下面的例子稍微改一下,加一个@WhyisitFalse:这个和Cpython编译优化有关,这个行为叫做字符串常驻,但是常驻的字符串包含只有字母、数字或下划线。坑8.strangeforverystrange?执行一个for循环后,i就变成了5,为什么执行一次就退出了呢?其实Python中forworks的方式是这样的,将range(5)生成的下一个元素解包赋值给目标列表的变量i,所以i=5不影响循环。坑9.生成器g的执行时机是一个生成器,在list(g)之后返回[2,4,6],因为每个元素至少要出现一次。所以这个结果并不奇怪。不过,请看下面的例子:是不是有点奇怪~~原因是在生成器表达式中,in子句是在声明的时候执行的,而条件子句是在运行时执行的。或者我们可以这样解释:618来袭,虽然Python的电子书很多,但是经典的Python书籍还是要看纸质书,我觉得这样会有踏实感,会舒服一些让我的眼睛长时间阅读。
