gpt4 book ai didi

python - Python 中的缩进并不总是必要的?

转载 作者:行者123 更新时间:2023-11-28 21:18:20 25 4
gpt4 key购买 nike

我遇到了一段代码(针对问题进行了简化),结构如下:

while True:
if x == y: break

到目前为止,我对 Python 的理解是,解释器高度依赖制表符/空格来理解循环和条件等内容,但上面的代码风格运行没有问题,这表明这并不完全正确。

谁能解释其中的细微差别?

最佳答案

完整的细节在 Compound Statements 中解释。在引用文档中。但作为一个简短的总结:

任何“复合语句”,如 if 都可以缩进组语句,或内联简单语句列表.*

那么,它们之间有什么区别呢?

if x == y:
break

if x == y: break

真的,没什么,除了第一个通常被认为更具可读性和惯用性。 ( PEP 8 ,官方风格指南,说第二种形式“通常不鼓励”,但“有时可以在同一行上放置一个带有小主体的 if/for/while”。)**

它们具有完全相同的语义、性能等。它们甚至可以编译为完全相同的字节码。句法上存在细微差异,但它只会影响将这些错误消息嵌入各种非法结构时收到的错误消息。


那么,你能放一些比 break 更复杂的东西吗?

是的。请注意,这是一个简单的语句 list。这意味着您可以有多个简单的语句,用分号分隔:

if x == y: print('Hey!'); x = -x; break

但是,这是非常糟糕的风格。除非你想赢得代码高尔夫比赛,否则不要那样做。

但也有限制。请注意,这是一个简单 语句列表。这意味着没有复合语句。这是非法的:

if x == y: while True: print('loopy')

可以看到完整的简单语句列表here .


* 内联语句列表在官方语法中仍然被认为是一个套件。但在松散的讨论中,suite 通常意味着缩进 block 替代方案,而不是内联替代方案。

** 根据我的经验,经验丰富的开发人员在代码中最常看到的地方实际上是 PEP 8 所说的永远不要这样做的地方之一:一个有一堆空函数的类可能有它们一行,如 def spam(self): pass。这会使它们难以粘贴到交互式解释器中,这可能就是 PEP 8 说永远不要这样做的原因。

关于python - Python 中的缩进并不总是必要的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26792212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com