当前位置: 首页 > news >正文

【深度】Python程序员经常踩得那些坑(2)

前言

在这篇文章中,我将总结新老Python程序员常犯的一些错误,以帮助你们在自己的工作避免犯同样或类似错误。首先我要说明一下的是,这些都是来源于第一手的经验。我以讲授Python的知识为生。在过去的7年里,我已经给上千名学生讲授上百堂Python的课程,同时看着这些学生们犯同样的错。。如果你想读到更多的Python的常见错误以及如何避免它们,那么在O’Reilly系列丛书的《Learning Python》里有详细的解读。

2

代码错误

一旦你开始认真写Python代码了,接下来了一堆陷阱就更加危险了——这些都是一些跨语言特性的基本代码错误,并常常困扰不细心的程序员。

别忘了冒号

这是新手程序员最容易犯的一个错误:别忘了在复合语句的起始语句(if,while, for等语句的第一行)结束的地方加上一个冒号“:”。也许你刚开始会忘掉这个,但是到了很快这就会成为一个下意识的习惯。课堂里75%的学生当天就可以记住这个。

初始化变量

在Python里,一个表达式中的名字在它被赋值之前是没法使用的。这是有意而为的:这样能避免一些输入失误,同时也能避免默认究竟应该是什么类型的问题(0,None,””,[],?)。记住把计数器初始化为0,列表初始化为[],以此类推。

从第一列开始

确保把顶层的,未嵌套的代码放在最左边第一列开始。这包括在模块文件中未嵌套的代码,以及在交互提示符中未嵌套的代码。Python使用缩进的办法来区分嵌套的代码段,因此在你代码左边的空格意味着嵌套的代码块。除了缩进以外,空格通常是被忽略掉的。

缩进一致

在同一个代码块中避免讲tab和空格混用来缩进,除非你知道运行你的代码的系统是怎么处理tab的。否则的话,在你的编辑器里看起来是tab的缩进也许Python看起来就会被视作是一些空格。保险起见,在每个代码块中全都是用tab或者全都是用空格来缩进;用多少由你决定。

在函数调用时使用括号

无论一个函数是否需要参数,你必须要加一对括号来调用它。即,使用function(),而不是function。Python的函数简单来说是具有特殊功能(调用)的对象,而调用是用括号来触发的。像所有的对象一样,他们也可以被赋值给变量,并且间接的使用他们:x=function:x()。
在Python的培训中,这样的错误常常在文件的操作中出现。通常会看到新手用file.close来关闭一个问题,而不是用file.close()。因为在Python中引用一个函数而不调用它是合法的,因此不使用括号的操作(file.close)无声的成功了,但是并没有关闭这个文件!

在Import时不要使用表达式或者路径

在系统的命令行里使用文件夹路径或者文件的扩展名,但不要在import语句中使用。即,使用import mod,而不是import mod.py,或者import dir/mod.py。在实际情况中,这大概是初学者常犯的第二大错误了。因为模块会有除了.py以为的其他的后缀(例如,.pyc),强制写上某个后缀不仅是不合语法的,也没有什么意义。
和系统有关的目录路径的格式是从你的模块搜索路径的设置里来的,而不是import语句。你可以在文件名里使用点来指向包的子目录(例如,import dir1.dir2.mod),但是最左边的目录必须得通过模块搜索路径能够找到,并且没有在import中没有其他路径格式。不正确的语句import mod.py被Python认为是要记在一个包,它先加载一个模块mod,然后试图通过在一个叫做mod的目录里去找到叫做py的模块,最后可能什么也找不到而报出一系列费解的错误信息。

不要在Python中写C代码

以下是给不熟悉Python的C程序员的一些备忘贴士:

o    在if和while中条件测试时,不用输入括号(例如,if (X==1):)。如果你喜欢的话,加上括号也无妨,只是在这里是完全多余的。

o    不要用分号来结束你的语句。从技术上讲这在Python里是合法的,但是这毫无用处,除非你要把很多语句放在同一行里(例如,x=1; y=2; z=3)。

o    不要在while循环的条件测试中嵌入赋值语句(例如,while ((x=next() != NULL))。在Python中,需要表达式的地方不能出现语句,并且赋值语句不是一个表达式。

    目前《Learning Python》中文版《Python学习手册》第五版正在京东和当当上架销售,本书根据Python专家Mark Lutz的著名培训课程编写而成,是易于掌握和自学的Python语言教程。

书中以目前主流的Python 3.X为主,同时兼顾Python 2.X的内容,全面、系统讲解Python语言核心知识,每个知识都会以知识点、思想、示例代码的方式详细展开,由浅入深,循序渐进。同时每章都配有章后习题、编程练习及详尽的解答,并且还配有大量注释、示例和图表,便于你学习新的技能和巩固加深自己的理解。无论你从事哪个领域,本书都为你提供了未来全部Python工作的必备知识。

扫码即可立即下单购买本书

相关文章:

  • 【今日新闻】11.20
  • 【活动】BDTC 2018 中国大数据技术大会首曝日程及议题
  • 【今日新闻】11.22
  • 【深度】Python程序员经常踩得那些坑(3)
  • 【云原生分布式存储】成书心路历程
  • 《机•智》读者沙龙在京成功举办
  • 一文读懂人工智能的前世今生(建议收藏)
  • 跟着阿里大牛捞干货:2019这5本书带你玩转大数据
  • 人工智能入门书单
  • 谷歌最新开源前端框架了解一下?前端小白都能看懂的8本书
  • Office办公软件各种神操作,看到第1个就傻眼了,建议收藏
  • 【书单】Python图书推荐
  • AI删库,程序员背锅?
  • Flutter开发相比React-Native优势在哪里?高手为你答疑解惑!
  • Linux 末路,Kubernetes 崛起!
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【391天】每日项目总结系列128(2018.03.03)
  • Django 博客开发教程 8 - 博客文章详情页
  • Java知识点总结(JavaIO-打印流)
  • Linux gpio口使用方法
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Protobuf3语言指南
  • 基于Android乐音识别(2)
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 聊聊hikari连接池的leakDetectionThreshold
  • 世界上最简单的无等待算法(getAndIncrement)
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 交换综合实验一
  • ​渐进式Web应用PWA的未来
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #FPGA(基础知识)
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #stm32整理(一)flash读写
  • #vue3 实现前端下载excel文件模板功能
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $.ajax,axios,fetch三种ajax请求的区别
  • (1)虚拟机的安装与使用,linux系统安装
  • (13):Silverlight 2 数据与通信之WebRequest
  • (4.10~4.16)
  • (LeetCode 49)Anagrams
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (算法)求1到1亿间的质数或素数
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转)大道至简,职场上做人做事做管理
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • ./configure、make、make install 命令
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET 依赖注入和配置系统
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题