N年Python老司机,血泪总结新手常见10大错误

作为python的新手,大家在上手python的时候都会或多或少的接触到一些rookie mistake,也就是菜鸟级别的错误。小编作为一个老司机也是从这些错误中一点一点的积累经验,才慢慢的能够熟练的使用python。

遇到错误不可怕,关键是要学会如何去避免犯这些错误。今天小编就带领大家看一下作为python新手最常见的几个错误,希望大家能够在学习的过程中,尽量的去避免这些错误。

1.默认可变对象

上图中,我们定义了addElement函数,在函数的形参中,我们默认使用了可变对象list。当我们连续的使用默认参数调用addElement函数时,可以发现list1只被创建了一次。由于list属于python中的可变对象,因此只在函数被定义的时候才能被创建一次,所以在调用的时候都使用的创建好的同一个list列表。而对于不可变对象,情况就不同了,如下图所示。

对于不可变对象,程序在调用函数时,将不可变对象作为默认参数进行调用。那么我们如何解决这个问题呢,我们可以利用不可变对象进行判断解决,程序如下图所示。

我们利用条件判断,list1是否为None,来决定是否创建新的列表,以此来解决上述的问题。

2.浅拷贝和深度拷贝问题

上述程序中,我们创建了字典dict1。并通过浅拷贝将dict1拷贝给dict2,通过copy库中的deepcopy(深拷贝)将dict1拷贝给dict2。可当删除dict2中的键值为’2’中的子对象的元素后,dict1中的对应元素也被删除了,而dict3却还保留。这就是浅拷贝和深拷贝的区别。如下图所示。

浅拷贝只是拷贝了父对象,但是对于子对象还是引用的同一个对象。而对于深拷贝,则是完全将子对象和父对象拷贝了一份出来,各自都有独立的子对象。

3.切记不要用官方库文件名来命名自己的文件

这里的官方库指的是大家需要import的库,这里小编统称为官方库。如下图所示。

小编创建了一个py文件,并命名为numpy。当小编想要调用大名鼎鼎的“numpy”时,此时程序报了找不到属性的“array”的错误。原因就是小编将自己的py文件命名为了numpy,程序便会自动的在当前文件里面找“array”这个属性。结果可想而知,当然找不到啦,所以小编提醒大家,千万不要将自己文件的名称与官方库撞名,不然会出大问题。

4.学会迭代器的使用

Python作为一个非常方便快捷的语言,很多元素都具有可迭代性,我们要充分利用好这些性质,如下图所示。

我们想要对list对象中的所有元素执行addOne函数,传统的也是标准的方法是利用for循环来实现,就如第一种方法。但是由于list对象是可迭代对象,我们完全可以利用好这个优势,一行代码就搞定这个问题,如第二种方法所示。所以充分利用好python中一些可迭代对象的性质,会节省很多的代码,同时也让我们少犯错误。

5.频繁的使用全局变量

作为python的初学者,大家都喜欢定义全局变量,并在函数中改变全局变量,不可否认的是某些地方需要在函数中改变全局变量,但是这样的方法会对程序带来伤害,程序的安全性会变得脆弱。大家需要在平时的编程中改变这种习惯,如下图所示。

在编程时,我们应该尽量使用传参的形式来使用全局变量,而不是直接修改全局变量。因为全局变量大多数情况下是所有的函数共享的变量,为了保证程序的安全,不应该随便被改变,除非在程序设计的时候,要求去改变全局变量。

6.明确是python2还是python3

在初学python的时候,大家可能会被python2还是python3搞得手足无措,无法及时的在python2和python3的语法中进行切换,大家需要明确自己使用的python版本,因为python2与python3区别还是比较多的,因此大家需要格外小心,如下图所示。

由于python2和python3中的输出表达形式不同,所以大家需要在使用print函数时,在python3版本后面加小括号进行输出。

7.分不清”is”和“==”的区别

对于“is”和“==”的使用 ,大家平时多用来判断两个值是否相等,但是这“相等”在python中也有不同的概念,我们要区分是地址相等还是数值相等,如下图所示。

上述程序中我们分别利用is和==俩判断两个列表是否相等,可以看出,is是判断两个列表的地址是否相等,而==是看两个列表中的数值是否一致。大家可以记住一个顺口溜:is看地址,等号看内容,这样再使用is和==进行元素判断时就不会再犯错误了。

8.将python的关键字作为变量名称

作为python的初学者,往往会搞不清楚python的关键字有哪些,从而会使得程序报错。

上述的程序中,我们利用关键字“class”来创建新的类别,这会导致程序报错,同时我们可以发现,编辑器对于关键字的提示是不同的颜色提示,告诉我们使用的是关键字,从而让我们注意不要使用关键字作为变量名称。

9.使用未定义的局部变量

对于局部变量,我们在调用它的时候需要确保它被定义,如下图所示。

对于printLocalNum1,我们没有定义localnum就调用它 ,结果必然报错,但是在printLocalNum2中,我们通过判断输入的大小,给localnum进行赋值,然后输出localnum的结果,这里,我们通过if else做了完全的判断,确保无论在何种数值(注意必须是数值)输入下,localnum都会被进行赋值,从而不会调用未定义的localnum。

10.规避++操作和—操作

Python虽然语法简单,但是对于C++、java中的++或者—的自增和自减操作是不支持的,原因是为什么呢?小编给大家一个我个人的理解,由于在python中整数是不可变类型,创建之后就不能被改变,而自增和自减就是将原先地址里的数值进行改变替换,这与python不可变类型相违背,因此就无法实现自增或者自减操作了。

以上10条信息是小编个人在N年的漫长python学习生涯中总结出来的新手常见的错误,具有很高的代表性,希望大家能够引以为戒,不要犯同样的错误。

