Python 初学者常犯的5个错误

来源 :电脑报 | 被引量 : 0次 | 上传用户:weinziel
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  Python是一种高级的动态编程语言,它以易于使用著名。目前Python社区已经非常完善了,近几年它的发展尤为迅猛。但是易于使用同样能带来一些坏处,即易于误用。在本文中,我们列举了 初学者常犯的5 个错误,希望它们能帮助初学者写更加正确与优美的代码。
  1. 可变的缺省参数
  Python 中的缺省参数会在执行函数定义时计算一次,这表示在函数完成定义后该表达式只执行一次,因此缺省值可以用于后续的每一次调用。如果我们令缺省参数为可变的,例如列表或字典等,那么对于将来所有的调用,该参数都是一直保留且可变的。
  如下为不正确的表达方式,如果我们第一次调用 add_item 增加「a」时,items=[『a』]。当我们第二次调用 add_item 增加「b」时,由于定义中的 items=[] 只在初始化的时候运行一次,因此这时的 items=[『a』, 『b』]。
  尤其是当我们在调用 add_item 函数时没传入任何参数,那么 items 还是能保留以前记住的内容,相当于将以前的内容泄露给了后续的调用。
  def add_item(new_item, items=[]):
  items.append(new_item)
  正确的表达方式应该是如下,在我们没传入 items 时应该要将它初始化为空白列表:
  def add_item(new_item, items=None):
  if items is None:
  items = []
  items.append(new_item)
  2. 将 assert 声明语句作为保证条件
  因为 assert 语句很容易检查一些条件是否满足或执行是否正确,开发者经常用它来检查某部分代码的有效性。但是当 Python 解释器调用时带了-O (optimize) flag,那么 assert 语句会从字节码中移除。所以,如果 assert 语句在面向用户验证的产品代码中,根本就不会执行,因为它可能会造成一些安全漏洞。
  因此開发者应该只在测试中使用 assert 语句,不正确的示例如下:
  assert re.match(VALID_ADDRESS_REGEXP, email) is not None
  正确的代码要改成:
  if not re.match(VALID_ADDRESS_REGEXP, email):
  raise AssertionError
  3. 使用 isinstance 代替 type
  type 和 isinstance 都能检查某个对象的类别是什么。但是它们间有非常重要的区别,isinstance 在解析目标类型时,它会关注继承关系,而 type 并不会。正因为这个区别,isinstance 在某些时候并不是我们所想的那样。例如以下案例:
  def which_number_type(num):
  if isinstance(num, int):
  print(‘Integer’)
  else:
  raise TypeError(‘Not an integer’)
  which_number(False) # prints ‘Integer’, which is incorrect
  因为布尔类型的变量在 Python 中是 int 的子类,isinstance(num, int) 同样会得出 True,这并不是我们想要的。在特定的类别中,使用 type 可能更加正确。
  4. 不必要的 lambda 表达式
  函数在 Python 中是最常用的结构,我们能将函数赋值给某个变量,并将该变量作为参数传递给另外一个函数,这也是函数常见的用法。但这对于初学者或了解其他编程语言的开发者而言,这种传递方式是非常反直觉的。
  一个比较常见的模式可以表示为:
  def request(self, method, **kwargs):
  # ...
  if method not in (“get”, “post”):
  req.get_method = lambda: method.upper()
  # ...
  上面采用匿名函数 lambda 的方式,最好可以改成以下:
  def request(self, method, **kwargs):
  # ...
  if method not in (“get”, “post”):
  req.get_method = method.upper
  # ...
  5. Raising NotImplemented
  这种命名可能会使开发者感到困惑,NotImplementedError 是一种 exception 类,当派生类需要重写某个方法时,Python 应该触发这类错误。而 NotImplemented 是一个常量,它用于实现二进制操作。当我们触发 NotImplemented 时,Python 会给出「TypeError」的报错。
  错误的例子:
  class SitesManager(object):
  def get_image_tracking_code(self):
  raise NotImplemented
  正确表达方法应该是:
  class SitesManager(object):
  def get_image_tracking_code(self):
  raise NotImplementedError
