在哪种情况下可以在python中使用缩进?

时间:2019-03-13 13:57:02

标签: python indentation

我正在读Python Language reference

lexical analysis page

  

在读取文件的第一行之前,将单个零压入堆栈;这将不再弹出。压入堆栈的数字将始终严格按照从下到上的顺序递增。在每条逻辑行的开头,将行的缩进级别与堆栈顶部进行比较。如果相等,则什么也不会发生。如果较大,则将其压入堆栈,并生成一个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

所以我想知道

  • 是否有一个与上述C ++代码段等效的python
  • 当我可以使用缩进时,python中到底是什么情况, 除了一般情况,例如函数和类定义。

2 个答案:

答案 0 :(得分:1)

“在每条逻辑行的开始处,将行的缩进级别与堆栈的顶部进行比较。如果相等,则什么也不发生。如果较大,则将其压入堆栈,并且将一个INDENT令牌生成。”

因此,在这里它告诉您有关何时生成缩进令牌的所有信息。现在,您还需要知道,只有关键字class def,if,for,while等可以使您拥有当前的附加缩进标记。

“当我可以使用缩进时,除了函数和类定义之类的一般情况之外”。 ->从不。

注意:换行符不算作缩进标记。所以:

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

是可能的,因为它是同一行python,所以从技术上讲它不算作缩进。函数参数也一样:

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

答案 1 :(得分:0)

我认为缩进的最重要用法是循环。因为python在Matlab中没有end for循环,所以具有正确缩进的行在循环中。