对于程序员来说,其实Tab和空格远远不只是“立场”问题那么简单。

在不同的编辑器里tab的长度可能不一致,所以在一个编辑器里用tab设置缩进后,在其它编辑器里看可能缩进就乱了。空格不会出现这个问题,因为空格就占一个字符的位置。

众所周知,Tab在ASCII码中,编码是9,而空格是32。这也就是说,当我们按下一个Tab的时候,即使它看起来就是8个空格(或者4个空格,不同的环境下,Tab可能显示的效果不同),对于电脑来说,却是完全不一样的东西。这也意味着,对于用字符来描述过程的代码来说,极有可能会是决定性的差异。

尤其是对于一门用空格缩进来区分代码层次的语言——Python。

我们来看一段代码。

看起来这个value3变量和其他的变量没有什么不同,然而却出现了这样的报错——缩进错误。

value3 = StringField('value3')

^

IndentationError: unexpected indent

其实Python并没有强制要求你用Tab缩进或者用空格缩进,甚至空格按几个都没有强制要求(但在PEP8中建议了使用4个空格作为缩进:https://www.python.org/dev/peps/pep-0008/),但是却绝对!绝对不能混用Tab和空格,那么这里,是不是空格和Tab的区别就显得很大了呢?

这个时候有的童鞋就要说了,我用PyCharm(或者其他IDE)怎么从来都没有出现这样的问题呢?

其实,很多IDE对Tab键做了各种各样的优化,其中有一条就是,将Tab键展开为为空格,也就是说,当你按下Tab的时候,IDE实际上帮你把一个「9」转换成了四个(或者八个)「32」。但是要注意,不是所有的IDE都帮你做了这样的工作!同理,对于好纯洁好不做作的编辑器Vim来说,肯定也不会帮你做这样的工作了。

既然Tab在不同的环境下展现不一样,而空格却永远都是一样的。对于一些细致排版缩进来说(比如说想把每一行的注释都对齐),用空格也更加精确。这样看起来,确实是用空格来写代码要好于用Tab呢。

空格代替Tab的好处:

1. 空格在各种情况下代码都是你想要的样子。而 tab 仅仅当你与代码作者的 tab 尺寸设定为相同时,代码才好看。修改 tab 尺寸并不能解决这个问题,因为你很难做到每打开一个文件就修改一次 tab 尺寸,而每个人通常有不同的习惯(POSIX/Unix 标准的 tab 应当为 8 字符宽度,Linus 大神也规定 Linux 内核中所有代码的 tab 尺寸为 8)。如果存在行尾注释,则 tab 尺寸更加是必须设定为与作者相同,这就意味着你看不同的代码需要经常修改 tab 尺寸。我看过许多代码,其使用的 tab 尺寸有从 2,3,4,5,6,8,16 甚至 32 的,如果你使用的 tab 尺寸与作者不同,外观将很不理想。

2. 靠谱的IDE都能解决前进后退增加减少缩进的问题,即便是四个空格,一个退格键也能全退了,所以在使用的方便性方面根本不存在问题。——如果抱怨删除调整还不能有效解决的,你需要研究一下你的编辑器了。实际上增加减少缩进在主流编辑器中都直接有快捷键,无论是 tab 还是空格还是退格都很少直接被用于缩进。

3. tab 是制表符而不是缩进符,正如在 html 页面中大量使用

一般情况下,团队开发都要制定一套编码规范, 在大部分团队中,使用4个空格代替Tab是大家默认的。所以非常建议大家使用空格代替Tab, 另外各个IDE(编辑器)都提供了tab自动转换空格的功能,只要大家设置一下,按下tab键就可以出现4个或者多个空格。

python语言的缩进可以采用tab键实现吗_python中使用空格还是使用 Tab键缩进的建议...相关推荐

  1. python中一般使用几个空格表示缩进_python中使用空格还是使用 Tab键缩进的建议...

    对于程序员来说,其实Tab和空格远远不只是"立场"问题那么简单. 在不同的编辑器里tab的长度可能不一致,所以在一个编辑器里用tab设置缩进后,在其它编辑器里看可能缩进就乱了.空格 ...

  2. python语言使用不需要付费不存在商业风险_python+-中国大学mooc-题库零氪

    第1章 程序设计基本方法 第1章 程序设计基本方法 单元测试 1.Python语言最早的可用版本诞生于(). A.1988年 B.1989年 C.1990年 D.1991年 2.Python语言的创始 ...

  3. python语言是由谁设计并领导开发的_python语言概述 - osc_lt3ocv4d的个人空间 - OSCHINA - 中文开源技术交流社区...

    python语言的发展 python语言诞生于1990年,由Guide van Rossum设计并领导开发. python语言是开源项目的优秀代表,其解释器的全部代码都是开源的. 编写Hello程序 ...

  4. 通常我们将python语言程序保存在一个后缀_【单选题】通常我们将Python语言程序保存在一个后缀为( )的文件中。...

    问题:[单选题]通常我们将Python语言程序保存在一个后缀为( )的文件中. 更多相关问题 谢某对某公安局以其实施盗窃为由处以15日拘留的处罚不服,向法院提起行政诉讼.该局向法院提供的证 下列关于刑 ...

  5. python语言解释器的全部代码都是开源的_Python IDE和解释器的区别是什么?

    经常会有刚刚入门Python的初学者把Python IDE与Python解释器弄混,其实它们是有本质区别的,有些人还会误认为配置Python环境就是配置IDE工具.那么,Python IDE和解释器的 ...

  6. Vim中设置空格(space)代替tab键

    设置空格字符代替tab键,可以使用'expandtab'选项 :set expandtab 设置多少空格字符数量代替tab键,可以使用'tabstop'选项,例如,使用4个空格字符代替tab键 :se ...

  7. 关于python语言、下列说法不正确的是-下列语句中,___________是不正确的Python语句...

    问题:下列语句中,___________是不正确的Python语句 更多相关问题 2,11,14,27,()A.34B.32C.30D.28 二氧化硫是造成酸雨的重要原因.某地区饱受酸雨困扰,为改善这 ...

  8. python 英文字符频率统计 采用降序方式输出_Python读取英文文件并记录每个单词出现次数后降序输出示例...

    本文实例讲述了Python读取英文文件并记录每个单词出现次数后降序输出.分享给大家供大家参考,具体如下: 对文中出现的句号,逗号和感叹号做了相应的处理 sorted排序函数用法: 按照value值降序 ...

  9. 《python语言程序设计》第5章 课程内的笔记 中for循环转换成while

    python 里for循环转换成while 这次是第3次尝试成功的记录和心得 请将以下for循环变成while sum = 0for i in range(1001):sum += iprint(su ...

最新文章

  1. POM.xml 标签详解
  2. 二十一、oracle pl/sql分类一 存储过程
  3. 渗透测试之子域到父域的横向移动(Sid History)
  4. [译] 每天一段 Spring 5 官方文档(5.1.4.RELEASE)—— Spring Framework Overview 06
  5. Linux 最常用命令
  6. 线性共轭梯度法python_python实现的共轭梯度法
  7. 度量时间差和jiffies计数器
  8. NS2:undefined reference to `xxx' collect2: error: ld returned 1 exit status
  9. java 谓词_java8-谓词(predicate)
  10. matlab fbb,[求助]请教如何将modelsim仿真的输出结果导入到matlab中分析
  11. 卷积神经网络实现多个数字识别
  12. presto 正则提取函数
  13. MySQL 常用函数大全
  14. python pandas库用法_Python使用Pandas库常见操作详解
  15. 新浪微博Python登陆
  16. vivado error:Multiple declarations of unsigned included via multiple use clauses
  17. 数据库实验系列之1数据库及数据库中表等数据库对象的建立实验(包括关系图、完整性、权限控制、视图、索引等内容)
  18. 激光位移传感器与其他位移传感器比较
  19. 计算机语言26个字母,C 语言实例 - 循环输出26个字母
  20. mybatis替代mysql_怎样将mybatis替换成nutz,求大神指导

热门文章

  1. 果园机器人的写作思路_《果园机器人》三年级教学设计
  2. mysql group 索引失效_介绍mysql索引失效的情况
  3. android8.0华为荣耀8,一线|华为手机开启重大升级 荣耀成安卓8.0覆盖机型最多品牌...
  4. leetcode 每个结点的右指针 python
  5. [JLOI 2016]成绩比较
  6. 小tips:JS之浅拷贝与深拷贝
  7. 接口测试第二课(Fiddler实现APP抓包)
  8. ANT发送邮件需要的3个JAR包
  9. SilverLight学习笔记--进一步学习Isolated Storage独立存储一(理论篇)
  10. 如何防止在ListBox中添加很多数据出现不停的刷新?