0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

初学者开发人员都会犯的7个Python错误

如意 来源:百家号 作者: Victer情报局 2020-06-23 15:19 次阅读

这篇文章主要介绍了七个初学者常犯的Python调试错误,并告诉大家如何去避免这些错误。

1.具有副作用的功能

由于Python不是像Haskell这样的纯函数式语言,因此会产生副作用。 严格来说,这不是一个错误,但是很容易无意间手忙脚乱。 下面的示例演示了该问题。

初学者开发人员都会犯的7个Python错误

在Python中,对象是引用类型。 因此,当您将列表作为参数传递时,将传递引用而不是值。 这意味着,如果您在函数中更改它们,则更改将反映在外部。

这可能会导致一些非常令人讨厌的意外情况和浪费我们的时间去调试。 请及时提防这些错误,减少麻烦。

2.默认参数中的函数调用

默认参数有时很难使用。 看一下以下内容。

初学者开发人员都会犯的7个Python错误

为什么每次调用的返回值都一样? 原因是在定义函数时,Python会在默认参数中计算表达式。 如果要动态生成默认参数,则可以执行以下操作。

初学者开发人员都会犯的7个Python错误

3.可变的默认参数

此问题是以上两个的结合。 您是否遇到过以下情况?

初学者开发人员都会犯的7个Python错误

这里发生两件事。

