C#和python中枚举的对照学习

一、C#中的枚举定义及使用

enum orientation
{
    east,
    south,
    west,
    north
}

//2.关于枚举的类型。默认是int,但可以重新定义为

enum tiangan : byte//可以为byte、short、ushort、uint、long和ulong等数值类型
{
    jia = 5,
    yi,
    bing,
    ding
}

//3.默认情况下每个值从0开始。但可以重新赋值,后续值为前值+1
enum dizhi
{
    zi = 11,
    chou = 12,
    yin,//=13,值自动加1
    mao,//=14
    wu,//=15
    ji,//=16
    geng = 11,
    xin,//=12
    ren = chou,//=2
    gui//=13

}

//4.枚举不可以有重复的名称,但是可以有重复的值。
enum color
{
    red = 0,
    orange = 0,
    yellow,
    green,
    black,
    blue,
    purple
}

class Program
{
    //1.关于enum的定义。
    //是程序员自己定义的值类型。
    //枚举明确指定对变量有效的值,
    //枚举提供了一种有效的方式来定义可能分配给变量的一组已命名整数常量。
    
    //5.专门处理枚举的是Enum类(静态类)。GetName和GetNames是两个重要方法
    //关于位标志以后专门学习
    static void Main(string[] args)
    {
        orientation ori = orientation.south;
        Console.WriteLine($"My direction is {ori}");
        //使用强制转换获得枚举值
        int jiazi = (int)dizhi.yin;
        Console.WriteLine($"jiazi的数值是{jiazi}");
        Console.WriteLine($"tiangan的第二个是:{Enum.GetName(typeof(tiangan),2)}");//第一个参数是enum对象,第二个是枚举的值
        foreach(var i in Enum.GetNames(typeof(tiangan)))//获得所有枚举
            Console.WriteLine(i);
    }
}

输出是

二、python中枚举的使用

python中没有专门的枚举类型。可以通过字典或者类来构建。但是这样构建的枚举存在问题。一是枚举值可以修改,二是这些枚举功能的类可以被实例化,三是枚举值是否重复无法检查。

python虽然没有专门enum关键字,但是引进了enum模块来代替enum关键字。要知道,python的模块可以解决一切问题O(∩_∩)O哈哈~。

from enum import IntEnum

class enumTiangan(IntEnum):
    jia=1,
    yi=2,
    bing=3,
    ding=3,
    wu=4,
    ji=5,
    geng=6
    xin=6

#按名字取值
print(enumTiangan["jia"])#enumTiangan.jia
print(enumTiangan["jia"].value)#1
print(enumTiangan["jia"].name)#jia
#取全部值
for i in enumTiangan:
    print("%s=%d"%(i.name,i.value))

输出:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章