python-3.x - 编译器是否将静态定义移出循环?
问题描述
假设我有这个循环,其中有一个定义:
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 不使用编译器,因为在您尝试运行一些 python 文件后没有生成编译文件,它使用解释器。
在这里,即使您没有将字典分配给任何变量名,例如“names = {"alice": "cooper", "bob": "dylan", "ceelo":"green"}",字典本身仍然是一个字典,它在你的记忆中占据了一些空间,不管名字是否给定。
因此,您将能够使用 key 来获取您的值,例如 "{"alice": "cooper", "bob": "dylan", "ceelo":"green"}[name]"。但是,如果您从未声明过,python 解释器不会自动将字典分配给变量。
推荐阅读
- python - 数组(10,1)数组(10,)之间的python区别
- javascript - 图像未在 Testflight 中显示
- ember.js - emberjs 使用 findRecord 加载微调器
- go - 如何防止客户端因事件信号延迟而出错?
- android - 不允许嵌套事务
- node.js - 鉴于返回结果始终是加密的,我如何对我的请求进行单元测试?
- gnuplot - Gnuplot:对数轴和 dgrid3d 不能一起工作
- python - 错误:1210:执行准备好的语句的参数数量不正确
- nexus - 日志中的 Sonatype Nexus 用户角色更改
- android - 在重命名的文件中获取真正的 mime 类型