Zel*_*ahl 7 performance enums python-3.x
今天我尝试将我的一些"最终"值(我的班级成员)从一个类外包给一个Enum.我运行了我编写的单元测试并注意到,测试需要比以前更长的时间才能完成.当我把这些"最终"值重新放回课堂时,一切都恢复了原来的速度.这里是我在Enum中访问它们时的一个例子:
class SpecialCharacters(Enum):
TONE_NUMBERS = ["0", "1", "2", "3", "4"]
Run Code Online (Sandbox Code Playgroud)
像这样访问它:
SpecialCharacters.TONE_NUMBERS.value
Run Code Online (Sandbox Code Playgroud)
它们在类中时访问值的示例:
self.TONE_NUMBERS
Run Code Online (Sandbox Code Playgroud)
所以我想知道为什么当我将值放入Enum时,我的测试需要花费3倍(!)的时间.它应该是对另一个班级成员的简单调用,但我认为这不会产生如此大的差异.
(将它们外包的目标是它们可用于其他类,而其他类不必访问与它们无关的类.)
我的python版本是3.4.
这是Python 3.4的枚举中的已知错误:https://bugs.python.org/issue23486
它已在Python 3.5中"修复",因此枚举属性查找仅比正常情况慢3倍,而不是20倍.
要回答这个问题Why?:
最初的设计Enum是使成员成为虚拟属性。这意味着它们没有保留在Enum类字典中,这意味着所有可能的查找都必须首先失败,然后__getattr__在类上调用并找到成员。
所以基本上是忙碌的工作。
解决方法是在可能的情况下(多数情况下)将成员放入类字典中。
| 归档时间: |
|
| 查看次数: |
1467 次 |
| 最近记录: |