2024-05-18 08:44:46 发布
网友
这是对this question的一点补充。你知道吗
换言之,提出问题2:是否有以下代码(以必要的语法)适用的语言:
def f(): print ('f') def g(): f() f = 42 g()
这种行为称为词汇范围界定。您在#2中描述的内容称为动态作用域,尽管口头描述有误导性(您所说的“封闭作用域”中的“调用函数”或“激活记录”更准确)。你知道吗
几乎所有常用的语言都使用词法范围,而不仅仅是Python。这包括C#和ECMAScript/JavaScript(除了eval和with),我想这就是你所说的“ECMA语言”的意思。语言已经出现,其中一些还在使用。emacslisp就是其中之一,Perl提供了词法和动态范围。你知道吗
eval
with
词法作用域的基本原理不仅仅是为了性能(包括闭包在内的完整词法作用域实际上有一个性能成本,请参见funcarg问题),而是为了简单性和可靠性。当第一次学习这种语言时,可能会感到惊讶,但规则实际上非常简单,因此有经验的程序员可以立即判断标识符的哪个用法是指哪个作用域。人们可以孤立地理解函数,因为执行不受调用函数的人和他们决定如何命名变量的影响。你知道吗
这种行为称为词汇范围界定。您在#2中描述的内容称为动态作用域,尽管口头描述有误导性(您所说的“封闭作用域”中的“调用函数”或“激活记录”更准确)。你知道吗
几乎所有常用的语言都使用词法范围,而不仅仅是Python。这包括C#和ECMAScript/JavaScript(除了
eval
和with
),我想这就是你所说的“ECMA语言”的意思。语言已经出现,其中一些还在使用。emacslisp就是其中之一,Perl提供了词法和动态范围。你知道吗词法作用域的基本原理不仅仅是为了性能(包括闭包在内的完整词法作用域实际上有一个性能成本,请参见funcarg问题),而是为了简单性和可靠性。当第一次学习这种语言时,可能会感到惊讶,但规则实际上非常简单,因此有经验的程序员可以立即判断标识符的哪个用法是指哪个作用域。人们可以孤立地理解函数,因为执行不受调用函数的人和他们决定如何命名变量的影响。你知道吗
相关问题 更多 >
编程相关推荐