为什么包含使用局部变量的 lambda 函数会改变局部变量的顺序

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

以下打印

{'a': 'a', 'b': 'b'}

def foo(a: str = "a", b: str = "b") -> None:
    print(locals())
foo()  # Prints {'a': 'a', 'b': 'b'}

我期望在 Python 3.7+ 中

locals
返回创建的顺序

但是下面的打印内容

{'b': 'b', 'a': 'a'}


def foo(a: str = "a", b: str = "b") -> None: print(locals()) lambda: a foo() # Prints {'b': 'b', 'a': 'a'}
看起来它延迟了变量创建的顺序,这很奇怪。这是为什么?

啊,这只发生在 3.10 及更低版本。我猜这是一个Python问题,如果有人能找到相关的GitHub问题,请分享。

python lambda local-variables
1个回答
0
投票
Lambda 效应:尽管 lambda 非常简单,但它的存在可以影响 Python 组织局部变量的方式。 lambda 可以导致内部变量重新排序,以确保正确解析所有必要的引用。 简而言之,添加 lambda 会导致对局部变量的处理进行内部调整,这可能会更改它们在 locals() 返回的字典中的顺序。这是与 Python 处理本地环境和闭包的方式相关的行为,而不是变量本身的问题。

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