前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >零基础学编程031:Python与其它语言最不同的一条语法规则

零基础学编程031:Python与其它语言最不同的一条语法规则

作者头像
申龙斌
发布2018-03-06 10:59:40
2K0
发布2018-03-06 10:59:40
举报

有C或JAVA其它编程语言基础的人可能对Python中的这条语法规则最不适应:Python中的缩进是有语法含义的,它用来表示一个代码块(code block)。这里说的代码块是指函数定义条件语句循环语句等等。缩进就是指每行代码最前面的几个空格或TAB制表符,通常是与上一行的冒号一起使用的,例如:

代码语言:javascript
复制
# 为了清楚地表示缩进,我把空格都用.表示
def price(stock) :
....url = 'http://hq.sinajs.cn/list=' + stock
....with req.urlopen(url) as f :
........hq = f.read().decode('GBK')
........v = hq.split(',')
........return v[1]

假设用C#语言来写,大概是这样:

代码语言:javascript
复制
// 这段代码只是一个示例,无法通过编译
double price(string stock) {
    string url = 'http://hq.sinajs.cn/list=' + stock;
    using(WebRequest f = new WebRequest(url)) {
        string hq = f.read().decode('GBK');
        string []v = hq.split(',');
        return v[1];
    }
}

大部分编程语言都是通过花括号"{"、"}"这类符号来标记块的开始和结束,花括号内部的代码并不需要缩进,缩进只是为了让程序员更容易读,更容易看懂代码的逻辑结构。在C#里,刚才的代码也可以这样写:

代码语言:javascript
复制
// 这段代码只是一个示例,没有缩进的代码难以阅读
double price(string stock) {
string url = 'http://hq.sinajs.cn/list=' + stock;
using(WebRequest f = new WebRequest(url)) {
string hq = f.read().decode('GBK'); 
string []v = hq.split(','); return v[1];
}  }

Indent缩进、Deindent反缩进

而Python把这些花括号也给省了,缩进是一条强制性的语法规则,如果缩进不正确,则代码会报错!

来看看《18零基础学编程018:条件语句》中的那段代码,如果写成这样:

代码语言:javascript
复制
from turtle import * 
for i in range(365) : 
    forward(1.01 ** i)
    left(9)
    if(i%7==0) : 
    stamp()

则会提示:

There is an error (expected an indented block) at line 6, column 9.

indent就是向右缩进的意思,而deindent(或dedent)是向左缩进的意思,向左缩进是我编的名字,我也不知道deindent的正规中文翻译是什么。

在IDLE集成环境中,还有专门的快捷键ctrl + ] 用于缩进,而ctrl + [ 则是相反的操作。

不要使用制表符TAB?

按TAB键也可以产生缩进的效果,这一点在Word排版时也会用到,但在Python中要小心了,不同的文本编辑器对TAB的解释可能不一致,有些默认是8个字符,有些是4个字符,有些则是对齐到8的倍数列上,如果你的代码中混用TAB和空格,则会出现一些奇怪的错误。

现在的许多编辑器中都增加了一项设置,可以自动将TAB保存为多个空格,比如IDLE、Notepad++(注意不是Windows中自带的记事本,多个两个加号,功能强大多了),当你按TAB键时,自动产生的是4个空格。

在这种编辑器中写代码就方便多了,你按一次TAB可以,按四次空格也行,效果一样。像Notepad++中还提供了细细的对齐线等功能,还可以突出显示空格和制表符,让你看得更清楚。

Python编码规范

Python语言本身对于缩进的空格数没有规定,但为了让程序员们互相之间容易沟通,Python社区对代码的规范性提出了许多建议,如果你遵守这些建议,则与全世界的程序员们基本上保持了一致的习惯。网址:https://www.python.org/dev/peps/pep-0008/

关于缩进这一部分,规范中规定:

  • 缩进用4个空格
  • 一条比较长的语句也可以用缩进分成多行,详细的规定请阅读英文原文
  • Python 3中已经禁止TAB和空格混用

悬挂else问题

在其它编程语言中,有可能会遇到这类的悬挂else问题,即末尾的else语句与2个if语句中哪一个配对?有经验的程序员会要求所有的语句都要有花括号。

在Python中的这样一段代码:

代码语言:javascript
复制
if (条件1) :
    if (条件2) :
        fun1();
else :
    fun2();

在C#或JAVA中会写成这样:

代码语言:javascript
复制
if (条件1) {
    if (条件2) {
        fun1();
    }
}
else {
    fun2();
}

Python的缩进规则让代码显得更简洁,根本不会出现悬挂else的问题,你的缩进表明了你的else与哪个if相匹配。

当然Python中的缩进也有一个缺点,如果你从网页上复制python代码,有些网页上的代码排版本来就很乱,如果原始的python代码缩进乱了,则无法重新格式化。

小结:

  • 选用支持将TAB自动转换为4个空格的编辑器或集成开发环境
  • 保持TAB为4个空格的默认编辑器设置
  • 从其它地方粘贴的代码如果出现错误,可以用对齐线辅助检查
  • 遵守Python的编码规范,方便与全世界的其他程序员沟通

--- END ---

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 申龙斌的程序人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 有C或JAVA其它编程语言基础的人可能对Python中的这条语法规则最不适应:Python中的缩进是有语法含义的,它用来表示一个代码块(code block)。这里说的代码块是指函数定义、条件语句、循环语句等等。缩进就是指每行代码最前面的几个空格或TAB制表符,通常是与上一行的冒号一起使用的,例如:
  • 大部分编程语言都是通过花括号"{"、"}"这类符号来标记块的开始和结束,花括号内部的代码并不需要缩进,缩进只是为了让程序员更容易读,更容易看懂代码的逻辑结构。在C#里,刚才的代码也可以这样写:
  • Indent缩进、Deindent反缩进
  • 而Python把这些花括号也给省了,缩进是一条强制性的语法规则,如果缩进不正确,则代码会报错!
  • 则会提示:
  • indent就是向右缩进的意思,而deindent(或dedent)是向左缩进的意思,向左缩进是我编的名字,我也不知道deindent的正规中文翻译是什么。
  • 在IDLE集成环境中,还有专门的快捷键ctrl + ] 用于缩进,而ctrl + [ 则是相反的操作。
  • Python语言本身对于缩进的空格数没有规定,但为了让程序员们互相之间容易沟通,Python社区对代码的规范性提出了许多建议,如果你遵守这些建议,则与全世界的程序员们基本上保持了一致的习惯。网址:https://www.python.org/dev/peps/pep-0008/
  • 关于缩进这一部分,规范中规定:
  • 在C#或JAVA中会写成这样:
  • Python的缩进规则让代码显得更简洁,根本不会出现悬挂else的问题,你的缩进表明了你的else与哪个if相匹配。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档