首页 > 解决方案 > 编译器是否将静态定义移出循环?

问题描述

假设我有这个循环,其中有一个定义:

for name in ["alice", "bob", "ceelo"]:
     full_name = name + {"alice": "cooper", "bob": "dylan", "ceelo":"green"}[name]
     print(full_name)

如您所见,我的 dict 没有分配给任何东西。我可以通过将其重构为:

names = {"alice": "cooper", "bob": "dylan", "ceelo":"green"}
for name in names:
     full_name = name + names[name]

……但我不想。出于原因。我保证。

我的问题:标准 Python 编译器会自动执行这个折射器吗?

标签: python-3.x

解决方案


首先,python 不使用编译器,因为在您尝试运行一些 python 文件后没有生成编译文件,它使用解释器。

在这里,即使您没有将字典分配给任何变量名,例如“names = {"alice": "cooper", "bob": "dylan", "ceelo":"green"}",字典本身仍然是一个字典,它在你的记忆中占据了一些空间,不管名字是否给定。

因此,您将能够使用 key 来获取您的值,例如 "{"alice": "cooper", "bob": "dylan", "ceelo":"green"}[name]"。但是,如果您从未声明过,python 解释器不会自动将字典分配给变量。


推荐阅读