zoukankan      html  css  js  c++  java
  • python开发中容易犯的错误整合

    写在前面

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

    pip并不是那么安逸

    pip安装对于开发者来说确实是一种解放。可以自动安装依赖包,但执行最简单的pip安装命令时,并不是所有的依赖都会安装。有一些是模块可选择的,比如gunicorn在选择异步框架时。有一些因为调用的层次较多,忽视了,最后pip还是会提醒缺少一些依赖。留心每次安装的结尾。

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

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

    有些是因为升级。比如使用beautifulsoup,虽然名字是叫beautifulsoup,但是它目前对应的模块叫做beautifulsuop4。

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

    错误地import了自定义的模块

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

    非常明显的特征:文件夹下出现了一个和.py同名的.pyc文件。

    尝试修改字符串

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

    is和==不相同

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

    判定为空列表的时候可以是使用A == [],但是如果使用A is [],即便先前赋值A = [],返回的结果也是False

    字符串拼接的时候使用+

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

  • 相关阅读:
    第四周技术博客发表 线性表
    《我是一只IT小小鸟》读后感
    java9最新发布
    MD5进行解密操作
    MD5进行加密操作
    定时器的编写
    mybatis查询修改同时操作
    java8的版本对组合式异步编程
    linux中安装gcc
    linux不能上网问题
  • 原文地址:https://www.cnblogs.com/xiao3c/p/9721662.html
Copyright © 2011-2022 走看看