about 2 results (0.02 seconds)

Python中如何用枚举类型?

by LauCyun Feb 23,2016 16:42:27 5,054 views

怎么在Python里代替枚举类型呢?

PEP435标准里已经把枚举添加到Python3.4版本,在Pypi中也可以向后支持3.3、3.2、3.1、2.7、2.6、2.5和 2.4版本。

如果想向后兼容$ pip install enum34,如果下载enum(没有数字)将会是另一个版本。

from enum import Enum
Animal = Enum('Animal', 'ant bee cat dog')

或者等价于:

class Animals(Enum):
    ant = 1
    bee = 2
    cat = 3
    dog = 4

在更早的版本,下面这种方法来完成枚举:

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

像这样来用:

>>> Numbers = enum(ONE=1, TWO=2, THREE='three')
>>> Numbers.ONE
1
>>> Numbers.TWO
2
>>> Numbers.THREE
'three'

也很容易支持自动计数,像下面这样:

def enum(*sequential, **named):
    enums = dict(zip(sequential, range(len(sequential))), **named)
    return type('Enum', (), enums)

这样用:

>>> Numbers = enum('ZERO', 'ONE', 'TWO')
>>> Numbers.ZERO
0
>>> Numbers.ONE
1

如果要把值转换为名字可以加入下面的方法:

def enum(*sequential, **named):
    enums = dict(zip(sequential, range(len(sequential))), **named)
    reverse = dict((value, key) for key, value in enums.iteritems())
    enums['reverse_mapping'] = reverse
    return type('Enum', (), enums)

这样会覆盖名字下的所有东西,但是对于枚举的输出很有用。如果转换的值不存在就会抛出KeyError异常。用前面的例子:

>>> Numbers.reverse_mapping['three']
'THREE'

(全文完)

...

Tags Read More..


C++零基础——枚举enum

by LauCyun Jun 18,2015 04:21:14 4,641 views

枚举类型,顾名思义,“枚”作为量词,作“个”讲,那么枚举,就是一个一个的列举,如果一件事情能够被一个一个的列举,那么它的数量肯定就是有限的,否则是不能被一一列举出来的。所以枚举类型即为能被列举的常量的一个集合。
在生活中,枚举的例子随处可见,比如礼拜几,那么就可以作为一个枚举变量。这个变量所存储的值,是有限的,且,能被我们所列举。再比较说,性别。它也可以作为一个枚举类型,我们知道,性别也就只有“男”或者“女”,它是可以被我们所列举的。它能很直观的表达出我们所定义的事件。
如:定义一个枚举类型的变量,虽然不知道变量具体是什么值,但能知道它可能会有哪些值,这样,这样,就能对程序中所出现的变量的取值有一个很好的估量,从而使程序的编写更加顺利。

1、C语言中enum

enum color
{
	red = 10,    //red是int类型
	yellow = 'A',//yellow为char类型
	white,
	bule
};

C语言枚举,本质类型检测不严格,允许类型不一致。但是CPP是强类型,所以CPP禁止使用C语言的enum。


2、CPP中的enum

一般形式,初始化和赋值。如:

#include<iostream>
using namespace std;

//没有默认值,默认从0开始递增;否则从默认值开始递增
enum color
{
	red = 10,
	yellow,
	white,
	bule
};
int main()
{
	enum color color1(red);  //
	enum color color2(color::white);//初始化一般形式
	//color1 = 3;  //C语言赋值方法,在CPP中会error C2440: “=”: 无法从“int”转换为“color”
	color1 = bule;//C++不可以,C++类型严格
	cout << color1 << endl;   //13
	cout << color2 << endl;   //12
	return 0;
}

指定数据类型。如:指定 color 为 char 类型。

enum color :char
{
	red = 'A',
	yellow,
	white,
	bule
};

CPP中枚举名称不可以重名,枚举成员不可以重名。如:

enum color
{
	red,
	yellow,
	white,
	bule
};

enum color //error 枚举名称以及成员不能重名
{
	red,
	yellow,
	white,
	bule
};

避免上述错误,解决如下:

enum color1
{
	red1,
	yellow1,
	white1,
	bule1
};

enum color2
{
	red2,
	yellow2,
	white2,
	bule2
};

CPP是强类型,所以枚举类型检测也严格。如:

enum color :char
{
	//red = 10.11,  //error C2058: 常量表达式不是整型
	red = 'A',
	yellow,
	white,
	bule
};


3、枚举的实际应用

enum class Jun :int
{
	班长 = 1,
	排长,
	营长,
	连长,
	团长,
	旅长,
	师长,
	军长,
	司令
};


...

Tags Read More..