在学习Python那一年里,我遇到的4种编码错误
off999 2024-11-20 20:03 38 浏览 0 评论
一年前,我开始学习Python,那时候的我已经学会其他一些编程语言,例如PHP(把我引入到Web开发中的第一门语言),JavaScript(我已经很擅长使用JavaScript,并且正在编写UI)和当时我主要的收入代码C#。
我通过自己所了解的开发应用程序来学习Python,因此我将许多JavaScript和C#的工作方式整合到了我的代码中,这虽然很糟糕,但有时却很有效。我花了一些时间,阅读别人的代码,并与他人沟通,让自己的语言变得更好。今天,我想和你一起探讨我在学习Python时(代码方面)的一些错误。
1、误解Python范围
python解析范围是基于所谓的LEGB规则,OCAL,Local, Enclosing, Global, Built-in 即使看起来很简单,但当时对我来说还是有些混乱,例如,以下示例:
对于上面的代码,我想要它能正常工作,并更改全局变量x以最终打印出来6。但是,它突然变得很奇怪,不按照我的想法来输出,让我们看一下更改的代码:
到底是怎么回事?在一个代码段中,全局变量X给出了一个UnboundLocalError但是当我们只是尝试打印它时,它就起作用了。原因与范围界定有关。当你对作用域(例如函数作用域)中的变量进行赋值时,该变量将成为该作用域的局部变量,并在外部作用域中隐藏任何类似命名的变量。这是我们做第一个方案时发生的情况x += 1。如果我们打算x像访问函数那样访问全局变量,则foo()可以执行以下操作:
通过使用关键词global,内部范围可以访问在全局范围内声明的变量,这意味着没有在任何函数中定义的变量。同样,我们可以用nonlocal来达到类似的效果:
nonlocalas global允许你从外部范围访问变量,但是,对于nonlocal,你可以绑定到父范围或全局范围内的对象。
2、遍历列表时修改列表
它在新学习的Python开发人员中甚至在一些经验丰富的开发人员中都很常见。虽然有时看起来似乎并不那么明显,但是在某些情况下,我们还是要修改我们当前正在迭代的数组,从而会产生一些了代码错误的行为,或者如果幸运的话,我们会收到一个错误并注意到它。但是,让我举一个例子说明我的意思,假设给定一个数组,需要将该数组缩小为仅包含偶数元素,可以尝试执行以下操作:
在所描述的方案中,迭代时删除列表或数组的元素时,由于尝试访问不存在的项目,我们会收到错误消息。这是一个坏习惯,应该避免,有更好的方法可以在python中实现类似的功能,其中包括列表理解:
也可以使用filter函数来实现相同的功能,虽然它起到了作用,但还是有人认为这不是Pythonic的方法,我有还是些同意的,但是我不想在这里讨论它们。让我们继续吧:
3、闭包中的变量绑定
我向一些python的前辈询问他们对以下代码片段的看法:
对于许多人(包括我自己),第一次遇到此问题时,我们认为结果将是:
但是,实际上代码最终打印了完全不同的结果,我们对为什么感到非常困惑。原来是Python会执行后期绑定行为,根据该行为,在调用内部函数时会查询闭包中使用的变量的值。因此,在我们的示例中,每当调用任何返回的函数时,都会在调用i时在周围的范围中查找的值。解决此问题的方法似乎有些棘手,但实际上却很有效
通过使用lambda函数的默认参数传递值,i可以生成函数以执行所需的行为。我对这种解决方案感到非常困惑,但我仍然认为它不是很优雅,但是有些人喜欢它。如果你知道该问题的另一种解决方案,请您在评论中让我知道,我很乐意阅读有关该问题的信息。
4、名称与Python标准库模块冲突
当我刚开始学习时,这个问题实际上很普遍,甚至现在,有时我也会犯这个错误。出现此问题的原因是使用与Python随带的标准库中的模块相同的名称来命名你的一个模块。(例如,你的代码中可能有一个名为email.py的模块,这与同名的标准库模块发生冲突)。
也许名称本身冲突不会对你的代码产生任何问题,但是有时我们会覆盖Python标准库的功能或模块,该功能或模块稍后在已安装的库中使用,并且会引发错误或行为不当而发生冲突,这是一个糟糕的情况。一个典型的错误如下:
通过简单地创建一个list变量,然后我们中断了对该list函数的访问。并且,即使还有其他访问方式(例如__builtins__.list()),我们也应该避免使用这种名称。
最后
本文并没有涵盖开发人员在使用Python进行编码时所犯的所有常见错误,而是涵盖了我最苦恼的那些事情。如果你想了解更多有关如何编写出色的Python代码并避免其他错误的信息,我建议你订阅我的下一篇文章。
相关推荐
- 安全教育登录入口平台(安全教育登录入口平台官网)
-
122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...
- 大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)
-
大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...
-
- 哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
-
要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...
-
2026-02-04 09:03 off999
- 电信宽带测速官网入口(电信宽带测速官网入口app)
-
这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...
- 植物大战僵尸95版手机下载(植物大战僵尸95 版下载)
-
1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...
- 免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)
-
1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...
- 2025世界杯赛程表(2025世界杯在哪个国家)
-
2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...
- 下载搜狐视频电视剧(搜狐电视剧下载安装)
-
搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...
- 永久免费听歌网站(丫丫音乐网)
-
可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...
- 音乐格式转换mp3软件(音乐格式转换器免费版)
-
有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...
- 电子书txt下载(免费的最全的小说阅读器)
-
1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...
- 最好免费观看高清电影(播放免费的最好看的电影)
-
在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...
- 孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)
-
要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...
欢迎 你 发表评论:
- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