1.定义函数后,Python会对表达式[[]求值。 (这相当于调用list()。)

该对象的引用绑定到参数。 因此,无论何时调用该函数,都将使用相同的对象。

2.因此,使用可变对象作为默认参数不是一个好主意。 你绝对不应该那样做。

4. 参考覆盖

如我们所见,每个对象都是Python中的引用类型。 除了将它们传递给函数之外,这还可能引起一些混乱。 请参见以下示例:

初学者开发人员都会犯的7个Python错误

当执行b = a时,实际上存储了a的引用。 因此,a和b指向同一对象。 要解决此问题,您应该使用内置的Deepcopy功能。 这将所有值类型的属性递归复制到新变量中。

初学者开发人员都会犯的7个Python错误

如果使用整数而不是list尝试相同的操作,则所有操作的行为都将与您期望的一样。 原因是整数类型是不可变的,因此在更改它们时会覆盖引用。

5.从东西导入*

我知道,我们都做到了这一点。 这有几个缺点。

首先,不同名称空间中的函数可以具有相同的名称,从而导致整个代码库混乱。

其次,当您在Python中导入模块时,该模块中的所有代码都将被执行。 如果有很多子模块要导入,这会大大降低速度。 因此,如果仅导入NumPy以生成随机数,则最好使用下面方法:

初学者开发人员都会犯的7个Python错误

than

初学者开发人员都会犯的7个Python错误

6.使用字符串串联连接路径

假设您必须从变量data_folder给定的文件夹中打开一个名为data.csv的文件。 应该如何确定文件路径? 如果你在做:

初学者开发人员都会犯的7个Python错误

那你做错了。 例如,这在Windows上将不起作用。 您可能没有经验,但是使用不同开发设置的你的同事肯定会感到痛苦。

为了解决这个问题,您应该使用Python的内置工具pathlib或简单地使用os.path.join函数:

初学者开发人员都会犯的7个Python错误

7. 测试覆盖率低

这是一个高水平的问题。 尤其是当您是初学者时,单元测试的好处尚不清楚。 但是,每个经验丰富的开发人员都可以告诉您,这是绝对必要的。 使用未经测试的代码就像打个模子:修复一个错误,引入另一个错误。

为了避免这些错误,从项目的开始就应该注意。 添加功能(甚至功能)后,应立即编写测试用例以验证能否跑通。 有很多很棒的库,例如内置的unittest或非常流行的pytest。

应该认真投入时间来测试您的代码。 这样做可能需要一些时间,但这是一项长期投资。 您将节省更多的调试时间。

简而言之,这是您在Python中可能犯的七个最痛苦的错误。 在追求Python熟练度的过程中,您肯定还会遇到更多。 但是,有了本指南,您将有知识来避免这些出现最频繁的错误。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程
    +关注

    关注

    88

    文章

    3441

    浏览量

    92406
  • python
    +关注

    关注

    51

    文章

    4677

    浏览量

    83468
收藏 人收藏

    评论

    相关推荐

    初学仿真常见的错误

    本推文针对Sentaurus初学者频繁遇到的错误进行简单整理,具体是包括Sde、Sdevice仿真常见错误
    的头像 发表于 12-03 16:24 817次阅读
    <b class='flag-5'>初学</b>仿真常见的<b class='flag-5'>错误</b>

    开关电源开发人员必看

    电子发烧友网站提供《开关电源开发人员必看.pdf》资料免费下载
    发表于 11-08 15:41 0次下载
    开关电源<b class='flag-5'>开发人员</b>必看

    分享给嵌入式初学者

    电子发烧友网站提供《分享给嵌入式初学者.doc》资料免费下载
    发表于 11-08 10:46 0次下载
    分享给嵌入式<b class='flag-5'>初学者</b>

    面向CAN总线初学者的入门教程

    本资料是CAN初学者的入门书,对 CAN 是什么、CAN 的特征、标准规格下的位置分布等、CAN 的概要及 CAN 的协议进行了说明。
    发表于 10-20 17:25 1次下载

    初学者入门

    太好了,初学者学习慢慢消化中……
    发表于 09-21 13:50

    学习Python的双重选择: 树莓派和行空板

    Python是一种流行并简单和易用的编程语言, 吸引了众多初学者和专业开发人员。许多人选择使用树莓派(Raspberry Pi)作为学习Python的工具,因为它体积小、价格实惠,并且
    的头像 发表于 09-08 13:53 339次阅读

    ARM开发人员套件1.2版汇编指南

    功能是有限制的。 有关内联汇编器的更多信息,请参阅ADS开发人员指南中的混合C、C++和汇编语言一章。 这本书的其余部分主要是关于手臂的。
    发表于 09-01 10:41

    使用MobilenetV2、ARM NN和TensorFlow Lite Delegate预建二进制文件进行图像分类教程

    的设备上,并深入研究了代码。 本指南既适合初学者,也适合有经验的开发人员。 我们可以使用指南的前面部分在几分钟内启动并运行一应用程序。 对于更有经验的开发人员,我们还将在后面的代码深
    发表于 08-28 06:12

    ARM开发人员套件1.2版开发人员指南

    本书包含的信息将帮助您解决为基于ARM的处理器开发代码时的特定问题。 一般来说,本书中的章节假定您正在使用ARM开发人员套件(ADS)来开发代码。 ADS由一套应用程序以及支持文档和示例组成,使您能
    发表于 08-23 07:29

    ARM GPU最佳实践开发人员指南

    我们的指南提供了在为Arm Immortalis和Mali GPU开发时如何优化应用程序的建议。这些建议是为那些希望开始使用Arm GPU的成熟开发人员准备的。
    发表于 08-10 06:58

    UM-B-056:DA1468x 软件开发人员指南

    UM-B-056:DA1468x 软件开发人员指南
    发表于 07-05 20:36 0次下载
    UM-B-056:DA1468x 软件<b class='flag-5'>开发人员</b>指南

    IzoT BACnet 开发人员指南

    IzoT BACnet 开发人员指南
    发表于 07-04 20:48 0次下载
    IzoT BACnet <b class='flag-5'>开发人员</b>指南

    初学者工具包-沙漏(个人模组)

    电子发烧友网站提供《初学者工具包-沙漏(个人模组).zip》资料免费下载
    发表于 06-26 09:43 0次下载
    <b class='flag-5'>初学者</b>工具包-沙漏(个人模组)

    通过使用AI改善开发人员体验的13种令人印象深刻的方法

    在当今快速发展的技术环境中,人工智能 (AI) 正在全面改变行业,软件开发也不例外。AI 可以通过简化流程、自动执行重复性任务以及使开发人员能够构建创新应用程序来显著增强开发人员体验。
    发表于 06-09 09:24 503次阅读

    PLC初学者必须掌握的梯形图

    PLC初学者必须掌握的七大梯形图
    发表于 05-25 16:44 4次下载