美文网首页Python新世界python热爱者码农的世界
十个Python码农最容易犯的错误, 十个中有九个程序猿躲不过!

十个Python码农最容易犯的错误, 十个中有九个程序猿躲不过!

作者: Python新世界 | 来源:发表于2018-08-06 14:25 被阅读90次
image

1、滥用表达式作为函数参数默认值

Python允许开发者指定一个默认值给函数参数,虽然这是该语言的一个特征,但当参数可变时,很容易导致混乱,例如,下面这段函数定义:

image

在上面这段代码里,一旦重复调用foo()函数(没有指定一个bar参数),那么将一直返回'bar',因为没有指定参数,那么foo()每次被调用的时候,都会赋予[]。下面来看看,这样做的结果:

image

解决方案:

image image

2、错误地使用类变量

image

先看下面这个例子:

image

这样是有意义的:

image

再来一遍:

image

仅仅是改变了A.x,为什么C.x也跟着改变了。

在Python中,类变量都是作为字典进行内部处理的,并且遵循方法解析顺序(MRO)。

image

3、为异常指定不正确的参数

假设代码中有如下代码:

image image image

4、误解Python规则范围

Python的作用域解析是基于LEGB规则,分别是Local、Enclosing、Global、Built-in。实际上,这种解析方法也有一些玄机,看下面这个例子:

image image image image

5、修改遍历列表

下面这段代码很明显是错误的:

image image image

6、如何在闭包中绑定变量

看下面这个例子:

image

你期望的结果是:

image

实际上:

image

是不是非常吃惊!出现这种情况主要是因为Python的后期绑定行为,该变量在闭包中使用的同时,内部函数又在调用它。

解决方案:

image

7、创建循环模块依赖关系

image image

在b.py中:

image

首先,让我们试着导入a.py:

image image image image image

无论何时导入,一切都可以正常运行:

image

8、与Python标准库模块名称冲突

image

9、未按规定处理Python2.x和Python3.x之间的区别

看一下foo.py:

image

在Python 2里面可以很好地运行:

image

但是在Python 3里:

image

解决方案:

image image

在 Python招聘指南里有许多关于Python 2与Python 3在移植代码时需要关注的注意事项与讨论,大家可以前往看看。

10、滥用del方法

image image image image image image

相关文章

网友评论

    本文标题:十个Python码农最容易犯的错误, 十个中有九个程序猿躲不过!

    本文链接:https://www.haomeiwen.com/subject/cvtgvftx.html