python switch语句_几个Python里的骚操作

今天给大家分享几个Python里面的骚操作,大家会更加感受到Python编码的强大。

1.用字典映射代替switch case语句

大家首先看下面这段用C#编写的switch case代码,代码很好理解,switch函数传入一个参数day,参数的不同对应不同的case语句,那怎么将这段代码用Python里面的字典代替呢?

switch(day)
 {
     case 0:
      dayName = "Sunday";
       break;
     case 1:
       dayName = "Monday";
       break;
     case 2:
       dayName = "Tuesday";
       break;
     ...
     default:
       dayName = "Unknown";
      break;
 }

我的第一反应是if else条件语句,但是如果用条件语句的话,就体现不出现Python代码的强大了,条件语句是各种语言都通用的一种形式,再想想有没有其他的方法?

啊哈,我想到了字典,字典里面的键值对刚好可以映射这个业务功能,具体代码如下

day = 0
switcher = {
    0:'Sunday',
    1:'Monday',
    2:'Tuesday'
}

day_name = switcher.get(day,'Unknown')

print(day_name)

上面代码中用到一个Python内置函数get,get函数有很好的容错性,第一个参数就是day,第二个刚好对应switch case语句中的‘unknown’

但这样写还是用一定的局限性,有点基础的同学都知道,switch case之间可以随便扩展,写很多模块,那么这样一来,再把字典的值当作是一个常量就不合适了,因此,我们可以自定义函数,将函数作为一个参数传入字典中的值位置,具体代码如下

 day = 0

def get_sunday():
    return 'Sunday'

def get_MOnday():
    return 'Monday'

def get_Tuesday():
    return 'Tuesday'

def get_default():
    return 'Unknown'

switcher = {
    0:get_sunday,
    1:get_MOnday,
    2:get_Tuesday
}

day_name = switcher.get(day,get_default)()   
print(day_name)

2.列表推导式

叫列表推导式不是说只能推导列表,至于它为什么叫这个,who care,还是通过一个实例来理解

比如现在有一个列表,通过遍历列表,然后将每个元素平方后打印结果。

 a = [1,2,3,4,5,6,7,8]


b = [i**2 for i in a]

print(b)

现在如果加一个条件,将列表中大于5的元素平方后打印结果,也很方便,直接在后面加一个if 条件判断

 a = [1,2,3,4,5,6,7,8]
a1 ={1,2,3,4,5,6,7,8}      #集合推导

b = [i**2 for i in a if i>=5]
b1 = {i**2 for i in a if i>=5}

print(b)
print(b1)

3.字典推导列表推导式

刚才已经说了,不仅仅只有列表可以用列表推导式,那字典如何实现这个功能呢?

 students = {
    '喜小乐':18,
    '石敢当':20,
    '横小五':15
}

b = {key for key,value in students.items()}
print(b)

通过上面的代码可以看出,首先字典的最外层是{},其次字典有key和value,再用一个内置函数items将字典的键或值提取出来。

当然,我们也可以将键和值颠倒一下

 students = {
    '喜小乐':18,
    '石敢当':20,
    '横小五':15
}

b = {value,key for key,value in students.items()}
print(b)

最后,我们用这个看一下元组的列表推导式

 students = {
    '喜小乐':18,
    '石敢当':20,
    '横小五':15
}

b1 = (key for key,value in students.items())   #元组推导列表推导式
print(b1)



<generator object <genexpr> at 0x000000000216A750>

运行代码,结果很奇怪,不能将键和值显示出来,而是出现generator,为什么会这样呢?因为元组是不可变的,这个知识点在前面学习过,不知道大家还有没有印象。

那怎么将键和值显示出来,具体代码如下:

 students = {
    '喜小乐':18,
    '石敢当':20,
    '横小五':15
}

b1 = (key for key,value in students.items())   #元组推导列表推导式

for x in b1:
     print(x)

总结

列表推导式是一种非常简洁的创建列表的方式,很多时候我们需要创建一个满足特定要求的新列表,不得不用for循环创建,而用列表推导式来表达只需要一行代码即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值