日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

enum python_enum:python实现枚举也很优雅

發(fā)布時間:2025/3/20 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 enum python_enum:python实现枚举也很优雅 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

介紹

enum是一個用來枚舉的模塊

創(chuàng)建枚舉類型

import enum

# 創(chuàng)建一個類,繼承自enum下的Enum

class Color(enum.Enum):

red = 1

green = 2

blue = 3

yellow = 4

pink = 5

cyan = 6

# 下面便可以通過名稱直接獲取成員

print(Color["red"], type(Color["red"])) # Color.red

print(Color.red, type(Color.red)) # Color.red

# 打印的是類型

# 那么如何獲取里面的值呢?

# 調(diào)用name獲取名稱,調(diào)用value獲取值

print(Color.red.name, type(Color.red.name)) # red

print(Color.red.value) # 1

# 也可以通過迭代來獲取值

for c in Color:

print(c.name, c.value)

"""

red 1

green 2

blue 3

yellow 4

pink 5

cyan 6

"""

名稱或者值相同

import enum

# 如果我定義了重復(fù)的key(仮)

try:

class Color(enum.Enum):

red = 1

green = 2

blue = 3

yellow = 4

pink = 5

cyan = 6

cyan = 5

except Exception as e:

print(e) # Attempted to reuse key: 'cyan'

# 提示我們key重復(fù)了

import enum

# 如果我定義了重復(fù)的value(仮)

class Color(enum.Enum):

red = 1

green = 2

blue = 3

yellow = 4

pink = 5

cyan = 6

purple = 6

# 這是通過value來獲取成員

# 獲取成員可以通過Color.key | Color[key]的方式,還可以使用Color(value)的方式

print(Color(6).name) # cyan

print(Color.purple.name) # cyan

# 可以看到只打印了cyan

# 如果值相同的話,那么后者相當(dāng)于前者的別名,兩者指向的內(nèi)容是一樣的

for c in Color:

print(c)

"""

Color.red

Color.green

Color.blue

Color.yellow

Color.pink

Color.cyan

"""

# purple依舊沒有打印

# 那如果我就想把值相同的也打印出來,要怎么做呢?

# 枚舉內(nèi)部有一個__members__屬性,相當(dāng)于一個字典

for c in Color.__members__.items():

print(c[0], c[1])

"""

red Color.red

green Color.green

blue Color.blue

yellow Color.yellow

pink Color.pink

cyan Color.cyan

purple Color.cyan

"""

# 第一個元素是key,str類型。第二個元素是枚舉類型。

# 可以看到最后一個,即便key是purple,但是對應(yīng)的枚舉類型依舊是Color.cyan

for c in Color.__members__.items():

print(c[0], c[1], c[1].name, c[1].value)

"""

red Color.red red 1

green Color.green green 2

blue Color.blue blue 3

yellow Color.yellow yellow 4

pink Color.pink pink 5

cyan Color.cyan cyan 6

purple Color.cyan cyan 6

"""

# 最后一個打印的仍是cyan

# 成員之前也可以進(jìn)行比較,但只支持is和==操作符,不支持大小比較

print(Color.green is Color.red) # False

print(Color.green is Color.green) # True

print(Color.cyan is Color.purple) # True

print(Color.cyan == Color.purple) # True

成員的值是否可變

import enum

class Color(enum.Enum):

red = 1

green = 2

blue = 3

yellow = 4

pink = 5

cyan = 6

purple = 6

try:

Color.red.name = "xxx"

except Exception as e:

print(e) # can't set attribute

try:

Color.red.value = "xxx"

except Exception as e:

print(e) # can't set attribute

# 可以看到是無法賦值的

import enum

class Color(enum.Enum):

red = 1

green = 2

blue = 3

yellow = 4

pink = 5

cyan = []

purple = []

print(Color.cyan is Color.purple) # True

Color.cyan.value.append(123)

print(Color.cyan is Color.purple) # True

"""

可以看到,盡管無法重新賦值,但是本地修改還是可以的,如果是可變類型的話

但是兩個還是一樣的,因?yàn)閜urple是cyan的別名,當(dāng)在創(chuàng)建這個類的時候,由于都是空列表,所以認(rèn)為兩者是一樣

因此當(dāng)我對cyan.value進(jìn)行append的時候,會影響purple

"""

print(Color.cyan.value) # [123]

