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

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

3天内不再提示

在学习Python过程中,遇到的4个编码错误

如意 来源:百家号 作者:三微授渔 2020-06-27 16:13 次阅读

一年前,我开始学习Python,那时候的我已经学会其他一些编程语言,例如PHP(把我引入到Web开发中的第一门语言),JavaScript(我已经很擅长使用JavaScript,并且正在编写UI)和当时我主要的收入代码C#

我通过自己所了解的开发应用程序来学习Python,因此我将许多JavaScript和C#的工作方式整合到了我的代码中,这虽然很糟糕,但有时却很有效。我花了一些时间,阅读别人的代码,并与他人沟通,让自己的语言变得更好。今天,我想和你一起探讨我在学习Python时(代码方面)的一些错误。

1、误解Python范围

python解析范围是基于所谓的LEGB规则,OCAL,Local, Enclosing, Global, Built-in 即使看起来很简单,但当时对我来说还是有些混乱,例如,以下示例:

在学习Python过程中,遇到的4个编码错误

对于上面的代码,我想要它能正常工作,并更改全局变量x以最终打印出来6。但是,它突然变得很奇怪,不按照我的想法来输出,让我们看一下更改的代码:

在学习Python过程中,遇到的4个编码错误

到底是怎么回事?在一个代码段中,全局变量X给出了一个UnboundLocalError但是当我们只是尝试打印它时,它就起作用了。原因与范围界定有关。当你对作用域(例如函数作用域)中的变量进行赋值时,该变量将成为该作用域的局部变量,并在外部作用域中隐藏任何类似命名的变量。这是我们做第一个方案时发生的情况x += 1。如果我们打算x像访问函数那样访问全局变量,则foo()可以执行以下操作:

在学习Python过程中,遇到的4个编码错误

通过使用关键词global,内部范围可以访问在全局范围内声明的变量,这意味着没有在任何函数中定义的变量。同样,我们可以用nonlocal来达到类似的效果:

在学习Python过程中,遇到的4个编码错误

nonlocalas global允许你从外部范围访问变量,但是,对于nonlocal,你可以绑定到父范围或全局范围内的对象。

2、遍历列表时修改列表

它在新学习的Python开发人员中甚至在一些经验丰富的开发人员中都很常见。虽然有时看起来似乎并不那么明显,但是在某些情况下,我们还是要修改我们当前正在迭代的数组,从而会产生一些了代码错误的行为,或者如果幸运的话,我们会收到一个错误并注意到它。但是,让我举一个例子说明我的意思,假设给定一个数组,需要将该数组缩小为仅包含偶数元素,可以尝试执行以下操作:

在学习Python过程中,遇到的4个编码错误

在所描述的方案中,迭代时删除列表或数组的元素时,由于尝试访问不存在的项目,我们会收到错误消息。这是一个坏习惯,应该避免,有更好的方法可以在python中实现类似的功能,其中包括列表理解:

在学习Python过程中,遇到的4个编码错误

也可以使用filter函数来实现相同的功能,虽然它起到了作用,但还是有人认为这不是Pythonic的方法,我有还是些同意的,但是我不想在这里讨论它们。让我们继续吧:

在学习Python过程中,遇到的4个编码错误

3、闭包中的变量绑定

我向一些python的前辈询问他们对以下代码片段的看法:

在学习Python过程中,遇到的4个编码错误

对于许多人(包括我自己),第一次遇到此问题时,我们认为结果将是:

在学习Python过程中,遇到的4个编码错误

但是,实际上代码最终打印了完全不同的结果,我们对为什么感到非常困惑。原来是Python会执行后期绑定行为,根据该行为,在调用内部函数时会查询闭包中使用的变量的值。因此,在我们的示例中,每当调用任何返回的函数时,都会在调用i时在周围的范围中查找的值。解决此问题的方法似乎有些棘手,但实际上却很有效

在学习Python过程中,遇到的4个编码错误

通过使用lambda函数的默认参数传递值,i可以生成函数以执行所需的行为。我对这种解决方案感到非常困惑,但我仍然认为它不是很优雅,但是有些人喜欢它。如果你知道该问题的另一种解决方案,请您在评论中让我知道,我很乐意阅读有关该问题的信息

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

当我刚开始学习时,这个问题实际上很普遍,甚至现在,有时我也会犯这个错误。出现此问题的原因是使用与Python随带的标准库中的模块相同的名称来命名你的一个模块。(例如,你的代码中可能有一个名为email.py的模块,这与同名的标准库模块发生冲突)。

也许名称本身冲突不会对你的代码产生任何问题,但是有时我们会覆盖Python标准库的功能或模块,该功能或模块稍后在已安装的库中使用,并且会引发错误或行为不当而发生冲突,这是一个糟糕的情况。一个典型的错误如下:

在学习Python过程中,遇到的4个编码错误

通过简单地创建一个list变量,然后我们中断了对该list函数的访问。并且,即使还有其他访问方式(例如__builtins__.list()),我们也应该避免使用这种名称。

