Python 为什么不用分号作终止符?
一般而言,编程语言中使用分号“;”来实现两种目的:
- 作为语句分隔符:使用分号来分隔语句(statement),这样就能在一行代码中书写多条语句(一行多句)
- 作为语句终止符:使用分号来终止语句,这样就能把多行代码识别为一条语句(一句多行)

单纯看“分隔符”与“终止符”,它们都是必须的,然而是否都要用分号来表示呢?这个问题没有达成一致的标准。
Python 中使用了分号作为语句分隔符,但是不用分号作为终止符, 而是用了换行作为终止符。

若在一句完整的语句末尾加了分号,然后换行,那么 IDE 一般会提示“Trailing semicolon in the statement”,提示着这个“尾随分号”是多余的。
按我粗浅的理解,尾随分号实际会被当成分隔符,只不过它后面是“空语句”,然后是换行(即终止符)。分隔空语句是无必要的,所以尾随分号就成了多余的。

Python 不用分号作为终止符,大概有如下的原因:
- 它把缩进和换行当成文法的有效部分,可以表达出完整的语义,不会导致编译时的歧义。这是最主要的原因,是跟“分号党”的根本区别
- 不用分号与花括号,但是使用缩进和冒号,这是一脉相承的思路,总体上形成了更高的可读性、简洁性和标准化。这体现了局部语法与整体规则的关系,1 + 1 > 2
- 可以少写字符,也避免了在某些键盘上要敲“shift”键的麻烦
- 分号主要是给机器看的,但 Python 更注重于人性化。早期硬件有所限制,加分号可以提升解析/编译的速度,但如今障碍已除,某些分号党语言只是在延续 B/C 语言的老传统
- 对于需要换行的语句,Python 中使用反斜杠(\)来连接,可以理解成它把换行给转义了,能够解决一句多行的问题

关联阅读
1、A Brief History of the Semicolon in Programming
2、The End of the Semicolon Era
写在最后
本文属于“Python为什么”系列文章(Python猫出品),该系列主要关注 Python 的语法、设计和发展等话题,以一个个“为什么”式的问题为切入点,试着展现 Python 的迷人魅力。更多详情:视频地址
Python 为什么不用分号作终止符?的更多相关文章
- Python 为什么用 # 号作注释符?
关于编程语言中的注释,其重要性基本上已为大家所共识. 然而关于注释的规范,这个话题就像我们之前聊过的缩进.终止符和命名方式一样,众口难调. 注释符通常可分为两种,即行注释与块注释(inline/blo ...
- python中的分号(“;”)
在C.Java等语言的语法中规定,必须以分号作为语句结束的标识.Python也支持分号,同样用于一条语句的结束标识.但在Python中分号的作用已经不像C.Java中那么重要了,Python中的分号可 ...
- python去掉行尾的换行符
python去掉行尾的换行符 mystring.strip().replace(' ', '').replace('\n', '').replace('\t', '').replace('\r', ' ...
- python启动应用程序和终止应用程序
python启动应用程序和终止应用程序 1. 目的 每天上班,工作需要,电脑上需要每天开机启动一些软件,下班时候,需要关掉一些软件.一个一个打开和关闭貌似是很繁琐的,于是乎,这个脚本产生了. 2. 环 ...
- 【Linux命令】EOF自定义终止符
EOF自定义终止符用法 我们在脚本中经常会发现使用EOF的情况.EOF可以结合cat命令对内容进行追加.比如:执行脚本的时候,需要往一个文件里自动输入多行内容.如果是少数的几行内容,可以用echo命令 ...
- python中的分号
很多编程语言是以分号作为一行代码的的结束标志,但是在Python中不是这样的,而是靠缩进来识别程序结构. Python中一行代码以分号结束,并不是必须的,准确来说是不被推荐的,因为加上分号就是画蛇添足 ...
- Python中readline()函数 去除换行符
从Python中readline()函数读取的一行内容中含有换行符\n,很多时候我们需要处理不含有换行符的字符串,此时就要去掉换行符\n. 方法是使用strip()函数. 例子如下: f = open ...
- Python学习 :面向对象 -- 成员修饰符
成员修饰符 两种成员 - 公有成员 - 私有成员, __字段名 - 无法直接访问,只能通过内部方法来间接访问私有成员 简例:公有成员与私有成员 class Info: country = '中国' ...
- Python全栈day28(描述符应用)
描述符的使用 python是弱类型语言,及参数的赋值没有类型限制,下面通过描述符机制来实现类型限制功能 描述符应用1.py class Typed: def __get__(self, instanc ...
随机推荐
- PLDroidPlayer 是七牛推出的一款免费的适用于 Android 平台的播放器 SDK,采用全自研的跨平台播放内核,拥有丰富的功能和优异的性能,可高度定制化和二次开发。 https://developer.qiniu.com/pili/sdk/…
PLDroidPlayer PLDroidPlayer 是一个适用于 Android 平台的音视频播放器 SDK,可高度定制化和二次开发,为 Android 开发者提供了简单.快捷的接口,帮助开发者在 ...
- TOP-K Problems
最小的K个数 直接数组排序,取出前K个.复杂度\(O(nlogn)\). 分治 此题只要求出最小的K个数,并不要求这K个数有序. 我们可以借鉴快排中的partition做法,将比第K个数小的都放前面, ...
- 图论--2-SAT--poj 3678-Katu Puzzle(模板题)
Description Katu Puzzle is presented as a directed graph G(V, E) with each edge e(a, b) labeled by a ...
- 程序猿使用Python的tkinter库进行GUI编程肯定要会的事件处理
事件类型用户通过鼠标.键盘.游戏控制设备在与图形界面交互时,就会触发事件.tkinter事件通常采用了将事件名称放置于尖括号内的字符串表示,尖括号中的内容我们称之为事件类型.事件类型有其通用的定义方式 ...
- vue2.0那些坑之使用elementUI后v-on:click事件不生效问题
最近在维护vue2.0的项目,遇到了不少坑,在这里说下引用elementui之后,使用v-on:click绑定点击事件无效的情况,如下图: 我想阻止冒泡事件,发现无效.这里将@click换成了@cli ...
- python安装pycrypto库
使用pycharm时安装pycrypto库,一直安装不上,提示安装成功,退出去一看,依旧没有 最后选择了pip安装,但一直报错(Microsoft Visual C++ 9.0 is required ...
- 推荐一款Python数据可视化神器
1. 前言 在日常工作中,为了更直观的发现数据中隐藏的规律,察觉到变量之间的互动关系,人们常常借助可视化帮助我们更好的给他人解释现象,做到一图胜千文的说明效果. 在Python中,常见的数据可视化库有 ...
- C#黔驴技巧之去重(Distinct)
前言 关于C#中默认的Distinct方法在什么情况下才能去重,这个就不用我再多讲,针对集合对象去重默认实现将不再满足,于是乎我们需要自定义实现来解决这个问题,接下来我们详细讲解几种常见去重方案,孰好 ...
- ubuntu上lib-ace库安装编译
描述下本人电脑情况: 虚拟机版本:VMware-workstation-full-v7.1.4: ACE版本:ACE6.0.0 虚拟机[Linux](http://lib.csdn.net/base/ ...
- docker部署微服务遇到的问题二
自己尝试将微服务部署到docker上面,期间按照周立的微服务架构实战13章进行学习 按照书上的步骤,一切部署成功之后,尝试访问,一直没有成功访问,周五部署了两遍 折腾了一下 还是没有找到为啥,周一继续 ...