什么时候以及为什么类型对象比字典更好?

我正在改编公司提供的一些代码(用于控制乐器)。我本人不是Python专家,所以我想了解以一种方式或另一种方式进行操作是否有任何特殊优势。

他们的代码基本上是

def enum(**enums):
    return type('Enum',(),enums)

Inst = enum(
    CONTINUE = 0,STOP = 1,LOOP = 2,END_LOOP = 3,JSR = 4,RTS = 5,BRANCH = 6,LONG_DELAY = 7,WAIT = 8,RTI = 9
)

,他们使用它来访问上述“条目”的值,例如:

Inst.RTS
% 5

据我了解,Insttype的对象。


出于存储字符串及其关联值的目的,我还可以定义一个dict

Inst = {'CONTINUE':0,'STOP':1,'LOOP':2,'END_LOOP':3,'JSR':4,'RTS':5}

,然后基本上得到相同的结果:

Inst['RTS']
% 5

问题

与普通的type相比,dict对象的用途是什么?还是上面的例子只是一个不好的例子?

fanliangze 回答:什么时候以及为什么类型对象比字典更好?

使用:

def enum(**enums):
    return type('Enum',(),enums)

您实际上是在使用参数enums的值作为__dict__属性创建一个类,这本身就是一个dict,因此从技术上讲,它不比dict更“好”,但是用法在语法上比字典更简单,因为:

Inst.RTS

可以说比它更易于阅读和键入

Inst['RTS']
,

使用type的三参数形式类似于定义class

  

class type(name,bases,dict)

     

带有三个参数,返回一个新的类型对象。这本质上是   类语句的动态形式。

您的Inst表达式是明确定义此类的一种不必要的操作,但实际上是等效的:

class Enum:
    CONTINUE = 0
    STOP = 1
    LOOP = 2
    END_LOOP = 3
    JSR = 4
    RTS = 5
    BRANCH = 6
    LONG_DELAY = 7
    WAIT = 8
    RTI = 9

Inst = Enum

class的优点是属性由类很好地定义。例如,您可以使用它来进行提示,类型检查或引用 exact 枚举集。相反,dict仅具有 some 键和 some 值-确切的成员是巧合的。


请注意,自Python 3.4起,Python具有enum模块。它允许定义适当的枚举,这些枚举以其他语言复制从枚举已知的功能:

from enum import Enum,auto

class Inst(int,Enum):
    CONTINUE = auto()
    STOP = auto()
    LOOP = auto()
    END_LOOP = auto()
    JSR = auto()
    RTS = auto()
    BRANCH = auto()
    LONG_DELAY = auto()
    WAIT = auto()
    RTI = auto()
本文链接:https://www.f2er.com/3141163.html

大家都在问