为什么python不允许将未绑定的标识符用作字典键?

AOr*_*ona 2 javascript python dictionary

在python中,我可以将任何对象用作字典键(7,“ hello”,无):

例如

myDict = {}
x = someObject()
myDict[x] = "world"
Run Code Online (Sandbox Code Playgroud)

但是我不能使用未绑定的标识符。给出另一种语言的示例,其中标识符成为对象的属性(JavaScript)

x = { y : "hello" };
Run Code Online (Sandbox Code Playgroud)

为什么不支持将未绑定标识符用作密钥?在字典范围内或封闭范围内定义此绑定不是很简单吗?

Bar*_*mar 6

在Python中,对象文字中的键是要求值的表达式。如果您尝试使用未分配的变量,则它将收到错误,就像在其他任何使用该变量一样。

在JavaScript中,默认情况下不评估对象文字中的键。当你写

{j: "hello"}
Run Code Online (Sandbox Code Playgroud)

它被视为

{"j": "hello"}
Run Code Online (Sandbox Code Playgroud)

不管是否j有值,它始终被视为文字。

仅供参考,EcmaScript 6添加了一种使用方括号评估密钥的方法。具有可变键的Python字典的等效项为:

{ [j]: "hello" }
Run Code Online (Sandbox Code Playgroud)

如果未声明该变量,则会出现错误。