gpt4 book ai didi

python - 为什么在编译时确定位置?

转载 作者:太空狗 更新时间:2023-10-29 18:08:17 25 4
gpt4 key购买 nike

这是对 this question 的一些跟进.

  1. 为什么局部是在编译时而不是在执行时确定的?纯粹是为了表现吗?
  2. 有没有在执行时查找变量的语言? IE。每次访问一个变量时,首先在本地范围内搜索该变量,然后搜索升级到所有封闭范围?
  3. ECMA 语言如何处理这个问题?

换句话说,问题 2:是否存在以下代码(在必要的语法中)可以工作的语言:

def f(): print ('f')

def g():
f()
f = 42

g()

最佳答案

这种行为称为词法作用域。您在 #2 中描述的称为动态范围,尽管口头描述具有误导性(您说“封闭范围”,其中“调用函数”或“激活记录”会更准确)。

实际上每一种常用的语言都使用词法作用域,而不仅仅是 Python。这包括 C# 和 ECMAScript/JavaScript(除了 evalwith),我认为这就是您所说的“ECMA 语言”。有语言,其中一些仍在使用。 Emacs Lisp 是其中之一,Perl 提供词法和动态范围。

词法作用域的基本原理不仅仅是为了性能(包括闭包在内的完整词法作用域实际上有性能成本,请参阅 funcarg 问题),它是为了简单性和可靠性。虽然第一次学习这门语言时可能会感到惊讶,但规则实际上非常简单,因此有经验的程序员可以立即分辨出标识符的哪种使用是指哪个范围。人们可以孤立地理解函数,因为执行不受调用此函数的人以及他们决定如何命名他们的变量的影响。

关于python - 为什么在编译时确定位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19064520/

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