在Python中,我可以在哪些情况下使用缩进?

3

我正在阅读Python语言参考文档

词法分析页面中:

在读取文件的第一行之前,单个0会被推送到堆栈上;这将永远不会被弹出。推送到堆栈上的数字将始终从底部向顶部严格增加。在每个逻辑行的开头,将该行的缩进级别与堆栈顶部进行比较。如果相等,则什么也不会发生。如果大于,则将其推送到堆栈上,并生成一个INDENT标记。

这里说,在一行代码中添加缩进只会将与INDENT相关联的值添加到缩进跟踪堆栈中。


因此,我尝试做一个C++片段的Python等效版本:

int x = 23;
{
    int y = 13;
}
int z = 2*x;

使用这个 Python 代码片段

x = 23
    y = 13
z = 2*x

但是让Python运行这段代码会生成以下错误:

    y = 13
IndentationError: unexpected indent

因此,上述规则并不总是适用的,我想知道:

  • 是否有Python等效于上面的C++代码片段
  • 在Python中,除了函数和类定义之外的一般情况下,什么情况下可以使用缩进。

6
在Python中没有直接对应的内容,因为Python实际上没有块作用域。 - pvg
3
听起来你没有仔细阅读 Python 文档,如果你继续阅读,你会明白何时需要缩进。 - gold_cy
4
在Python中,您使用缩进来表示代码块的包含关系。但是,Python中不存在“匿名”代码块,只有由classwithforwhileif等关键字引入的代码块。 - chepner
有没有类似于临时变量的东西,可以在使用后快速丢弃? - Rishabh
在Python中,你不能像在C/C++中那样使用“{ }”来限制代码的作用域。因为Python是一种解释型语言而不是编译型语言,所以它只能根据缩进来理解你的代码。基本上,在Python中,缩进就是一切 :) - Esdras Xavier
显示剩余4条评论
2个回答

1

每个逻辑行的开头,会将该行的缩进级别与堆栈顶部进行比较。如果相等,则不会发生任何事情。如果较大,则将其推入堆栈,并生成一个INDENT标记。

这里告诉您有关何时生成缩进标记的所有信息。现在您还需要知道,只有关键字class、def、if、for、while等允许您拥有额外的当前缩进标记。

"除了函数和类定义之类的一般情况,我何时可以使用缩进呢?" -> 从不。

注意:换行不算作缩进标记。例如:

>>> a = [1, 2, \  # \ is breaking line.
        3]

虽然可能会出现缩进,但从技术上讲,它并不算作缩进,因为它是相同的Python行。对于函数参数也是如此:

>>> a = np.array([0,1],
                 dtype=float)

0

我认为缩进最重要的用途是在循环中。因为Python没有像Matlab一样的循环结束符end,所以正确缩进的行在循环中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接