原文地址:https://www.cnblogs.com/7758520lzy/p/12598962.html

时间: 2024-07-30 00:49:35

N年Python老司机,血泪总结新手常见10大错误的相关文章

万字长文带你成为Python老司机

万字长文带你成为Python老司机 前言: 本文主要总结项目开发中和面试中的Python高级知识点,是进阶Python高级工程师必备要点. 主要内容: No.1 一切皆对象 众所周知,Java中强调"一切皆对象",但是Python中的面向对象比Java更加彻底,因为Python中的类(class)也是对象,函数(function)也是对象,而且Python的代码和模块也都是对象. Python中函数和类可以赋值给一个变量 Python中函数和类可以存放到集合对象中 Python中函数和

python老司机带你玩玩炫酷的3D渲染,酷毙了!

自从学会了turtle模块后,画了不少简笔画.像小猪佩奇.哆啦A梦等等,但是这些依然不能让身边人感受到python的强大,依然是每次装逼必被打脸.就像你用turtle画了这个 别人拿出了这个 怎么办?面对函数库如此丰富的python,一库不行,我们还有另一库.那就是pyray库. pyray库介绍 pyray库创建于2018年1月,虽然目前渲染3D场景的最佳工具仍然是POV ray.但是为什么我们不能在Python中使用这种功能(渲染2D.3D和更高维的对象和场景),这是一种可能已经被广泛使用的

Master the 10 Most Common Python Programming Problems - 10大最常见的Python编程错误

http://blog.csdn.net/pipisorry/article/details/45175457 Introduction 本文介绍python编程中很难捕捉10大错误 (Note: This article is intended for a more advanced audience than Common Mistakes of Python Programmers, which is geared(适合) more toward those who are newer t

老司机带你用vagrant打造一站式python开发测试环境

前言 作为一个学习和使用Python的老司机,好像应该经常总结一点东西的,让新司机尽快上路,少走弯路,然后大家一起愉快的玩耍. 今天,咱们就使用vagrant配合xshell打造一站式Python开发测试环境. 目的 让你在Windows下,也能愉快的使用Linux环境调试Python. 适用人群:Python新手和希望在Windows下使用Linux环境调试Python的小伙伴们. 难度:super easy 最终效果:只用一个xshell终端(其他类似的都可以),启动ubuntu虚拟机,py

这几段代码,测测你是 Python 菜鸟还是老司机

这段话被称作“Python 之禅”(The Zen of Python),它列举了一些 Python 所推崇的理念,比如: 优美胜于丑陋 明确胜于隐晦 简单胜于复杂 … 可读性很重要 不要忽略错误 面对不确定时,拒绝猜测 现在做 好过不做,但盲目动手不如不做 如果你的实现很难说清楚,那是个坏想法:反之亦然 … 当你学完基础,可以写点代码的时候,可能经常感觉自己的实现很别扭.有经验的程序员会一眼看出你的代码出自一个初学者之手.这就是我们经常说的,代码不够 pythonic. 所谓 pythonic

老司机学python篇:第一季(基础速过、机器学习入门)

详情请交流  QQ  709639943 00.老司机学python篇:第一季(基础速过.机器学习入门) 00.Python 从入门到精通 78节.2000多分钟.36小时的高质量.精品.1080P高清视频教程!包括标准库.socket网络编程.多线程.多进程和协程. 00.Django实战之用户认证系统 00.Django实战之企业级博客 00.深入浅出Netty源码剖析 00.NIO+Netty5各种RPC架构实战演练 00.JMeter 深入进阶性能测试体系 各领域企业实战 00.30天搞

CSDN日报20170516 ——《 驱动小白和硬件老司机关于硬件那点事儿的一次密谈》

程序人生 | 驱动小白和硬件老司机关于硬件那点事儿的一次密谈 作者:老王 做驱动的永远都和做硬件的是一对欢喜冤家啊,与其事后出事两相埋怨,还是事先我们多多沟通,避免设计上的疏漏吧. 点击阅读全文 Android | Android 仿火萤视频桌面 神奇的 LiveWallPaper 作者:张鸿洋 前段时间基本被一款叫火萤视频桌面的软件(就是将视频作为桌面)给刷屏了,所以看了下作者的代码,看到了 SurfaceHolder,立刻想到了,肯定可以用来播放视频实现视频桌面的效果,于是周末尝试了下,果然

“老司机”教你如何停车!

停车入位主要有两种情形,一种是路边停车,一种是停车场停车.在这两种情形下,停车技巧略有区别. 路边停车 对于新手来说,在路边的串联式(纵列)停车位停车是难度特别大的一种 路边顺向停车,一般刚接触实际道路驾驶的时候会遇到,如果只有一个车位时,那就选择倒车入位. 向前开,让自己的车尾与前车尾对齐.两车相距1米,停车.原地往右打足方向盘,成45度角慢退.当自己车头与前车车尾成一直线时,迅速将方向盘向反方向打足,慢退,车就基本能停好了. 在这里,专家为一些刚刚上路的新手提供一些建议,在路边停车时,要记住

11月10日直播:EVE-NG模拟器入门和老司机心得分享,你来不来?

大家好. 今天要告诉你们一个好消息,本周六11月10号早上10点到11点. 我计划开一个直播和你们一起聊聊如何入门EVE-NG模拟器. 说起EVE-NG,相信很多人都多多少少听说过. 它和GNS3,以及思科的VIRL,Packet-tracer一样,均算是设备仿真一类的软件. 说白了就是模拟器. 但是EVE-NG相比GNS3,我个人认为使用体验和便捷程度更上一层楼. 所以从2017年开始,我就已经慢慢把自己的网络模拟器从GNS3迁移到EVE-NG. 因此我在写<老司机网络运维集锦>以及<