Python进阶——推导式、枚举类型要点

Python进阶——推导式、枚举类型要点,第1张

 “ 本文通过几个简单的示例,各种推导式的写法Python中枚举的意义以及指出了使用枚举类型过程中可能出现的错误,适合新手学习,老手复习使用。”

 PS:实战型选手移步文末总结,快速应用高级编程技巧!

  • 博主每篇文章的注释都是干货!每个代码段都有详细注释,一定要认真看注释!!!
  • 重要的事情说三遍:一定要看注释!!!一定要看注释!!!一定要看注释!!!

推导式 列表推导式
  • 核心:简化代码

  • 示例:生成列表[1,4,9,16]

# 生成一个1,2,3.4平方的列表[1,4,9,16]
# 循环写法
lis = []
for i in range(1, 5):  # Python基础:使用in range(1,5)不包括5,且range(5)由0开始
    lis.append(i ** 2)
print(lis)

# 推导式写法
lis = [i ** 2 for i in range(1, 5)]     # for 后表示i进行的循环
print(lis)

   

  • 添加条件:仅生成偶数列表[4,16]

# 仅生成偶数列表[4,16]
# 循环写法
lis = []
for i in range(1, 5): 
    if i % 2 == 0:
        lis.append(i ** 2)
print(lis)

# 推导式写法
lis = [i ** 2 for i in range(1, 5) if i % 2 == 0]  # if判断直接加在for后
print(lis)

   

  • 推导式生成字符列表:['h', 'e', 'l', 'l', 'o']
lis = [i for i in 'hello']  # Python基础知识:Python中字符串也是序列
print(lis)

   

  • 多重循环:for后跟for
# 多重循环
lis = [i+j for i in 'abc' for j in '12']    # for后跟for
print(lis)

   

  • 多重循环+条件限制:最后添加if 
# 多重循环
lis = [i + j for i in 'abc' for j in '12' if i + j != 'c2']  # 除去c2
print(lis)

  

元组推导式
  • []改为tuple(),其余 *** 作同列表推导式

  • 元组:元素不可修改

# 元组推导式
lis = tuple(i for i in 'abc') # []换成tuple()
print(lis)
  字典推导式
  • {key:value  语句},示例:{2:4,3:9,4:16}
# 字典推导式示例:{2:4, 3:9, 4:16}
lis = {x: x**2 for x in range(2,5)}
print(lis)

   

集合推导式
  • 集合特点:无序、不重复、可修改
  • 因为集合不重复,所以 'loop' 输出字母仅包含l、o、p
# 集合推导式:不重复+无序
lis = {x for x in 'loop'}
print(lis)

枚举类型   基础
  • 特点:可读性高、防止修改、防止重复(名重复、值重复)
  • 枚举元素:名+值
  • 枚举示例:
  • 一定要认真看注释!!!
from enum import Enum    # 导入枚举包

class Price(Enum):    # 继承父类:Enum,类下元素不可修改,防重复
    apple = 5    # 定义枚举的元素,枚举元素名为apple,枚举元素值为7
    banana = 6
    orange = 7

print(Price.apple)      # 打印枚举元素:苹果
print(type(Price.apple))        # 打印类型是个enum元素
print('--------------------')

# 枚举元素 = 名+值
print(Price.apple.name)     # 打印枚举元素名
print(Price.apple.value)    # 打枚举元素元素值
print('--------------------')

print(Price['banana'])  # 打印名为banana的枚举元素
print(Price(6))     # 打印值为6的枚举元素
print('--------------------')
  • 结果

 不可重复+不可修改性
  • 枚举名不可重复,枚举元素值一般不可修改
  • 一定要认真看注释!!!
# 不可重复性、不可修改性
class Price(Enum):
    apple = 5
    apple = 999     # 报错,不可重复
    banana = 6
    orange = 7

Price.apple = 1      # 报错,不可修改

# 代码无法运行,因为枚举名不可重复+枚举值一般不可修改(装饰器可以unique)
 枚举类型值重复问题
  • 遍历打印枚举元素,值重复只显示第一个枚举元素名
  • Classname.__members__遍历打印所有枚举元素值
  • 一定要认真看注释!!!
# 枚举元素的遍历,值重复只打印第一个
for i in Price:
    print(i)
print('--------------------')
# 使用__members__打印可打印出所有枚举元素名
for i in Price.__members__:
    print(i)

  • IntEnum枚举值必须是整型,StrEnum,枚举值必须是字符串
  • @unique装饰器设定值唯一性,枚举元素值必须唯一
from enum import IntEnum, unique
@unique
class Price(IntEnum):
    apple = 5
    banana = 6
    orange = 7

总结

推导式:

  • 列表推导式
    • 示例(条件+多重循环):lis = [i + j for i in 'abc' for j in '12' if i + j != 'c2'] 
  • 元组推导式
    • 示例:lis = tuple(i for i in 'abc') # []换成tuple()
  • 字典推导式
    • 示例:lis = {x: x**2 for x in range(2,5)}
  • 集合推导式
    • 示例:lis = {x for x in 'loop'}        # 集合不重复性,输出仅含l、o、p 

枚举类型:

  • 可读性高、防止修改、防止重复(名重复、值重复)
  • 枚举名不可重复,枚举元素值一般不可修改
  • 不同枚举元素值重复,打印要用特殊语句,否则只显示第一个枚举元素名
  • @unique,IntEnum,StrEnum的特殊用法 

💗 “问:何为少年?答:从不缺乏从头再来的勇气、敢于明知不可为而为之——即是少年” 

                                                                        ——Created By 是羽十八ya

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/920803.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存