今天给大家分享几个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循环创建,而用列表推导式来表达只需要一行代码即可。