本章节我们揭开Python进阶部分的高级特性,详细讲解枚举、闭包,并对函数式编程做出介绍
一、 枚举其实是一个类
from enum import Enum #枚举类 class VIP(Enum): YELLOW = 1 #大写 GREEN = 2 BLACK = 3 RED = 4 print(VIP.YELLOW) # VIP.YELLOW
二、枚举和普通类相比有什么优势
1.不可变
2.去相同值
三、枚举类型、枚举名称与枚举值
from enum import Enum #枚举类 class VIP(Enum): YELLOW = 1 GREEN = 2 BLACK = 3 RED = 4 # 枚举类型、枚举名字、枚举值 print(VIP.GREEN.value) # 2 枚举值 print(VIP.GREEN) # VIP.GREEN 枚举类型 print(VIP.GREEN.name) # GREEN 枚举名称 print(VIP['GREEN']) # VIP.GREEN print(type(VIP['GREEN'])) # <enum 'VIP'> print(type(VIP.GREEN)) # <enum 'VIP'> print(type(VIP.GREEN.name)) # <class 'str'> # 遍历 for v in VIP: print(v) # VIP.YELLOW # VIP.GREEN # VIP.BLACK # VIP.RED
四、枚举的比较运算
from enum import Enum #枚举类 class VIP(Enum): YELLOW = 1 GREEN = 2 BLACK = 3 RED = 4 # 枚举比较 r = VIP.GREEN == VIP.GREEN print(r) # True r = VIP.GREEN is VIP.GREEN print(r) # True # 枚举不可以做大小比较 不可以不同的枚举进行比较
五、枚举注意事项
枚举不可以相同的标签
值一样的话 枚举会把后面的当作前面的一个别名
from enum import Enum #枚举类 class VIP(Enum): YELLOW = 1 GREEN = 1 BLACK = 3 RED = 4 print(VIP.GREEN) # VIP.YELLOW for v in VIP: print(v) # VIP.YELLOW # VIP.BLACK # VIP.RED for v in VIP.__members__: print(v) # YELLOW # GREEN # BLACK # RED for v in VIP.__members__.items(): print(v) # ('YELLOW', <VIP.YELLOW: 1>) # ('GREEN', <VIP.YELLOW: 1>) # ('BLACK', <VIP.BLACK: 3>) # ('RED', <VIP.RED: 4>)
六、枚举转换
from enum import Enum #枚举类 class VIP(Enum): YELLOW = 1 GREEN = 1 BLACK = 3 RED = 4 a = 1 print(VIP(a)) # VIP.YELLOW
七、枚举小结
from enum import Enum from enum import IntEnum,unique #枚举类 @unique # 装饰器 不允许值相同 IntEnum 枚举值仅仅为int class VIP(IntEnum): YELLOW = 1 GREEN = 2 BLACK = 3 RED = 4
# 23种设计模式 单例模式
八、进阶内容开场白
九、一切皆对象
十、什么是闭包
十一、一个事例看看闭包
十二、闭包的经典误区
十三、出个题,用闭包解决!
十四、我先用非闭包解决一下
十五、再用闭包解决一下_
十六、小谈函数式编程