print(Color.purple.value) # [123]

Color.purple.value.append(456)

# 通過反過來也是一樣的

print(Color.cyan.value) # [123, 456]

print(Color.purple.value) # [123, 456]

強(qiáng)制讓成員的值不一樣

枚舉類,key重復(fù)是不允許的,但是值重復(fù)是可以的,可如果我也不允許值重復(fù)呢?只需要加上一個裝飾器即可

import enum

try:

@enum.unique

class Color(enum.Enum):

red = 1

green = 2

blue = 3

yellow = 4

pink = 5

cyan = []

purple = []

except Exception as e:

print(e) # duplicate values found in : purple -> cyan

# 提示我們purple和cyan的value重復(fù)了

比較成員的值

之前說過,枚舉成員是不支持大小比較的,但如果我想支持呢?

import enum

# 換一種繼承的類,改成IntEnum

class Color(enum.IntEnum):

red = 1

green = 2

blue = 3

yellow = 4

pink = 5

cyan = "6"

# 此時里面的成員要是int類型,或者能將字符串轉(zhuǎn)成int

print(Color.red < Color.blue) # True

print(Color.red + Color.cyan) # 7

總結(jié)

以上是生活随笔為你收集整理的enum python_enum:python实现枚举也很优雅的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产一级伦理片 | 97人人人| 私人毛片 | 国产性xxxx高清 | 国产欧美日韩综合 | gogo亚洲国模私拍人体 | 男女猛烈无遮挡 | 中文字幕色哟哟 | 国产一二三区精品 | 精品一区二区三区在线视频 | 午夜天堂影院 | 蜜桃视频导航 | 国产精品影院在线观看 | 欧美一级爽aaaaa大片 | 97成人在线观看 | 一区二区国产精品 | 天美视频在线观看 | 亚洲av永久无码精品 | 999久久久国产精品 韩国精品一区二区 | 欧美性成人 | 日韩av视屏| 色综合天天综合网天天狠天天 | 欧美aaaaa| 在线视频观看国产 | 黄色高清在线观看 | 黑人激情视频 | 大尺度做爰床戏呻吟舒畅 | 韩国一区二区三区视频 | 欧美成人aaa片一区国产精品 | 国产全是老熟女太爽了 | 婷婷色婷婷 | 久久久精品国产 | 一区二区三区资源 | 在线视频免费观看 | 久久人妻精品白浆国产 | 欧美精品国产动漫 | 五月婷婷丁香在线 | 水蜜桃影库 | 欧美日韩一区二区三区四区 | 国产自精品 | 欧美一区二区三区在线观看视频 | 黄色日b片| 久久国产成人精品av | 超91在线| 91美女视频在线观看 | 国产视频观看 | 免费一区二区视频 | 欧美日韩成人一区二区 | 中文无码精品一区二区三区 | 国产精品卡一卡二 | 色啊色 | 不卡黄色| 欧美日韩国产一区二区 | 动漫美女被到爽流 | 亚洲av乱码久久精品蜜桃 | 久久久人妻无码一区二区 | 中日韩中文字幕一区二区 | 日日干夜夜撸 | 久久久久久久一区 | 成人在线播放网站 | 亚洲av无码久久精品狠狠爱浪潮 | 久久99精品久久久久久琪琪 | 好姑娘在线观看高清完整版电影 | 国产精品自偷自拍 | 性欧美色图 | 人人色网| 国产综合日韩 | 日本韩国欧美中文字幕 | 国产私拍 | 九九热在线精品 | 天天草综合 | 亚日韩欧美 | 大学生av | 精品无码国产一区二区三区51安 | 成年人一级黄色片 | 激情五月视频 | 黄色成年人视频 | 97人人射 | 99精品国产99久久久久久97 | 淫品色影院 | 污片网站| 欧美午夜精品理论片 | 久久99久 | 亚洲av午夜精品一区二区三区 | 国产精品美女www爽爽爽视频 | 日韩中文字幕一区二区三区 | 女女互慰吃奶互揉调教捆绑 | 男人的天堂网av | 成人在线91 | 亚洲午夜精选 | 网站av| 亚洲理论电影在线观看 | 国产青青视频 | 国产精品一区二区av日韩在线 | 午夜少妇av | 亚洲欧美一区二区三区四区 | 欧美自拍偷拍一区 | 日韩天堂在线视频 | a级片一区二区 |