gpt4 book ai didi

python - Python中 block 的概念

转载 作者:行者123 更新时间:2023-12-05 09:26:06 31 4
gpt4 key购买 nike

documentation状态:

A Python program is constructed from code blocks. A block is a piece of Python program text that is executed as a unit. The following are blocks: a module, a function body, and a class definition.

这似乎暗示,与我的想法相反,一段缩进的代码,例如 if 语句的主体或 for 循环不是 block 。 p>

我没看错吗?作为一个单元执行是什么意思(例如,为什么 for 循环不符合这个定义)?如果不是 block ,您会怎么称呼缩进代码?

最佳答案

This seems to imply, contrary to what I had thought, that an indented piece of code, such as the body of an if-statement or a for-loop is not a block.

的确,至少在 Python 语言引用的技术语境中,我们通常所说的“缩进 block ”并不是“ block ”。

在技术规范中,单词被赋予与其通常含义不同的特定上下文含义并不罕见,不幸的是,当通常含义也是技术含义时,有时会发生这种情况。

What would you call an indented piece of code if not a block?

Python 语言引用称它为 suite .但我认为大多数 Python 程序员宁愿称其为 block ,除非他们提议对语言引用进行编辑。

What does it mean to be executed as a unit (e.g. why wouldn't a for-loop fit this definition)?

这意味着“ block ”(在 Python 语言引用的严格技术意义上)对应于 code object , 在栈帧中执行,并有自己的词法作用域。

for 循环不符合这个定义,因为它没有自己的代码对象、堆栈框架或词法范围;它的字节码是包含 block 的代码对象的一部分,它在包含 block 的堆栈帧中执行,并且它具有包含 block 的词法范围。

实际上,这意味着在 for 循环(或任何其他套件)内声明的变量在套件执行后仍在范围内,直到“ block ”结束。


I really don't like variables in compound statements not being local to the statement... Why wouldn't Python allow me to have a small scope for variables?

类 C 语言具有“ block 作用域”(这里的“ block ”一词表示由一对大括号分隔的一系列语句),但它们还允许您声明变量而无需分配给它们,因此您可以即使分配将发生在不同的范围内,也要在正确的范围内声明它们。例如,以下在 C、Java 或类似语言中完全没问题:

int x;
if(condition) {
x = 5;
} else {
x = 7;
}

但是 Python 是一种动态语言,在其中您不需要在分配变量之前声明变量,因此等效的 Python 代码将是:

if condition:
x = 5
else:
x = 7

如果 Python 的“套件”有它们自己的词法作用域,那么这个模式就不会起作用; x 将在 ifelse 范围内,并且之后不会在范围内。要获得与 C 代码相同的行为,您必须在 if 语句之前编写一个虚拟的 x = None 赋值以声明 x 在正确的范围内(可能还有 nonlocal x,这样 ifelse 套件中的赋值就不会声明新的本地范围内的变量)。这将是愚蠢的,而且几乎没有什么好处,所以 Python 不是那样设计的是有道理的。

关于python - Python中 block 的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74442230/

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