其他文献
【中图分类号】R683.2【文献标识码】C【文章编号】1550-1868(2015)04  【摘要】目的:分析研究康复治疗路径在胸腰段脊柱脊髓损伤患者治疗中的作用。方法:选取胸腰段脊柱脊髓损伤患者10名,分为对照组和实验组各5名。实验组和对照组分别进行为期6个月的康复治疗,并记录康复过程。实验组使用康复治疗路径进行手术后康复,对照组只需进行普通的观察治疗即可。结果:实验组的患者康复情况明显好于对照
期刊
说到当前智能手机的快充方案,一个绕不开的品牌就是OPPO。  上周二,OPPO正式发布了旗下最新的智能手机快充方案,其包含:最大充电功率为65W的SuperVOOC 2.0,最大充电功率为30W的无线VOOC闪充和VOOC 4.0。  按照发布会上OPPO闪充团队负责人张加亮的说法,在智能手机的快充方案上,OPPO已经有了多年的技术积累。通过VOOC闪充技术平台,OPPO成功改变了大家对于充电的认
期刊
【中图分类号】R952【文献标识码】A【文章编号】1550-1868(2014)11  【摘要】高危药品是指药理作用显著且迅速、易危害人体的药品。包括高浓度电解质制剂等。美国的医疗安全协会(ISMP)将若使用不当会对患者造成严重伤害或死亡的药物称为“高危药物”。其特点是出现的差错可能不常见,而一旦发生则后果非常严重。而氯化钾是ISMP确定的前五位高危药品中的第三位。氯化钾是临床常用的电解质平衡调节
期刊
9月11日凌晨,一年一度的科技春晚如约而至,“致创新”的slogan并没有让大家看到让人惊艳的设计与改进。在发布会上,苹果表示A13的GPU性能远远超越了骁龙845、骁龙855以及麒麟980处理器,看到价格之后,不少网友纷纷表示自己的iPhone 6s还能再战好几年。今天,编辑就告诉大家几个办法来整理iPhone 6s的存储空间和电池,没准真能让它再用好几年。  网友:为何不买新iPhone?它太
期刊
日常工作中,Excel是办公用户使用频率非常高的办公软件之一,但有时由于缺乏技巧,一个极其简单的问题,用户可能需要耗费几个小时来解决,这里介绍两则比较实用的技巧,可以帮你大大提高效率。  技巧1:转置粘贴  Excel的复制粘贴有多种形式,尤其是复制带公式、格式的数据时,可以根据需要灵活使用粘贴功能,如可以将原来以列排列的数据粘贴为以行排列的形式:如图所示的数据,现在需要将它粘贴到下面的行,首先选
期刊
Q:牛大叔,前些天你在微信上告诉大家要买XPS 13 9360就赶快,说要停产了,请问具体是什么情况?  A:XPS 13有很多版本,其中最传统的模具,带有60Wh电池和USB大口的就是9360,而9360也是体验最佳、易用性最佳的一代,最重要的是,也是价格最便宜的一代。不过现在为了推进新款XPS 13(包含9380和最新的7390),戴爾近日停产了9360,市场中还有一些余货,卖完就没有了,所以
期刊
在实际工作中,有的办公人员经常需要将二维表向一维表进行转换,如图1所示,这份工资审核表的第一行就是一条记录,不同的行代表不同人的工资;工资表中又分很多列,也可以称为字段、属性,代表每个人工资的详细内容,二维表的一个特点就是根据行、列来确定具体的内容,其实Excel表本身就是设计为一个二维表。现在,办公人员需要将上述二维表中工资的具体内容转换为一个分类字段,该如何操作呢?其实利用Power Quer
期刊
你敢信吗?80%的酒店,在被你忽视的角落,都藏着摄像头。情侣酒店、校门口的小旅馆、公共厕所更是偷拍重灾区,就连优衣库试衣间,也被发现过有针孔摄像头,租房搬迁的时候也要注意。有些偷拍视频,会被不法分子卖到不良网站上,更有甚者,会进一步售卖受害人的联系方式,听听这是人干的事吗?今天师姐就安利你们一个神器,绝不放过任何一个摄像头!  打个广告,想入手其他好物的小可爱记得加师姐微信(微信号:yhmd080
期刊
又到了秋高气爽、落叶满地的秋季,炎热的煎熬终于结束了。这本该是一个令人心旷神怡的好时节,但是对于二哥身边不少有鼻炎的编辑同事来说,恐怕又是另一个“噩梦”的开始。  梦魇般的鼻炎  现在城市的空气质量差,身边的鼻炎患者越来越多。鼻炎跟生活环境关系密切,难以根治,主要是缓解症状为主。鼻炎的主要症状是鼻子痒、流鼻涕、鼻塞。如果你经常觉得鼻子痒痒的、想打喷嚏却打不出来,就要注意了,这可是鼻炎的“万恶开端”
期刊
如果大家有玩过《量子破碎》的话,对《控制》这款游戏应该会有几分熟悉的感觉,因为这也是一款用超自然力量来进行战斗的作品,这也就意味着它对视觉渲染和操控方式都有比较高的需求,而且也并不是任何笔记本都能随便带动的,所以问题来了,现有的游戏本平台能把它玩到什么地步呢?  推荐配置GTX 1660/1060,对笔记本还算友好  《控制》的开发商是Remedy,没错,正是《量子破碎》和《马克思佩恩》系列的创作
期刊