最后

本文并没有涵盖开发人员在使用Python进行编码时所犯的所有常见错误,而是涵盖了我最苦恼的那些事情。

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

    关注

    6

    文章

    945

    浏览量

    54854
  • python
    +关注

    关注

    56

    文章

    4797

    浏览量

    84773
收藏 人收藏

    评论

    相关推荐

    在学习PROTEL99过程中容易出现的一些问题:

    在学习PROTEL99过程中容易出现的一些问题: Protel 98/99是电子设计自动化(EDA)特别是印制电路板(PCB)设计中广泛使用的一种优秀软件。在学习使用Protel98/99
    发表于 07-25 17:41

    你是否在学习STM32的过程中很迷茫

    你是否在学习STM32的过程中很迷茫,徘徊不定?本教程将解决这些问题,它用一个个实际例子附带学习方法帮你打开STM32学习的大门。
    发表于 06-08 19:36

    在学习tensorflow过程中遇到的问题有哪些

    在学习tensorflow过程中遇到的问题
    发表于 05-25 10:29

    【HarmonyOS IPC 试用连载 】搭建过程中遇到的问题

    本文档列举在搭建过程中遇到的问题,供大家参考:问题一:问题现象:安装完成python3.8.5之后,输入python3后,界面如下:问题原因:Linux环境
    发表于 01-14 16:36

    学习DSP编程过程中经常遇到的问题汇总(1)

    我们已经连载了25篇有关于DSP编程技巧的文章。了解了这些技巧,相当于工具已经在手,但是每个人都是有一定的学习曲线的,工具的使用都是一熟能生巧的过程,在这一过程中难免有一些疑惑的,所
    发表于 04-02 06:27

    学习MSP430过程中遇到的问题分享

    的期末作业的小组合作项目,现在回想起来,着实不算很难,这里写下这篇文章就是想帮助在学习MSP430过程中遇到问题的小伙伴们,希望你们在成长的过程中顺利度过。欢迎志同道合的小朋友给我留私
    发表于 11-29 07:15

    学习51单片机过程中遇到的问题记录

    这篇文章记录自己在学习过程中遇到的问题1为什么***it led =P1^0main 函数只要led =0 能点亮灯led =1 就会熄灭我们可以打开库查看我们的对应的引脚将这个 十
    发表于 02-24 07:57

    Python机器学习开源项目分析过程中的见解和趋势

    开源是威廉希尔官方网站 创新和快速发展的核心。这篇文章向你展示Python机器学习开源项目以及在分析过程中发现的非常有趣的见解和趋势。 我们分析了GitHub上的前20名Python机器
    发表于 12-16 08:56 750次阅读

    Python编程时常见的3错误

    以下列出了学习 Python 时犯的三种错误: 1.可变数据类型作为函数定义的默认参数 2.可变数据类型作为类变量 3. 可变的分配错误
    发表于 03-21 11:46 1188次阅读

    新手学习Python有哪些常见的错误

    学习Python过程中发现一些常见的错误,或许大家也会 遇到,这里在此总结如下:
    发表于 10-30 19:45 4次下载

    在PCB设计过程中要避免的5常见错误

    免在此过程中必然会发生许多常见错误。本讨论总结了五常见的 PCB 设计错误,并提供了避免这些错误的简单方法。 为什么 PCB 原型如此重要
    的头像 发表于 10-27 19:12 2696次阅读

    如何解决优化过程中遇到的问题

    前言 这篇文章的主题是记录一次程序的性能优化,在优化的过程中遇到的问题,以及如何去解决的。 为大家提供一优化的思路,首先要声明的一点是,我的方式不是唯一的,大家在性能优化之路上遇到
    的头像 发表于 09-30 16:59 2667次阅读

    记录学习msp430g2553单片机学习过程中遇到的各种问题(1)

    记录学习msp430g2553单片机学习过程中遇到的各种问题(1)1.CCS报错找不到xxx.h头文件:解决,建立工程时忘记选单片机了2.CCS报错program will not f
    发表于 11-14 14:51 9次下载
    记录<b class='flag-5'>学习</b>msp430g2553单片机<b class='flag-5'>学习</b><b class='flag-5'>过程中</b><b class='flag-5'>遇到</b>的各种问题(1)

    Python中有哪些常见的错误和异常

    python常见异常类型 在程序运行过程中,总会遇到各种各样的问题和错误。 有些错误是我们编写代码时自己造成的,比如语法
    的头像 发表于 03-04 16:58 4180次阅读

    Python的默认编码

    我们使用Pycharm来编写Python程序时会指定工程编码和文件编码为UTF-8,那么Python代码被保存到磁盘时就会被转换为UTF-8编码
    的头像 发表于 07-05 16:11 1135次阅读
    <b class='flag-5'>Python</b><b class='flag-5'>中</b>的默认<b class='flag-5'>编码</b>