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))

輸出:

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