python开发中容易犯的错误整合

写在前面

长期更新的博文。多数是一些比较隐蔽的问题。欢迎留言补充。java

pip并非那么安逸

pip安装对于开发者来讲确实是一种解放。能够自动安装依赖包,但执行最简单的pip安装命令时,并非全部的依赖都会安装。有一些是模块可选择的,好比gunicorn在选择异步框架时。有一些由于调用的层次较多,忽视了,最后pip仍是会提醒缺乏一些依赖。留心每次安装的结尾。python

import时名称相同/类似(但实际模块不一样)

近几年出现了较屡次针对python供应链的黑客攻击以后,python官方对模块进行了规范,其中包括在pypi中搜索模块时,模块主页上都会有一个安装命令,明确告知安装它的时候该使用什么。数组

有些是由于升级。好比使用beautifulsoup,虽然名字是叫beautifulsoup,可是它目前对应的模块叫作beautifulsuop4。框架

还有库存在重名冲突致使产生问题。假如经过阅读import的内容去安装一个模块,以后运行会提示模块中没有代码中的函数或者变量。查看模块源代码确实没有,可是运行的代码一样也不会错,陷入怀疑人生。典型的就是加密库中的cipher,一个是cipher,另外一个叫pycipher。可是导入的是同一个名字:cipher。异步

错误地import了自定义的模块

在新建py文件的时候,多是由于本身的脑海中反复考虑想着代码功能,而后就以表明程序功能的单词来命名为文件了。import导入的时候,是会引入同目录下的文件的,若是import的名字本来是要调用某个模块的,可是本身编写的函数又起了一样了名字,解释器就会把当前目录下本身写的这个函数编译导入进来。函数

很是明显的特征:文件夹下出现了一个和.py同名的.pyc文件。性能

尝试修改字符串

多是先学了c、java等语言,而后余孽未消,将它们对数组的定义和思惟带入到了python中来。python字符串不支持直接修改,修改字符串的某一位或者某几位,须要靠拼接的方法。也是涉及重建一个字符串对象。加密

is和==不相同

比较值的时候使用==,比较地址的时候使用is。code

断定为空列表的时候能够是使用A == [],可是若是使用A is [],即使先前赋值A = [],返回的结果也是False对象

字符串拼接的时候使用+

因为python字符串不可变,每次使用+进行拼接,产生的结果都要在内存中新建一个对象来放置这个新生成的字符串,因此大量拼接操做的性能低下。可使用内置的join()方法来替代+进行字符串拼接。

相关文章
相关标签/搜索