Python 块中的开始和结束

问题描述 投票:0回答:5

我正在使用Python

但是空间差距让我的生活变得非常困难

示例

当我使用 if 语句时

if Parm2 == 1:
    Ch = "A"
elif Parm2 == 2:
    Ch = "B"
elif Parm2 == 3:
    Ch = "C"
else:
    continue
mdl = CallFunc(Parm2)

print("XX Always Print XX")

现在无论如何都应该打印“XX Always Print XX”

但由于我的错误,它位于 if 语句内,导致我很长时间才找到

实际的 if 语句是嵌套的并且更长

我想知道是否有一种方法可以在Python中的此类语句中使用begin/end或{}

类似的东西

更新

对于关注 IF 语句的人

if Parm2 == 1:
{
    Ch = "A"
}
elif Parm2 == 2:
{
    Ch = "B"
}
elif Parm2 == 3:
{
    Ch = "C"
}
else:
{
    mdl = CallFunc(Parm2)
}
print("XX Always Print XX")

现在快乐吗?

现在如何让括号在 Python 中工作?

python
5个回答
4
投票

Python是基于缩进的。是的,就像你指出的那样,它更难阅读,更容易犯错误,但事实就是如此。


2
投票

考虑下载一个Python IDE,比如Pycharm,它们有助于识别像这样的错误,它们还具有“自动缩进”功能。但不,Python 是基于缩进的。


1
投票

Python 设计者意识到,大括号或

begin/end
关键字对于人类程序员来说大多是噪音。他们通常通过代码的布局来识别代码的结构。例如,如果您要编写 C 代码:

if (condition)
    x = y;
    w = z;

人们通常不会注意到大括号丢失了,并假设这两个分配都是由条件控制的。编写这样的代码是一种常见错误,尤其是当您从只有一个语句的块开始时(因此大括号是可选的并且被省略),并且在添加第二个语句时忘记添加大括号。 (请参阅为什么省略大括号被认为是不好的做法?)。

相反,如果你写

if (condition) {
    x = y;
w = z;
}

看起来

w = z;
不是条件条件的一部分。

大括号的存在主要是为了处理代码的软件(编译器、编辑器、IDE)的利益,它们使它们更容易检测代码组。 Python 设计者决定模仿人类在解析器中读取代码的方式,而不是强迫人类适应计算机的需求。

大括号允许更灵活的代码布局,但在实践中,利用这一点通常被认为是错误的。编写代码如下

while (something) { statement1; statement2; 
statement3; }

可读性差
while something:
    statement1
    statement2
    statement3

Python 确实允许 some 灵活性:您可以使用

;
分隔同一行上的语句,并将条件语句的内容放在
:
之后的同一行上。但这样的写法不被认为是Pythonic,并且应该只在非常特殊的情况下使用(这篇博文描述了这些情况)。

当你学习一门新的编程语言并且你习惯了以前使用的语言的模式时,总是需要进行一些调整(许多程序员拒绝学习 Lisp,因为它的L很多I烦人) ,S愚蠢的P括号)。但给它一点时间,你就会习惯的。


0
投票

这展示了如何破解它:

if True: {
    print("hello")
}

如果你在谷歌上搜索“如果你不想对块使用缩进,python 怎么办”你可能会得到: 桃核蟒蛇压痕

熟悉其他语言的程序员常常对缩进很重要的想法感到愤怒:许多程序员喜欢按照自己喜欢的方式自由地格式化代码。然而,Python 缩进规则非常简单,大多数程序员已经使用缩进来使代码可读。 Python 只是将这个想法更进一步,并赋予了缩进意义。

即他们强迫你不要使用缩进。

我的问题是,我喜欢使用 emacs 自动缩进来重新缩进整个代码文件,但这完全搞乱了 python 中的缩进;在 C 或 C++ 中,这可以找到缩进问题并使它们变得明显;在 python 中,它会丢失所有信息并改变程序的含义;

不要误会我的意思,我想同时使用严格的缩进和花括号;

您可以使用上面的技巧来“规避”Python 缩进,但是当为自己以外的任何人编写代码时它不会流行


0
投票

我的解决方案是使用#begin和#end来划分块,所以如果缩进混乱,我可以弄清楚如何恢复它。 Python 只是将它们视为引号 - 没问题。

选项:省略#begin,仅使用#end。

选项:不要简单地添加#end,而是添加文本来指示它是哪个块,例如#end if()。

© www.soinside.com 2019 - 2024. All rights reserved.