常量是任何一門語言中都會使用的一種變量類型
如 要表示星期常量,我們可能會直接定義一組變量
JAN = 1
TWO = 2
...
然后在返回給前端的時候,我們返回的就會是1,2,...這種魔法數字,導致后來的人閱讀起來很麻煩。
在python中,為了代碼的可讀性和簡潔性,更建議使用枚舉類型
1、枚舉類型的定義:
from enum import Enum
1)可以通過傳入cls_name和一個可迭代對象來定義
傳入list列表
week= Enum("Week", (["JAN", "TUE",... ]))
傳入tuple元組
week = Enum("Week", ("JAN", "TUE"))
傳入字典
week= Enum("Week", ({"JAN":"1", "TUE":"2"}))
傳入string字符串
week= Enum("Week", "JAN TUE")
2)定義一個類,繼承Enum
class Week(Enum):
JAN = 1
TUE = 2
2、枚舉類型定義注意事項:
1)成員名稱不能重復, 如果使用相同的key,會報錯 Attempted to reuse key
2)不同成員的值允許相同,但是對於相同的值的成員,第二個成員名被看做第一個成員名的別名,在遍歷的時候,只會遍歷出其中一個成員
通過值回去枚舉成員時,也只能獲取一個
3)如果要限制枚舉的值不能重復,可以使用裝飾器@unique
使用了@unique裝飾器,如果值出現重復,會報錯:duplicate values
3、枚舉取值
1)通過成員名稱來取成員
week.TUE/ week["TUE"] --->
week.TUE.name---->TUE
week.TUE.value---->2
2)通過值來獲取成員
Week(2) ------>
Week(2).name---->Tue
Week(2).value---->2
3)遍歷取值
for week in Week:
print(week)
前面說了,如果Week中有值重復的成員,那么遍歷的時候,只會遍歷出一個成員,但是如果想要把所有的成員都遍歷出來呢?需要用到__members__屬性
for week in Week.__members__.items():
print(week)
4)enum枚舉類型比較
枚舉成員可進行同一性比較
week.JAN is week.TUE---->False
week.JAN is not week.JAN---->False
枚舉成員可進行等值比較
week.JAN.value == "1"--->True
week.JAN==week.JAN
5)枚舉類型的應用:
【需求】現在做一個注冊需求,1)可以通過郵箱密碼注冊 ;2)可以通過手機號驗證碼注冊;
針對這個寫一個登錄API
【解析】針對不同的登錄類型,傳遞給后端的字段是不一樣的,如郵箱密碼登錄,需要傳遞郵箱和密碼,手機號驗證碼登錄,需要傳遞給后台手機號和驗證碼,所以需要針對不同的登錄方式做不同的登錄驗證。
這個時候,我們可以使用枚舉類型來完成這個需求。
1)定義一個枚舉類
2)定義register方法
上面截圖中,定義了一個promise字典,里面定義了針對不同注冊類型的注冊方法
然后根據前端傳遞過來的type值,對應的調用promise中的函數
這里的form.type.data 是枚舉類型,並不是枚舉值,在定義form驗證的時候,將枚舉類型賦值給了type.data,所以可以直接使用promise[form.type.data]調用